redis使用指南

一、数据类型

  基本数据类型:

    String:一个 key 对应一个 value,redis的 string是二进制安全的(输入任何字节都能正确处理,不想C字符串不能包含空字符),可以包含任何数据,比如jpg图片或者序列化的对象。string 类型的值最大能存储 512MB。

    Hash:一个 key 对应一个 键值对,特别适合用于存储对象

    List:一个 key 对应一个 列表,列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。列表适合用来做粉丝列表,评论列表以及消息队列

    set:一个key对应一个set集合,set可以用来分布式系统去重,共同好友(set交集),并集,差集

    Sortedset:在set基础上加了一个score,按照score排序,又叫Zset,是有序的集合。适用于排行榜

  进阶数据类型:

    geo:地理位置系列,存储经纬度,可以计算两地之前的距离,以及返回指定半径内元素的个数,适用于附近的人

    HyperLogLog:HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的;缺点是有一定的误差

    pub/sub:Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。Redis 客户端可以订阅任意数量的频道

二、使用问题

  缓存击穿:

    高并发情况下,大量请求查询同一个key值,当这个key值时效时,所有请求直接打在数据库上

    解决方案:可以设置热点key永不过期(定时任务)

  缓存穿透:

    有意或无意情况下,一直请求redis和数据库都不存在的key值,由于没有缓存,导致每次都会去访问数据库

    解决方案:1、根据业务实际情况设置参数校验,不在范围内的不处理2、缓存不存在的key值,设置较短的过期时间3、BloomFilter

  缓存雪崩:

    同一时间大规模的缓存失效,一般是缓存服务器宕机了。前者可以采取过期时间加一个随机值,后者需要考虑集群

三、集群

  //TODO

四、主从

  //TODO

五、持久化

  redis的持久化分为两种:

  RDB:全量。指定的时间间隔内生成数据集的时间点快照,出问题时可能丢失间隔时间内的部分数据。非常适用于灾难恢复。

    原理:fork一个进程,遍历hash table,利用copy on write,把整个db dump保存下来。save, shutdown, slave 命令会触发这个操作

  AOF:增量。把写操作指令,持续的写到一个类似日志文件里,AOF 的默认策略为每秒钟 fsync 一次。后台会对 AOF 文件进行重写(rewrite),避免文件过大

  Redis 还可以同时使用 AOF 持久化和 RDB 持久化。 在这种情况下, 当 Redis 重启时, 它会优先使用 AOF 文件来还原数据集, 因为 AOF 文件保存的数据集通常比 RDB 文件所保存的数据集更完整。你甚至可以关闭持久化功能,让数据只在服务器运行时存在

六、过期策略

  1、定期删除:默认100ms就抽取设置了过期时间的kye,检查是否过期,过期了就删除

  2、惰性删除:查询的时候检查是否过期,过期了就删除,不返回

七、内存淘汰机制

  redis中当内存超过限制时,按照配置的策略,淘汰掉相应的key-value,使得内存可以继续留有足够的空间保存新的数据

  1、no-enviction:不淘汰,删除报错。默认。

  2、allkeys-lru:淘汰所有key中使用最少的key

  3、volatile-lru:淘汰设置了过期时间的key中使用最少的key

  4、volatile-ttl:淘汰设置里过期时间的key中的存活时间最短的(马上就要过期的)key

  5、volatile-random:随机淘汰设置了过期时间的key

  6、allkeys-random:随机淘汰

    

猜你喜欢

转载自www.cnblogs.com/yanghanwen/p/12055848.html