一问一答闲谈redis

1、一个KEY过期了,redis是怎么处理的?

redis不会主动去轮询过期的KEY,这个KEY一直存留在redis占着内存,只有在使用到KEY的时候才会查询KEY是否过期。过期了就会清除这个KEY并释放内存;

同时redis还有一种主动内存回收机制,在redis.conf配置文件的最后有一个配置项zh,默认是zh=10,意思是1秒钟轮询10次,每次抽取100个KEY检查是否过期,如果过期了就清除键值对并释放内存,如果本次有超过25个KEY是过期的,就不会等到下一次轮询而继续抽取100个KEY检查是否过期;

当redis无法再为新KEY分配内存时,还有另外一种内存回收策略,这个策略是在redis.conf配置文件里配置的maxmemory-policy,一般是回收那些已经配置了过期时间的键值对,比如volatile_lru,根据lru算法对已设置过期时间的键值对进行回收。volatile_random是随机回收。volatile_ttl是删除使用频率最少的。allkeys_lru是对所有的键值对进行lru算法回收,不管你有没有设置过期时间。allkeys_random随机删除。还有一种是不回收内存noevietion,也就是说内存满时再塞键值对进去,服务端就报错并返回给客户端了。以上的回收策略不是对所有的KEY的,是随机抽取maxmemory-samples个KEY来判断。

 

2、一个KEY怎么到redis服务器查找缓存的?

对一个KEY进行CRC16运算得到一个值,在将这个值模以16384个槽位,得到的值就是key要存储的slot

 

3、redis cluster中的一个节点挂了,集群是怎么处理的?

slave挂了master上位,如果一个节点的master和slave都挂了,这个节点的槽位都转移到其它节点上。挂了的节点的数据也跟着转移到其它节点上

 

4、redis的内存持久化机制是什么?

有RDB和AOF两种,RDB出厂默认900秒内操作一个KEY、300秒内操作15个KEY、60秒内操作10000个KEY就持久化到RDB,RDB存储的是二进制格式的数据。

 

5、redis是单线程还是多线程?

redis是单进程单线程,memcached是基于libevent事件驱动的,属于单进程多线程。

redis只所以快,是因为使用了epoll内核,采用了多路复用技术,自己轻量级的实现epoll内核,而不使用libevent的重量级的功能。

 

6、redis是在客户端还是服务端进行HASH运算的?

redis是在服务端,客户端jedis只是负责将操作指令发送到服务端。

memcached是在客户端进行KEY和cache服务器的的一致性HASH运算

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值