Redis的五种基本数据类型

String(字符串)

  • 简介:String 是 Redis 最基础的数据结构类型,它是二进制安全的,可以存储图片
  • 或者序列化的对象,值最大存储为 512M
  • 简单使用举例: set key value、get key等
  • 应用场景:共享 session、分布式锁,计数器、限流。
  • 内部编码有 3 种,int(8字节长整型)/embstr(小于等于 39字节字符串)/ raw(大于 39个字节字符串)

C 语言的字符串是 char[]实现的,而 Redis 使用 SDS(simple dynamic

string) 封装,sds 源码如下:

struct sdshdr{
    unsigned int len; // 标记buf的长度
    unsigned int free; // 标记buf中未使用的元素个数
    char buf[]; // 存放元素的数组
}

Redis 为什么选择 SDS 结构,而 C 语言原生的 char[]不香吗?

举例其中一点,SDS 中,O(1)时间复杂度,就可以获取字符串长度;而 C 字符串,需要遍历整个字符串,时间复杂度为 O(n)

Hash(哈希)

  • 简介:在 Redis 中,哈希类型是指 v(值)本身又是一个键值对(k-v)结构
  • 简单使用举例:hset key field value、hget key field
  • 内部编码:ziplist(压缩列表) 、hashtable(哈希表)
  • 应用场景:缓存用户信息等。
  • 注意点:如果开发使用 hgetall,哈希元素比较多✁话,可能导致 Redis 阻塞, 可以使用 hscan。而如果只是获取部分 field,✁议使用 hmget。

List(列表)

  • 简介:列表(list)类型是用来存储多个有序✁字符串,一个列表最多可以存储
  • 2^32-1 个元素。
  • 简单实用举例: lpush key value [value ...] 、lrange key start end
  • 内部编码:ziplist(压缩列表)、linkedlist(链表)
  • 应用场景: 消息队列,文章列表,

list 应用场景参考以下:

lpush + lpop = Stack(栈)
lpush + rpop = Queue(队列)
lpush + ltrim = Capped Collection(有限集合)
lpush + brpop = MQ(消息队列)

Set(集合)

  • 简介:集合(set)类型也是用来保存多个✁字符串元素,但是不允许重复元素
  • 简单使用举例:sadd key element [element ...]、smembers key
  • 内部编码:intset(整数集合)、hashtable(哈希表)
  • 注意点:smembers 和 lrange、hgetall 都属于比较重的命令,如果元素过多存 在阻塞Redis的可能性,可以使用 sscan 来完成。
  • 应用场景: 用户标签,生成随机数抽奖、社交需求。

有序集合(zset)

  • 简介:已排序的字符串集合,同时元素不能重复
  • 简单格式举例:zadd key score member [score member ...],zrank key member
  • 底层内部编码:ziplist(压缩列表)、skiplist(跳跃表)
  • 应用场景:排行榜,社交需求(如用户点赞)。
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值