「这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战」
字符串类型(string)
- 字符串类型使用
set命令执行,如下命令- 存入字符串set
"juejin" "xiaoff" - 当想查字符串的时候
get "juejin" - 我们也可以使用内部封装好的函数如
STRLENSTRLEN "juejin"--> 6
- 存入字符串set
redis中的字符串本身可以想象成一个可以动态扩展的数组- 比如可以看出
java中的ArrayList,其实还是用空间换时间的方式 - 首先会分配好一个定长的容量
capacity - 字符串的长度记作
length,当length大于capacity进行resize扩容 - 每次扩容的时候最多会扩
1MB的大小空间,但是最大不会超过字符串的长度512MB
- 比如可以看出
- 也可以进行设置过期时间
- 如果
key的过期时间到了,就会别自动删除 - 可以很有效的控制缓存,提升效率
expire "juejin" 5- 也可使用
SETEX "juejin" 5 "xiaoff" - 一个小的
tips是当k-v中的value是整数的时候,是支持自增操作的 - 使用的是
incr {value}
- 如果
- 本身在淘汰机制中,将所有的设置过
淘汰时间的key`放到一个字典中- 惰性删除:如果过期了就删除
- 而定时删除会每10秒进行一次过期的扫描
- 每次会随机选出一定数量的
key进行删除 - 其实在内部
redis会做了一个LRU算法 - 使用链表将
key元素进行按照时间排序
- 每次会随机选出一定数量的
- 大家也会体会到,我们经常使用redis中的字符串
- 因为字符串是一个很好融合其他类型的一个伪泛型
- 当我们在普通业务中,如果数据量和类型不要求那么严格
- 几乎都可以使用字符串类型,反而如果使用key与value的形式,更加容易造成堆积
过期策略以后还会联合异步队列 和
flush进行联动讲解,目前只是作为基础类型讲解