title: Redis数据类型
date: 2024-01-20 17:01:46
permalink: /pages/73a3c3/
categories:
- 中间件
- Redis
tags:
-
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
中会存储相关的 head
和 tail
节点,因此我们可以看见他的list操作命令会有 left
与 right
的区分,他们的效率是一样的, 也正是因为这个数据结构,我们可以拿 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
即可查看全部的成员属性了。