Redis笔记——对象之 String

1. 限制

        最大512M,可通过proto-max-bulk-len配置

2. 场景

        缓存场景、计数场景(Redis处理命令是单线程,所以执行命令的过程是原子的。如计算访问次数、点赞、转发、库存数量等)

3. 使用

创建: SET、SETNX(key不存在时插入,插入失败返回0)
      SET参数:EX(过期时间为n秒) 
              PX(过期时间为n毫秒)  
              NX(key不存在时插入,插入失败返回null。SET key value NX 等同于 SETNX key value)
              XX(key存在时插入)
查询: GET、MGET(同时查询多个key,如果key不存在,对应位置值为null)
更新: SET
删除: DEL

4. 编码方式

  • INT:整型,可以用long表示的整数。

        如果更新后数值超long的大小或存在字符串==>EMBSTR。

  • EMBSTR:短字符串。

        长度超过阈值(3.2前是39字节,3.2后是44字节),或被修改过==>RAW。

  • RAW:长字符串。

5. SDS(Simple Dynamic String 简单动态字符串)

  • EMBSTR、RAW都是由 redisObject + SDS 两个结构组成。

  • EMBSTR 下 redisObject + SDS 内存是连续的,可一次性分配,但若需再分配,整体都要重新分配。所以 EMBSTR 的设计为只读,任何写操作都会使 EMBSTR 转换为 RAW (认为其是易变的)。

  • RAW 下 redisObject + SDS 内存是分开的

  • EMBSTR内存

  • RAW 内存

6. 为什么使用 SDS

  • C 语言中,字符串以 `\0` 结尾,每次计算字符串长度时间复杂度为 O(n) ,每次追加内容需要重新分配内存,二进制不安全。

  • 所以 Redis 封装了 SDS 结构,其中 len 表示长度,alloc 表示分配的空间,(alloc - len)即为预留空间大小。len 可以用于快速计算字符串长度预留空间为字符串内容追加保留余地,且不在以 `\0` 作为判断标准,二进制安全

  • 预留空间大小规则,len 小于 1M 时,预留大小为 len。len 大于 1M 时,预留大小为 1M。

  • 14
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值