Redis数据类型

Redis数据类型

Redis 作为 K-V 类型的缓存中间件,其 value 一共有5中数据类型。 string, set, list, sorted-set(zset), hash.

数据类型查看方式

可以通过 type 命令查看对应value的类型,例如: type key, 输出结果即为上面的类型中的一种。

hset stu name zhangsan
type stu
==> hash

可以通过 object encoding 来查看value的编码方式。

object encoding stu
==> listpack

String

string是最常用的数据结构, 也是可以用最高的一种数据结构。set name lisi,或者批量操作mset, 即标识存储了一个key为name, 值为 lisi 的键值对, 与我们java中常用的map结构有点类似

# set key value [EX seconds|PX milliseconds] [NX|XX] [KEEPTTL]
set name lisi
type name
==> string
object coding name
==> embstr # 在字节长度小于44个字节时,其编码方式为 embstr, 当大于时则为 raw
  • EX 表示多少秒后过期,等同命令: SETEX
  • PX 表示多少毫秒后过期,等同命令:PSETEX
  • NX 只新增,没有时则设置
  • XX 只修改,存在时才设置

bitmap类型

bitmap也属于string类型的操作,可以通过 setbit(设置bit位为1), bitcount(统计1的数量), bitpos(定位查找), bitop(与或非操作) 等对值做一些二进制操作,在设置时,是按照从左右到的字节数去设置的。

127.0.0.1:6379> setbit bt 0 1
(integer) 0
127.0.0.1:6379> setbit bt 1 1
(integer) 0
127.0.0.1:6379> setbit bt 11 1
(integer) 0
127.0.0.1:6379> 
127.0.0.1:6379> 
127.0.0.1:6379> get bt
"\xc0\x1

输出结果解析成二进制就是 1100 0000 0001 0000, 也就是说 setbit 的 offset 表示的是从左往右的偏移量, 忘掉 我们的所谓的大端小端问题

list

list是一个双向链表结构, 在其 key 中会存储相关的 headtail 节点,因此我们可以看见他的list操作命令会有 leftright的区分,他们的效率是一样的, 也正是因为这个数据结构,我们可以拿 list 作为 队列或者栈的实现。

set

无序集合, 类似与java中的 HashSet

  • sinter<store>交集,加上 store 则表示将结果放入新的集合中。
  • sunion<store>并集,加上 store 则表示将结果放入新的集合中。
  • srandmenber key count 表示取N个随机元素,如果count为负数,表示可以重复取,整数表示不能重复

zset

有序集合, zadd k score member, 会按照 score 值排序,且不允许重复的成员。内部通过跳跃表实现高效搜索排序(logN)

hash

hash结构的值类似与java中的hashmap, 可以用来表述java中的对象,例如: hset num101 name 张三 age 18 sex 1, 通过 hgetall num101 即可查看全部的成员属性了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值