Redis知识学习汇总


  一、数据类型

  •   String:缓存对象、常规计数、分布式锁
  •   List:消息队列
  •   Set/Zset:点赞(去重)、共同关注(交集运算)、Zset:排行榜
  •   Hash:缓存对象、购物车


  二、备份


RDB(Redis Database):

通过生成数据快照的方式,将当前内存中的数据集保存到一个RDB文件中,再用这个临时文件替换之前的RDB文件。这种方式可以定期执行,以实现数据的持久化。

优点:

  • RDB文件紧凑,占用空间小。
  • RDB文件的恢复速度快。
  • 适合于灾难恢复。

缺点:

  • 数据可能不是最新的,因为RDB是定期备份的。
  • 在备份过程中,fork子进程会占用一定的内存资源。

AOF(Append Only File):

以追加的方式记录Redis执行的所有写操作命令到一个AOF文件中。每当Redis执行一个写操作时,这个操作就会被追加到AOF文件的末尾。当Redis重启时,可以通过重新执行AOF文件中的命令来恢复数据。

优点:

  • 数据更完整,因为AOF记录了所有的写操作。
  • 可以在配置中设置AOF的同步策略,以平衡性能和数据安全性。

缺点:

  • AOF文件通常比RDB文件大,因为AOF记录了所有的写操作。
  • 恢复数据时需要重新执行AOF文件中的命令,这可能会比RDB慢。


三、运行原理


        IO多路复用(select/poll/epoll)


    

四、集群


Redis 单副本

            采用单个 Redis 节点部署架构,没有备用节点实时同步数据,不提供数据持久化和备份策略,适用于数据可靠性要求不高的纯缓存业务场景。


Redis 多副本(主从)

            采用主从(replication)部署结构,相较于单副本而言最大的特点就是主从实例间数据实时同步,并且提供数据持久化和备份策略。主从实例部署在不同的物理服务器上,根据公司的基础环境配置,可以实现同时对外提供服务和读写分离策略。


Redis Sentinel(哨兵)

            Redis 哨兵模式是指在 Redis 集群中,有一组专门的进程(即哨兵进程)负责监控主节点和从节点的状态,并在发现故障时自动进行故障转移,以保证 Redis 集群的高可用性。

Redis 提供了哨兵的命令,哨兵命令是一个独立的进程,哨兵进程会周期性地向主节点和从节点发送 PING 命令来检测它们的状态,当哨兵进程发现 master主节点 不可用时,根据投票数自动将某一个 slave 转换 master,然后通过消息订阅模式通知其它 slave,让它们切换到新的 master主节点 上,从而实现故障转移。然而,一个哨兵进程对 Redis 服务器进行监控,可能会出现问题,为此,我们可以使用多哨兵进行监控。哨兵进程还可以监控 Redis 集群的配置变化,并在配置变化时通知客户端进行相应的调整。

哨兵模式三大任务

  • 监控
  • 提醒
  • 自动故障迁移

选举算法:Raft


Redis Cluster


一致性 Hash 算法:虚拟节点解决不平衡问题 2^14-1 即 16348个槽 slot
数据分片 CRC16(key) % 16384来计算键key属于哪个槽


五、命令


        通用命令

  • KEYS    查看所有符合模板的key
  • DEL    删除一个指定的key
  • EXISTS    判断key是否存在
  • EXPIRE    给key设置有效期,到期会删除key
  • TTL    查看key的剩余有效期
  • HELP [command]    查看命令的具体用法


        String

  • SET [key] [value]    添加或者修改已经存在的一个 String 类型的键值对
  • GET [key]    根据 key 获取 String 类型的 value
  • INCR [key]    让 key 自增1个
  • INCRBY [key] [increment]    让 key 自增 increment 个
  • INCRBYFLOAT [key] [increment]    让浮点型 key 自增 increment 个
  • SETNX [key] [value]    添加一个String类型键值对, 前提key不存在,否则不执行
  • SETEX [key] [second] [value]    添加一个String类型键值对并指定有效时间


        Hash

  • HSET [key] [field] [value] ([filed] [value] …)    添加或者修改hash类型key的field的值
  • HGET [key] [field]    获取一个hash类型key的field的值
  • HGETALL [key]    获取hash类型的key中所有的field和value
  • HKEYS [key]    获取一个hash类型的key中所有的field
  • HVALS [key]    获取一个hash类型的key中所有的value
  • HINCRBY [key] [field] [increment]    让hash类型key的字段自增
  • HSETNX [key] [field] [value]    添加一个hash类型的key的field的值, 如果存在就不执行


        List

  • LPUSH [key] [element] ([element] …)    向左侧插入一个或者多个元素
  • LPOP [key]    移除并返回列表左侧的第一个元素, 没有返回nil
  • RPUSH [key] [element] ([element] …)    向右侧插入一个或者多个元素
  • RPOP [key]    移除并返回列表右侧第一个元素, 没有返回nil
  • LRANGE [key] [start] [stop]    返回一段范围内的所有元素


        Set

  • SADD [key] [member] ([member] …)    添加一个元素
  • SREM [key] [member] ([member] …)    删除一个元素
  • SCARD [key]    返回元素个数
  • SISMEMBER [key] [member]    判断是否存在一个元素
  • SMEMBERS [key]    获取所有的元素


        Zset

  • ZADD [key] [score] [member] ([score] [member] …)    添加一个或者多个元素, 如果存在,更新score值
  • ZREM [key] [member] ([member] …)    删除指定元素
  • ZSCORE [key] [member]    获取指定元素的score值
  • ZRANK [key] [member]    获取指定元素的排名
  • ZCARD [key]    获取元素个数
  • ZCOUNT [key] [min] [max]    统计指定范围内的元素个数
  • ZRANGE [key] [min] [max]    获取指定排名范围内的元素
  • ZRANGEBYSCORE [key] [min] [max]    获取指定score范围内的元素
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值