一、Redis

1、介绍

  • REmote DIctionary Server:数据结构服务器,k/v,数据结构;
  • Redis 是一个开源(BSD许可)的,内存存储、数据结构存储系统,它可以用作数据库、缓存和消息中间件(消息队列)。
  • 它支持的数据结构:字符串、列表(数组)、hashes(关联数组)、集合、有序集合、bitmaps、hyperloglogs、空间索引;
  • 内建的复制功能、Lua scripting(著名的脚本编程语言,容易内嵌入其他语言)、LRU、事务、持久存储、高可用(Sentinel,Redis Cluster)

2、redis程序

  • 最新版程序,可以选择官网下载,编译安装。
  • 也可以使用yum epel仓库,yum install redis
  • 配置文件:/etc/redis.conf
  • 服务端-主程序:/usr/bin/redis-server 默认端口 TCP:6379
  • 客户端:/usr/bin/redis-cli
  • Unit File:/usr/lib/systemd/system/redis.service
  • 数据目录:/var/lib/redis
  • Redis性能测试工具:redis-benchmark
  • AOF文件修复工具:redis-check-aof
  • RDB文件检查工具:redis-check-rdb
  • Sentinel服务器:redis-sentinel

3、配置

  • Redis.conf 配置文件分为:通用基本配置项、网络配置项、持久化相关配置、复制相关的配置、安全相关配置、Limit相关的配置、SlowLog相关的配置、INCLUDES、Advanced配置
  • 通用配置

    • daemonize yes 启用后台守护进程运行模式
    • pidfile /PATH/redis.pid redis启动后的进程ID保存文件
    • loglevel notice 指定记录服务器信息等级
    • logfile “” 指定日志文件,默认是使用系统的标准输出
    • databases 16 设置数据库的数量,默认启动时使用0 号数据库
  • 网络配置

    • port 指定使用端口号,默认6379
    • bind 0.0.0.0 监听指定IP地址 默认本地回环地址
    • timeout N 客户端空闲N秒后断开连接,参数0表示不启用
    • tcp-backlog 511 后援队列,达到最大并发连接数后,服务器还要留住多少访问请求
    • protected-mode yes 保护模式,默认启用。指定了bind,就可以关闭保护模式。如果关闭bind,就必须启用保护模式,不然没法登陆redis。
    • tcp-keepalive 300 tcp保持连接300秒
  • 安全配置

    • requirepass PASSWORD
    • rename-command 命令重命名,在AOF或Replication环境中,不推荐使用;
  • Limits

    • maxmemory 设置给redis使用的最大内存,单位为字节
    • maxmemory-policy noeviction 选择淘汰策略
    • 如果内存使用量耗尽,淘汰策略:
      volatile-lru # 对设置了过期时间的keys,使用 LRU最近最少使用算法去淘汰。
      allkeys-lru  # 所有keys,使用LRU最近最少使用算法去淘汰。
      volatile-random  # 对设置了过期时间的keys,随机淘汰。
      allkeys-random  # 所有keys中,退机淘汰
      volatile-ttl  # 对过期时间中剩余时间多少,淘汰快到期的。
      noeviction  # 默认策略,不淘汰,如果内存已满,添加数据是报错。
    • maxmemory-samples 5 淘汰算法运行时的采样样本数
  • SlowLog相关配置

    • slowlog-log-slower-than 10000 单位微秒=0.01秒
    • sowlog-max-len 128 最终只保存128条日志;
  • ADVANCED配置

    • hash-max-ziplist-entries 512 哈希编码最大键值对 512个键值对
    • hash-max-ziplist-value 64 这些键值对里的值,最大长度64字节。

    • client-output-buffer-limit
    • class:客户端种类,normal本机客户端,slave从节点客户端,pubsub消息队列客户端。
    • hard limit 硬限制,最大多少空间。
    • soft limit 软限制,可以在短时间内超过。
    • soft seconds 超出软限制时,超出的那部分可使用时长。
client-output-buffer-limit normal 0 0 0 
client-output-buffer-limit slave 256mb 64mb 60 
client-output-buffer-limit pubsub 32mb 8mb 60

二、Redis命令

1、分组命令

  • @strings 只处理值为字符串的命令组

    • SET:设置一个key的value值
    • GET:返回key的value值,key不存在则返回nil(空);
    • EXISTS:查询key是否存在;返回1 key存在,0 key不存在
    • INCR:对key中的数值执行加1操作。
    • DECR:返回一个数字,减少之后的value值
    • SETNX:当key不存在是,设置一个键的值,当key存在时,则不做动作。
    • SETEX:设置 key 对应的 value 的过期时间
    • INCRBYFLOAT:指定key为浮点数值,并增长浮点数值
    • MGET:获取多个key的值
    • MSET:设置多个key的值
  • @lists 处理列表的命令组

    • LPUSH:从列表左边开始插入元素
    • RPUSH:从列表右边开始插入元素
    • LPOP:从左边弹出元素
    • RPOP:从右边弹出元素
    • LPUSHX:判断列表是否存在,存在则从左边插入元素
    • RPUSHX:判断列表是否存在,存在则从右边插入元素
    • LRANGE:返回指定下标的key的值
    • LINDEX:返回数组列表中,指定的下标的元素值。0为第一个元素
    • LSET:设置列表里一个元素的值
  • Server相关命令

    • CLIENT GETNAME:获取客户端连接的名字
    • CLIENT SETNAME:设置客户端连接的名字
    • CLIENT LIST:列出所有客户端连接
    • CLIENT KILL:关闭指定连接,根据这些条件关闭;[ip:port] [ID client-id] [TYPE normal|master|slave|pubsub] [ADDR ip:port] [SKIPME yes/no]
    • CLIENT PAUSE:暂停某个客户端连接,也可以设着暂停时间
    • SHUTDOWN NOSAVE强制关闭,类似直接关电源;SAVE内存数据同步到磁盘上,安全关闭
    • INFO:服务器状态信息查看;分为多个secion;
    • 在程序中修改参数
    • CONFIG GET 查看指定配置项的参数
    • CONFIG RESETSTAT INFO中的计数器全部重置,重新开始计数
    • CONFIG REWRITE 重写配置文件,保存在配置文件中
    • CONFIG SET 修改配置项参数;重启redis,不保存
更多命令组,命令介绍可到官网查询Redis官网

2、redis-cli命令

  • Usage: redis-cli [OPTIONS] [cmd [arg [arg ...]]]

    -h HOST, 127.0.0.1
    -p PORT, 6379/tcp
    -a PASSWORD
    -n DBID   0-15
  • 与Connection相关命令:

    help @connection            
    AUTH  
    ECHO 
    PING 
    QUIT
    SELECT dbid
  • 清空数据库:

    FLUSHDB:Remove all keys from the current database 清空当前数据库;
    FLUSHALL:Remove all keys from all databases  清空所有数据库;

三、Redis持久化

  • RDB

    • snapshotting, 二进制格式;按事先定制的策略,周期性地将数据从内存同步至磁盘;数据文件默认为dump.rdb;
    • 客户端显式使用SAVE或BGSAVE命令来手动启动快照保存机制;
    • SAVE:同步,即在主线程中保存快照,此时会阻塞所有客户端请求;
    • BGSAVE:异步;backgroud
    • RDB相关的snapshotting配置:
      *save
      save 900 1
      save 300 10
      save 60 10000
      save 5 200000
    • 表示:三个策略满足其中任意一个均会触发SNAPSHOTTING操作;
      • 900s内至少有一个key有变化
      • 300s内至少有10个key有变化
      • 60s内至少有1W个key发生变化
      • 5s内至少变化20W个key发生变化
    • stop-writes-on-bgsave-error yes
    • dump快照操作出现错误时,是否禁止新的写入操作请求;
    • rdbcompression yes 是否对快照进行压缩,只要服务器有闲余性能,就可以压缩,节省磁盘空间
    • rdbchecksum yes 压缩完是否校验,检查文件是否完整;占用CPU
    • dbfilename dump.rdb:指定rdb文件名
    • *dir /var/lib/redis:rdb文件的存储路径
  • AOF:Append Only File, fsync

    • 记录每次写操作至指定的文件尾部实现的持久化;当redis重启时,可通过重新执行文件中的命令在内存中重建出数据库;
    • BGREWRITEAOF:AOF文件重写;
    • 不会读取正在使用AOF文件,而是通过将内存中的数据以命令的方式保存至临时文件中,完成之后替换原来的AOF文件;
  • AOF相关的配置

    • *appendonly no:默认不启用AOF的
    • appendfilename "appendonly.aof" :文件名
    • *appendfsync:追加同步的三种模式
      • no:redis不执行主动同步操作,而是OS进行;
      • everysec:每秒一次;
      • always:每语句一次;
    • no-appendfsync-on-rewrite no
      • 是否在后台执行aof重写期间不调用fsync,默认为no,表示调用;
    • auto-aof-rewrite-percentage 100:变化的内容所占空间的增长量超过100%
    • auto-aof-rewrite-min-size 64mb 增长量不能超过64mb
      • 上述两个条件同时满足时,方会触发重写AOF;与上次aof文件大小相比,其增长量超过100%,且大小不少于64MB;
    • aof-load-truncated yes:修剪文件,Redis启动加载aof文件,如果发现末尾命令不完整则自动截掉,成功加载前面正确的数据。如果设置为no,遇到此类情况,Redis启动失败,用redis-check-aof 工具手工修复。
    • 注意:持久机制本身不能取代备份;应该制订备份策略,对redis库定期备份;
  • RDB与AOF同时启用:

(1) BGSAVE和BGREWRITEAOF不会同时进行;
(2) Redis服务器启动时用持久化的数据文件恢复数据,会优先使用AOF;