Redis知识点

2021-06-21  本文已影响0人  幻如常

Redis知识点

分布式锁

实现思路及问题

常见问题

  1. Redis如何做内存优化

    1. 缩减键值对象:满足业务要求下key越短越好;value值进行适当压缩

    2. 尽可能使用hash散列表

    3. 编码优化,控制编码类型

    4. 控制key的数量

    5. 共享对象池:redis内部维护了[0~9999]的整数对象池,开发中在满足需求的前提下,尽量使用整数对象以节省内存,比如set age 29后执行object refcount age 时得到值2,然后在执行set age1 29后执行object refcount ag1 时得到值3,如果设置set age2 20那么执行object refcount age2还是得到值2,就是当你的key值不一样,但是value都为相同的整数时,refcount的计数就加一,value不相同时不会加,value相同时,此时不同的key就会共享这个对象,对应的value值的应用计数就加1

  2. Redis 的默认回收策略是 noenviction,当内存用完之后,写数据会报错。

  3. 单个redis实例能存放多少个key:官方理论是2的32次方个,实际使用中单个redis实例最多存储2.5亿个key

  4. 如何保证redis中存储的都是热点数据:当redis存储在内存的中的数据达到配置大小时,就进行数据淘汰,使用allkeys-lru策略,从所有的数据中删除最近最少使用的

  5. redis中如何找出已知前缀的key:可以使用keys指令,但是如果在线上使用,keys指令会导致线程阻塞,直到执行结束,可以使用scan指令,非阻塞的提取key列表,但是会有一定的重复率需要在客户端做一次去重,整体耗时比直接使用keys指令长;scan提供3个参数:第一个是 cursor 整数值,第二个是 key 的正则模式,第三个是遍历的 limit hint,例如:scan 0 match key99* count 1000 解释:从0开始遍历,匹配key99*,总数是1000 ,1000不是结果数量,是redis单次遍历字典槽位数量(约等于)

  6. 大量的key同一时间过期有什么问题:大量key同一时间过期,redis可能会出现短暂的卡顿现象,如果访问量过大时还可能出现雪崩,所以可以在过期时间上加一个随机值,分散过期时间点

  7. redis如何实现消息一次产生,多次消费:利用pub/sub发布订阅模式,我们可以订阅多个主题的消息,也可以给多个主题发布消息,如果一个主题(频道)被多个客户端订阅,那么就可以一次生产多次消费了

  8. redis如何实现消息延迟:利用zset存储,zadd添加消息时,用时间戳作为score,消息内容作为key,zrangbysocre指令获取指定区间的元素,调整指定区间的参数(比如0到最近七天)就可以实现消息延迟

上一篇下一篇

猜你喜欢

热点阅读