Redis系列-基础类型②-字符串

262 阅读2分钟

「这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战

字符串类型(string)

  • 字符串类型使用set命令执行,如下命令
    • 存入字符串set "juejin" "xiaoff"
    • 当想查字符串的时候 get "juejin"
    • 我们也可以使用内部封装好的函数如 STRLEN
      • STRLEN "juejin" --> 6
  • redis中的字符串本身可以想象成一个可以动态扩展的数组
    • 比如可以看出java中的ArrayList,其实还是用空间换时间的方式
    • 首先会分配好一个定长的容量capacity
    • 字符串的长度记作length,当length大于capacity进行resize扩容
    • 每次扩容的时候最多会扩1MB的大小空间,但是最大不会超过字符串的长度512MB

image.pngimage.png

  • 也可以进行设置过期时间
    • 如果key的过期时间到了,就会别自动删除
    • 可以很有效的控制缓存,提升效率
    • expire "juejin" 5
    • 也可使用SETEX "juejin" 5 "xiaoff"
    • 一个小的tips是当k-v中的value是整数的时候,是支持自增操作的
    • 使用的是incr {value}

image.png image.png

  • 本身在淘汰机制中,将所有的设置过淘汰时间的key`放到一个字典中
    • 惰性删除:如果过期了就删除
    • 定时删除会每10秒进行一次过期的扫描
      • 每次会随机选出一定数量的key进行删除
      • 其实在内部redis会做了一个LRU算法
      • 使用链表将key元素进行按照时间排序
  • 大家也会体会到,我们经常使用redis中的字符串
    • 因为字符串是一个很好融合其他类型的一个伪泛型
    • 当我们在普通业务中,如果数据量和类型不要求那么严格
    • 几乎都可以使用字符串类型,反而如果使用key与value的形式,更加容易造成堆积

过期策略以后还会联合异步队列flush进行联动讲解,目前只是作为基础类型讲解