Redis

一、基础
1、数据类型
  • Strings
  • Lists
  • Sets
  • Sorted Sets
  • Hashes
  • Bitmaps
  • HyperLogLogs
2、功能
  • pub/sub
  • stream
  • lua
3、数据持久化
  • RDB在指定的时间间隔能对你的数据进行快照存储。
  • AOF记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据。
4、过期策略
  • 定时过期
    每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清除。该策略可以立即清除过期的数据,对内存很友好;但是会占用大量的CPU资源去处理过期的数据,从而影响缓存的响应时间和吞吐量。
  • 惰性过期
    只有当访问一个key时,才会判断该key是否已过期,过期则清除。该策略可以最大化地节省CPU资源,却对内存非常不友好。极端情况可能出现大量的过期key没有再次被访问,从而不会被清除,占用大量内存。
  • 定期过期
    每隔一定的时间,会扫描一定数量的数据库的expires字典中一定数量的key,并清除其中已过期的key。该策略是前两者的一个折中方案。通过调整定时扫描的时间间隔和每次扫描的限定耗时,可以在不同情况下使得CPU和内存资源达到最优的平衡效果。
    (expires字典会保存所有设置了过期时间的key的过期时间数据,其中,key是指向键空间中的某个键的指针,value是该键的毫秒精度的UNIX时间戳表示的过期时间。键空间是指该Redis集群中保存的所有键。)
5、内存淘汰策略
  • noeviction
    当内存不足以容纳新写入数据时,新写入操作会报错。
  • allkeys-lru
    当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key。
  • allkeys-random
    当内存不足以容纳新写入数据时,在键空间中,随机移除某个key。
  • volatile-lru
    当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key。
  • volatile-random
    当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key。
  • volatile-ttl
    当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除。
6、db解释
  • 数据库的由来

    Redis是一个字典结构的存储服务器,一个Redis实例提供了多个用来存储数据的字典,客户端可以指定将数据存储在哪个字典中。

  • Redis实例默认建立了16个db,由于不支持自主进行数据库命名所以以db[n](n代表数字0-15)的方式命名。默认数据库数量可以修改配置文件的database值来设定。

    对于db正确的理解应为“命名空间”,多个应用程序不应使用同一个Redis的不同库,一个应用程序对应一个Redis实例,不同的数据库可用于存储不同环境的数据。内存大小跟选择的库没有关系

  • Redis集群下只有db0,不支持多db。

7、参考

二、系统架构

架构图

  • 主从模式

    数据备份,读写分离

  • 哨兵模式

    高可用

  • 集群模式

    高并发

参考