【Redis 03】Redis常用数据对象类型

Redis常见对象有8种:

  • 字符串对象 -string
  • 列表对象 - list
  • 哈希对象-hash
  • 集合对象-set
  • 有序集合对象-zset
  • Bitmap
  • Geo
  • Hyperloglog

0、Redis对象介绍

Redis中的键值都是用对象表示的,新建键值时,每次都会至少创建两个对象:键对象、值对象。

Redis中的对象redisObject定义如下:

typedef struct redisObject {
    unsigned type:4; // 对象类型, string、list、hash、set、zset
    unsigned encoding:4; //  编码方式
    unsigned lru:LRU_BITS; 
    int refcount; //引用次数
    void *ptr; // 数据指针
} robj;
  • 类型type:使用TYPE key,会分别输出: string、list、hash、set、zset,对应5种类型的对象。
  • encoding:有字符串(int、embstr、raw)、字典(hashtable)、双端链表(linkedlist)、压缩列表(ziplist)、整数集合(intset)、跳跃表和字典(skiplist)。

一、字符串对象(stirng)

字符串对象的编码可以是int、raw、embstr 3种。

1、int:当字符串对象保存整数值时,使用int编码方式,值会保存到ptr属性中(省去了ptr指针占用的空间):
在这里插入图片描述

2、raw:当字符串对象保存字符串值,且字符串 > 39字节,使用SDS简单动态字符串来保存,编码方式为raw:
在这里插入图片描述

3、embstr:用于保存短字符串(<=39字节)。

与raw编码区别:raw编码会调用两次内存分配函数创建redisObject和sds。embstr只需要调用一次内存分配函数来分配一块连续的空间(减少内存碎片)。
在这里插入图片描述

常用操作命令:

set key value
get key
mset key1 value1 keys2 value2
mget key1 key2...
incrby key integer :将key的值 + integer值
dncrby key integer :将key的值 - integer值  

二、列表对象(list)

列表对象编码是 ziplist 或 linkedlist。

当列表对象保存的是字符串元素,且:

  • 字符串长度 < 64字节
  • 字符串个数 < 512个

两者必须满足才会使用ziplist,否则用linkedlist。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值