Redis学习记录
2021/4/11 19:26:06
本文主要是介绍Redis学习记录,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Reids内存耗尽下的八种淘汰策略
noeviction
当内存不足以容纳新写入的数据的时候,不允许新的键值写入
allkeys-lru:
当内存不足的时候,删除最近最少使用的键值(lru算法 least recently used)
allkeys-random
随机删除键值
volatile-lru
当内存不足时,在设置了过期时间的键空间中,删除最近最少使用的键值。
(这种情形是把redis当缓存和数据库使用,即不删除持久保存在redis中的数据)
volatile-random
当内存不足时,在设置了过期时间的键空间中,随机删除键值。
volatile-ttl
当内存不足时,在设置了过期时间的键空间中,有更早过期时间的key优先移除。
Redis中SDS和C语言字符串的区别
1)、字符串长度处理
相比于C语言O(n)获取字符串长度,Redis中SDS通过len
来保存字符串的长度
2)、内存重新分配
在C语言中对字符串进行修改(例如拼接字符或者缩短字符),都需要对数组的空间进行重新分配,而这样分配空间的过程通常是非常耗时。因此redis做出如下策略
修改空间预分配
在为redis中字符串进行修改或者扩容的时候,会有如下选择
- 如果对String进行修改,字符小于1M,就会增加和len相等的未使用空间,即buf的长度是
len+free+1 Byte
(1用来保存'\0'
) - 如果修改后大于1M,则
free
为1M
借此在对字符串进行append的时候,会先检查free
是否足够,够就不需要进行内存重分配
惰性空间释放
针对字符串的缩短,redis不会立马释放原有的内存空间,而是用free记录下缩短的空间,以便之后的扩容使用
3)、二进制安全
C语言中的字符串遇到'\0'
就判定终止
而Redis中buf
是保存一系列的二进制数据而不是字符,并且通过len
来判断字符串什么时候结束
所以保存在redis中字符串进入是什么样,出来就是什么样
参考文献
redis为什么快
《Redis设计与实现》
《阿里面试技术手册》
这篇关于Redis学习记录的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-07Redis高并发入门详解
- 2024-12-07Redis缓存入门:新手必读指南
- 2024-12-07Redis缓存入门:新手必读教程
- 2024-12-07Redis入门:新手必备的简单教程
- 2024-12-07Redis入门:新手必读的简单教程
- 2024-12-06Redis入门教程:从安装到基本操作
- 2024-12-06Redis缓存入门教程:轻松掌握缓存技巧
- 2024-12-04Redis入门:简单教程详解
- 2024-11-29Redis开发入门教程:从零开始学习Redis
- 2024-11-27Redis入门指南:快速掌握Redis基础操作