标签:操作 unix时间 服务 属性 unix cpu 除了 就是 redis
(1)每个redis客户端都可以有自己的目标数据库,默认客户端选择的是0号数据库,但是客户端也可以自己选择数据库。同时客户端也会记录当前的目标数据库,这个属性是一个指向redisdb数组(记录所有可连接的数据库)其中一个。
(2)redis是个键值对数据库,由一个字典(哈希表)保存所有的键值对,这个字典成为键空间。对redis键的增删改查其实都是对键空间的操作。每次读写键之后,redis都会做一些维护操作,例如更新该数据库的键空间被命中和不被命中次数、更新键的LRU时间、如果键过期就自动删除。
(3)redis中除了键空间外,还有一种哈希表结构的空间:过期字典。过期字典中的键都是指针,专门指向键空间中的键,值是毫秒精度的Unix时间戳。
(4)判断了一个键为过期后,该如何去删除,什么时候会被删除呢??有三种删除策略:
(a)定时删除:待到特定时刻删除过期键。
(b)惰性删除:放任过期键不管,只有每次取到一个键时,判断为过期的话就立即删除,如果该键一直没被客户端查到,就一直不删。
(c)定期删除:每隔一段时间,就去过期空间检查,至于要删除多少键,检查多少个数据库,都是由算法来决定的。
对于上面三种删除策略,各有好坏,定时删除对于内存来讲是个好事,可以及时释放内存,但是一个很大的弊端就是,如果在某个时刻过期键特别多的话,定时操作刚好在这段时间,那么会占用相当大一部分cpu资源,对服务器响应时间和吞吐量造成影响。惰性删除对CPU来讲是最友好的,程序只有在取到键的时候才会去检查是否过期,但是有个最不好的地方就是很容易造成内存泄露。定期删除是最折中的方案,每隔一段时间去检查过期键空间,并且还可以根据当前CPU的状态来定制一个算法,来决定删除多少键和检查多少过期空间,而且也可以有效的避免内存泄露
标签:操作 unix时间 服务 属性 unix cpu 除了 就是 redis
原文地址:https://www.cnblogs.com/Booker808-java/p/10083487.html