Redis 初识

作者: izerone | 来源:发表于2018-09-29 18:08 被阅读4次

    初识 Redis

    《 Redis 开发与运维》的学习笔记,希望大家多多指导。

    什么是 Redis

    • Redis 的全称是 Remote Dictionary Server, 远程字典服务器。
    • Redis是一个开源的使用ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API,是一种 NoSQL 数据库。
    • 相关网站

    Redis 的特点

      1. 速度快
      • 为什么快 ?
        • Redis 的所有数据都是存放在内存中的(最主要的原因)
        • Redis 是用 C 语言实现的, 一般来说 C 语言实现的程序“距离”操作系统更近,执行速度相对会更快
        • Redis 使用了单线程架构,预防了多线程可能产生的竞争问题
        • Redis 源代码优良,集性能和优雅于一身
      1. 基于键值对的数据结构服务器
      1. 丰富的功能
      • 5 种数据结构
        • 字符串
        • Bitmaps
        • HyperLogLog
        • GEO , 地理信息定位 ( 3.2 版本 )
        • 哈希
        • 列表
        • 集合
        • 有序集合
      • 提供了键过期功能,可以用来实现缓存。
      • 提供了发布订阅功能,可以用来实现消息系统。
      • 支持 Lua 脚本功能,可以利用 Lua 创造出新的 Redis 命令。
      • 提供了简单的事务功能,能在一定程度上保证事务特性。
      • 提供了流水线(Pipeline)功能,这样客户端能将一批命令一次性传到 Redis,减少了网络的开销。
      1. 简单稳定
      • 简单
        • Redis 的源码很少
        • Redis 使用单线程模型
        • Redis 不需要依赖于操作系统中的类库
      1. 客户端语言多
      • Redis 提供了简单的 TCP 通信协议
      1. 持久化
      • RDB
      • AOF
      1. 主从复制
      • Redis 提供了复制功能,实现了多个相同数据的 Redis 副本,复制功能是分布式 Redis 的基础
      1. 高可用和分布式
      • 2.8 版本,高可用实现 Redis Sentinel,它能够保证 Redis 节点的故障发现和故障自动转移
      • 3.0 版本, 分布式实现 Redis Cluster, 它是 Redis 真正的分布式实现,提供了高可用、读写和容量的扩展性。

    Redis 使用场景

    Redis 可以做什么

      1. 缓存
      1. 排行榜系统
      • 列表和有序集合数据结构
    • 3.计数器应用
      • 视频播放数
    • 4.社交网络
      • 赞/踩,粉丝,共同好友/喜好, 推送,下拉刷新
      1. 消息队列系统
      • Redis 提供了发布订阅通能和阻塞队列的功能,基本可以满足简单的消息队列功能

    Redis 不可以做什么

    • 数据规模
      • 基于内存,不适合大规模数据,经济成本非常高;适用于小规模数据
    • 数据冷热
      • 热数据
        • 指需要频繁操作的数据
      • 冷数据
      • 热数据适合放到 Redis 中加速读写,冷数据不适合

    用好 Redis 的建议

      1. 切勿当作黑盒使用,开发与运维同样重要
      1. 阅读源码

    Redis 的基础操作

    安装

    • Linux 系统
    # 下载 Redis 制定版本的源码压缩包到当前目录
    wget http://download.redis.io/releases/redis-3.0.7.tar.gz
    # 解压缩
    tar xzf redis-3.0.7.tar.gz
    # 建立 redis 目录的软连接,为了不把 redis 目录固定到指定版本上,利于未来升级
    ln -s redis-3.0.7 redis
    cd redis
    # 将相关运行文件放到 /usr/local/bin/ 下,编译之前确保操作系统已经安装gcc
    make
    # 安装
    make install
    
    # 安装结束后,验证
    redis-cli -v
    

    配置、启动、操作、关闭 Redis

    • src 和 /usr/local/bin 目录下可执行文件说明

      可执行文件 作用
      redis-server 启动 Redis
      redis-cli Redis 命令行客户端
      redis-benchmark Redis 基准测试工具
      redis-check-aof Redis AOF 持久化文件检测和修复工具
      redis-check-dump Redis RDB 持久化文件检测和修复工具
      redis-sentinel 启动 Redis Sentinel
    • 启动 Redis

      • 默认配置

        # 按照默认配置启动
        redis-server
        
      • 运行启动

        redis server --configName1 configValue --configName2 configValue2
        # 例如, 以 6666 作为端口启动 Redis
        redis-server --port 6666
        
      • 配置文件启动

        • 默认配置文件位置: redis 文件夹下 redis.conf

          配置名 配置说明
          port 端口
          logfile 日志文件
          dir Redis 工作目录(粗放持久化文件和日志文件)
          daemonize 是否以守护进程的方式启动 Redis (后台启动)
          redis-server /opt/redis/redis.conf
          
    • Redis 命令行客户端

    # 两种连接方式
    ## 第一种  redis-cli -h {host} -p {port}
    redis-cli -h 127.0.0.1 -p 6379
    # 取值
    get hello
    
    ## 第二种  redis-cli -h ip{host} -p {port} {command}
    redis-cli -h 127.0.0.1 -p 6379 get hello
    
    • 停止 Redis 服务
    # 关闭过程: 断开与客户端的连接、持久化文件生成
    `redis-cli shutdown
    
    # 带参数关闭
    ## 关闭前不生成持久化文件
    redis-cli shutdown nosave
    
    ## 关闭前生成持久化文件
    redis-cli shutdown save
    
    # 使用杀死进程的方法关闭
    kill redis进程号
    
    # 注意:不能粗暴的使用 kill -9 强制杀死进程,这样不会持久化操作,同时有可能不能正常关闭和丢失数据
    
    • 卸载 Redis
      • 关闭 Redis 服务
      • 删除相关文件或文件夹
        • 安装目录文件夹
        • /usr/local/bin 下的启动文件

    设置 Redis 开机自启动 ( Linux )

    • init.d 方式 ( CentOS 6 之前版本,包括 CentOS6 )

      • 基本原理
        • 系统开机启动时会去加载 /etc/init.d/ 下面的脚本,通常而言每个脚本文件会自定义实现程序的启动;若想将新的程序开机自启动,只需在该目录下添加一个自定义启动程序的脚本,然后设置相应规则即可。
      • 步骤
        • 编写自启动脚本 redis

          # chkconfig: 2345 10 90
          # description: Start and Stop redis
          
          PATH=/usr/local/bin:/sbin:/usr/bin:/bin
          
          REDISPORT=6379 #实际环境而定
          EXEC=/usr/local/bin/redis-server #实际环境而定
          REDIS_CLI=/usr/local/bin/redis-cli #实际环境而定
          
          PIDFILE=/var/run/redis.pid
          CONF="/opt/redis/redis.conf" #实际环境而定
          
          case "$1" in
                  start)
                          if [ -f $PIDFILE ]
                          then
                                  echo "$PIDFILE exists, process is already running or crashed."
                          else
                                  echo "Starting Redis server..."
                                  $EXEC $CONF
                          fi
                          if [ "$?"="0" ]
                          then
                                  echo "Redis is running..."
                          fi
                          ;;
                  stop)
                          if [ ! -f $PIDFILE ]
                          then
                                  echo "$PIDFILE exists, process is not running."
                          else
                                  PID=$(cat $PIDFILE)
                                  echo "Stopping..."
                                  $REDIS_CLI -p $REDISPORT SHUTDOWN
                                  while [ -x $PIDFILE ]
                                  do
                                          echo "Waiting for Redis to shutdown..."
                                          sleep 1
                                  done
                                  echo "Redis stopped"
                          fi
                          ;;
                  restart|force-reload)
                          ${0} stop
                          ${0} start
                          ;;
                  *)
                          echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2
                          exit 1
          esac
          
          
        • 设置权限并测试

          # 设置可执行权限
          chmod 755 redis
          
          # 启动测试
          /etc/init.d/redis start
          
          
        • 设置开机自启动并测试

          # 设置开机自启动
          chkconfig redis on
          
          # 关机重启并验证
          reboot
          redis-cli
          
      • 注意
        • redis 服务名称可以自定义
          • redis_6666, redis_666.service
    • systemctl 方式 ( CentOS7 )

      • 基本原理
        • 使用 systemctl 进行服务管理
      • 步骤
        • 创建systemctl 服务
          # 在/lib/systemd/system 目录下创建一个脚本文件redis.service
          
          # 脚本内容
          
          # 基本信息
          [Unit]
          ## 描述信息
          Description=Redis
          ## 在哪个服务之后启动
          After=network.target
          
          # 服务信息
          [Service]
          Type=forking
          ## 启动服务的命令
          ExecStart=/usr/local/bin/redis-server /opt/redis/redis.conf
          ## 重启服务的命令
          ExecReload=/usr/local/bin/redis-server -s reload
          ## 停止服务的命令
          ExecStop=/usr/local/bin/redis-server -s stop
          PrivateTmp=true
          
          # 安装相关信息
          [Install]
          ## 以何种方式启动,当系统以多用户方式(默认的运行级别)启动时,这个服务需要被自动运行
          WantedBy=multi-user.target
          
        • 刷新配置并设置为开机启用
          # 刷新配置
          systemctl daemon-reload
          
          # 启动服务            
          systemctl start redis.service
          # 重新启动
          systemctl restart redis.service
          # 停止服务
          systemctl stop redis.service
          # 开机启用
          systemctl enable redis.service
          # 禁止开机启动
          systemctl disable redis.service 
          # 当前状态
          systemctl status redis.service
          

    相关文章

      网友评论

        本文标题:Redis 初识

        本文链接:https://www.haomeiwen.com/subject/ttuboftx.html