Redis 是一个开源(BSD 许可)的、基于内存的、多数据结构存储系统,常被用作数据库、缓存和消息中间件;它可以使用客户端分片来扩展写性能,内置了:复制(replication)、LUA 脚本(Lua scripting)、LRU 驱动事件(LRU eviction)、事务(transactions)和不同级别的磁盘持久化(persistence), 并通过 Redis 哨兵(Sentinel)和自动分区(Cluster)实现高可用(high availability)。

特性

  • 支持多种数据类型 - string、Hash、list、set、sorted set
  • 支持多种数据淘汰策略

    volatile-lru:从已设置过期时间的数据集中挑选最近最少使用的数据淘汰 volatile-ttl :从已设置过期时间的数据集中挑选将要过期的数据淘汰 volatile-random:从已设置过期时间的数据集中任意选择数据淘汰 allkeys-lru:从所有数据集中挑选最近最少使用的数据淘汰 allkeys-random:从所有数据集中任意选择数据进行淘汰 noeviction :禁止驱逐数据

  • 提供两种持久化方式 - RDB 和 AOF

  • 通过 Redis Cluster 提供集群模式

    实现

    数据淘汰

    Redis 有两种方式实现缓存淘汰:
    消极方式:访问 Redis Key 时,发现失效就删除;
    积极方式:周期性从设置了失效时间的 Key 中,根据淘汰策略,删除一部分失效的 Key。

    存储分区

    Redis Cluster 集群包含 16384 个虚拟 Hash 槽,它通过一个高效的算法来计算 Key 属于哪个 Hash 槽;
    Redis Cluster 支持请求分发 - 节点在接到一个命令请求时,会先检测这个命令请求要处理的键所在的槽是否由自己负责,如果不是的话,节点将向客户端返回一个 MOVED 错误,MOVED 错误携带的信息可以指引客户端将请求重定向至正在负责相关槽的节点。

    主从复制

    Redis 2.8 后支持异步复制,有两种模式:
    完整重同步(full resychronization):用于初次复制,执行步骤与 SYNC 命令基本一致。
    部分重同步(partial resychronization):用于断线后重复制,如果条件允许,主服务器可以将主从服务器连接断开期间执行的写命令发送给从服务器,从服务器只需接收并执行这些写命令,即可将主从服务器的数据库状态保持一致。
    集群中每个节点都会定期向集群中的其他节点发送 PING 消息,以此来检测对方是否在线;
    如果一个主节点被认为下线,则在其从节点中,根据 Raft 算法,选举出一个节点,升级为主节点。

    数据一致

    Redis 不保证强一致性,因为这会使得集群性能大大降低,它是通过异步复制来实现最终一致性。

    搭建

    https://juejin.cn/post/7002011542145204261

    安装

    YUM

    自带的源,Redis 版本太低,安装特定版本的话先查询再安装
    1. yum list | grep redis
    2. yum --enablerepo=remi list redis --showduplicates | sort -r
    3. yum --enablerepo=remi install redis-5.0.12

    编译安装

    1. wget http://download.redis.io/releases/redis-5.0.3.tar.gz
    2. tar xzf redis-5.0.3.tar.gz
    3. cd redis-5.0.3
    4. make
    5. yum -y install gcc automake autoconf libtool make # 中途编译失败
    6. make distclean && make # 重新安装依赖以后需要先清理之前的编译
    7. make PREFIX=/usr/local/redis install # 编译安装到指定目录

    命令

    1. redis-benchmark:性能测试工具
    2. redis-check-aofAOF 文件修复工具
    3. redis-check-rdbRDB 文件修复工具
    4. redis-cli:命令行客户端
    5. redis.conf:配置文件
    6. redis-server:服务进程

    配置

    1. ## 如果没有配置文件需要先创建
    2. mkdir /etc/redis/
    3. cp redis.conf /etc/redis/redis.conf
    4. ## 修改配置
    5. vim /etc/redis/redis.conf
    6. bind 0.0.0.0 #允许远程访问
    7. protected-mode no #关闭安全模式
    8. port 16379 #修改默认端口
    9. daemonize yes #守护进程
    10. logfile "/var/log/redis" #设置日志目录
    11. requirepass 123456 #设置认真密码