Redis数据类型
文章目录
-
- Redis数据类型
-
-
- 0.基本命令
- 1.字符串(String)
-
- [(1)set key value](#(1)set key value)
- [(2)mset /mget](#(2)mset /mget)
- (3)getrange/setrange
- (4)数值增减
- (5)strlen/append
- (6)getset:先get再set
- 2.列表(List)
- 3.哈希(Hash)
-
- (0)简介
- (1)hset/hget/hmget/hlen
- (2)hgetall/hdel
- [(3)hexists key field](#(3)hexists key field)
- (4)hkeys/hvals
- (5)hincrby/hincrbyfloat
- (6)hsetnx
- 4.集合(set)
- [5.有序集合(sorted set)](#5.有序集合(sorted set))
- 6.位图(bitmap)
- 7.基数统计(hyperloglog)
- 8.地理空间(GEO)
- 9.流(stream)
- 10.位域(bitfield)
-
0.基本命令
(1)key操作命令
-
keys *
:查看当前库所有的key,类似于select*。 -
exists key
:判断某个key是否存在,存在返回1,不存在返回0。sqlexists k1 k2 k3 //若有一个不存在则返回2,以此类推
-
type key
:查看key是什么类型。 -
del key
:删除指定的key数据。 -
unlink key
:非阻塞删除,真正的删除在异步中操作 -
ttl key
:查看还有多长时间(秒)过期,返回-1
代表永不过期,返回-2
代表已经过期。 -
expire key [second]
:为给定的key设置过期时间。 -
move key dbindex [0-15]
:将当前数据库的key
移动端给定的数据库中。redis有16个数据库,默认使用0号数据库。
-
select [0-15]
:选择某个数据库。 -
dbsize
:查看当前数据库的key数量,类似于select count(*)
。 -
flushdb
:清空当前库。 -
flushall
:通杀全部库。 -
move key db
:将当前数据库的数据移动到给定数据库。
(2)注意
- 命令不区分大小写,但是key是区分大小写的。
- 帮助命令
kelp @xxx
。
1.字符串(String)
(1)set key value
-
官网给出此命令有多个可选参数。
sqlSET key value [NX | XX] [GET] [EX seconds | PX milliseconds | EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL]
EX [second]
-- 设置指定的过期时间(以秒为单位)。PX [millisecond]
-- 设置指定的过期时间(以毫秒为单位)。EXAT [second]
-- 设置键过期的指定 Unix 时间(以秒为单位)。PXAT [millisecond]
-- 设置键过期的指定 Unix 时间(以毫秒为单位)。NX
-- 键不存在时才设置密钥。XX
-- 仅当键已存在时才设置密钥(覆盖原值)。KEEPTTL
-- 保留与键关联的生存时间。GET
-- 返回指定键原本的值,若键不存在返回``nil`
(2)mset /mget
-
mset [k v]...
用于同时创建多个键值对。sqlmset k1 v1 k2 v2 k3 v3
-
mget [k]...
用于查看多个键的值。sqlmget k1 k2 k3
-
与
set
一样,mset
也可以选择使用上述参数,但是会当成一个整体,不存在部分操作成功。
(3)getrange/setrange
-
此两种命令用来获取或设定区间范围的值。
-
getrange key [st ed]
:或许索引下标之间的字符串(索引从0开始)。 -
setrange key [st str]
:设置从下标st开始的一段值为str。sqlset k1 123456 #1234abcd getrange k1 0 4 #1234a setrange k1 2 xxyy #12xxyycd
(4)数值增减
- 一定要是数字才可以进行增减。
incr/decr
:递增/递减数字。incrby/decrby key cnt
:增加(减少)指定的值。
(5)strlen/append
strlen key
:获取字符串的长度。append key str
:在原来的基础上追加内容。
(6)getset:先get再set
2.列表(List)
(0)简介
- 是一个双端链表的结构,特点为单key多value。
- 两端都可以执行插入或者添加操作。
- 主要功能有push/pop等,一般用在栈、队列、消息队列等场景。
(1)lpush/rpush
lpush key [v1 v2...]
:在列表头部插入一个或者多个值。rpush key [v1 v2...]
:在列表尾部插入一个或多个值。
(2)lindex/lrange/llen
lindex key cnt
:获取指定索引下标的元素。lrange key [st ed]
:获取指定范围内的元素。llen key
:获取列表中元素的个数。
(3)lpop/rpop
lpop key
:移除并获取列表的第一个元素。rpop key
:移除并获取列表的最后一个元素。
(4)lrem/ltrim
lrem key cnt v1
:删除cnt个值为v1的元素。ltrim key [st ed]
:截取指定范围内的元素并覆盖原值。
(5)rpoplpush
- 弹出第一个key的最后一个元素,插入到第二个key的队头。
rpoplpush k1 k2
(6)lset/linsert
lset key index val
:通过索引设置列表元素值。linsert key before/after have new
:在某值之前或之后插入新值。
3.哈希(Hash)
(0)简介
- string 类型的 field(字段) 和 value(值) 的映射表。
- k-v的模式不变,但是v是键值对的集合。
- 可以理解为
map<string, map<object, onject>>
(1)hset/hget/hmget/hlen
hset key [f1 v1] [f2 v2]...
:将哈希表中的field字段设值为value。hget key field
:获取字段映射的值。hmget key f1 f2...
:获取多个字段映射的值。hlen key
:获取全部字段的数量。
(2)hgetall/hdel
hgetall key
:获取哈希表中所有的字段和值。hsel key f1 f2...
:删除一个或多个哈希表字段。
(3)hexists key field
- 查询哈希表中指定的字段是否存在。
- 存在返回数量,不存在返回0。
(4)hkeys/hvals
hkeys key
:获取哈希表中的所有字段。hvals key
:获取哈希表中所有的值。
(5)hincrby/hincrbyfloat
hincrby key field add
:为指定字段的整数值加上增量。hincrbyfloat
:为指定字段的浮点数值加上增量。
(6)hsetnx
- 为哈希表中不存在的的字段赋值 。
hsetnx f1 v1
(不可同时赋值多个)
4.集合(set)
(0)简介
- 集合是String的无序集合,集合成员是唯一的。
- 数据的存储数据随机。
- 通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
(1)sadd/srem
sadd key [m1 m2...]
:添加一个或多个元素。srem key [m1 m2...]
:删除一个或多个元素。
(2)smembers/srandmember/scard
smembers key
:返回集合中到的所有成员。srandmembser key [cnt]
:返回集合中指定个随机值。scard
:获取成员的集合数。
(3)sismemsber/spop
sismemser key member
:判断元素是否存在。spop key
:移除并返回集合中的一个元素。
(4)smove
smove k1 k2 val
- 将元素从一个集合移动到另一个集合。
(5)集合运算
-
sdiff
差集运算-
sdiff key k1 [k2...]
-
属于key但不属于k1 k2 ...的元素构成的集合(新集合)。
-
-
sunion
并集运算sunion key k1 [k2...]
- 属于key或者属于k1 k2 ...的元素构成的集合(新集合)。
-
sinter
交集运算sinter key k1 [k2...]
- 属于key同时也属于k1 k2 ...的元素构成的集合(新集合)。
5.有序集合(sorted set)
(0)简介
- 与set不同的是每个元素都会关联一个 double 类型的分数。
- 通过分数来为集合中的成员进行从小到大的排序。
- 有序集合的成员是唯一的,但分数是却可以重复的。
(1)zadd/zrem
zadd key s1 m1 [s2 m2]
:添加一个或多个元素。zrem key score m1 [m2...]
:删除某分数下对应的值。
(2)zcard/zscore/zcout
zcard key
:获取有序集合的成员数。zscore key member
:返回有序集合中成员的分数值。zcount key min max
:返回指定区间分数的成员数(包含区间)。
(3)zrange/zrevrange
zrange key st ed
:返回索引区间内的成员。zrevrange key st ed
:返回索引区间内的成员,分数由高到低。
(4)zrangebyscore
zrangebyscore key min max [withsocres][limit]
- 通过分数返回有序集合指定区间内的成员。
(5)zincrby
-
key increment member
-
对有序集合中指定成员的分数加上增量 。
(6)zrank/zrevrank
zrank key member
:返回有序集合中指定成员的索引(获取下标值)。zrevrank
:回有序集合中指定成员的索引,并按分数从小到大排列。
6.位图(bitmap)
(0)简介
-
用String类型作为底层数据结构实现的一种统计二值状态的数据类型。
-
由多个二进制位组成,每个二进制位都对应一个偏移量。
-
位图本质是数组,每一位用来判断是否二值。
- 适合一些数据量大且使用二值统计的场景。
(1)setbit
- 命令格式:
setbit key offset value
- 针对key存储的字符串值,设置或清除指定偏移量(索引)offset上的值value。
- 设置值为1,清除值为0。
- 当key不存在时,会创建一个新的字符串。
(2)getbit
- 命令格式:
getbit key offset
- 返回指定索引位置的值。
(3)strlen/bitcount
strlen key
:统计字节数占用多少(8位一字节)。bitcount key [st ed]
:全部(范围)键里含有多少个1。
(4)bitop
- 位运算操作命令。
botop operation key k1 [k2 ...]
- operation可以为and/or/xor/not。
7.基数统计(hyperloglog)
(0)简介
- 去重复统计功能的技术估计算法。
- 基数是一种数据集,去重复的真实个数。
- 不会存储输入元素本身。
(1)pfadd
pfadd key e1 [e2 e3...]
- 添加指定元素。
(2)pfcount/pfmerge
pfcount key [k1 k2...]
:返回给定的hyperloglog的基数估计值。pfmerge key k1 [k2 k3...]
:将多个合并。
8.地理空间(GEO)
(0)简介
- 主要用于存储地理位置信息,并对存储的信息进行操作。
- 将经度与纬度以一种二级制编码的方式存储起来。
(1)geoadd/geopos/geohash
geoadd key 经度 纬度 位置名称 [a b c]..
:添加一个或多个位置信息。geopos key 位置名称 [m1 m2....]
:返回所有指定位置的位置信息。geohash
(2)geodist/georadius/georadiusbymember
geodist key m1 m2 [m|km|ft|mi]
:返回两个给定位置之间的距离。georadius key 经度 纬度 radius m|km|ft|mi
:以某经纬为中心,查找半径范围内的XXX。georadiusbymember key member radius m|km|ft|mi
:以某位置为中心,查找半径范围内的XXX。
9.流(stream)
(0)简介
-
相当于Redis版的消息中间件(阻塞队列),MQ。
-
实现消息队列,支持消息的持久化,支持消费者模式等。
-
让消息队列更加的稳定可靠。
-
自成一派,为stream类型。
-
id结构:<毫秒时间戳> - <递增序列号>
(1)队列相关指令
-
xadd key id field value [f1 v1 f2 v2 ...]
- 向队列中添加消息(创建队列)。
- id :消息 id,我们使用 * 表示由 redis 生成,可以自定义,但是要自己保证递增性。
-
xrange key st ed [count cnt]
- 获取指定区间内(指定数量)的消息列表。
- st为
-
时表示最小值,ed为+
时,表示最大值。 xrevrange key ed st...
:降序输出。
-
xdel key id [id ...]
- 删除选定的消息。
- 可同时删除多个。
-
xtrim
对流进行截取,限制长度。xtrim key maxlen count
:修建为最新的指定数目个项目。xtrim key minid id
:低于所指定id的所有条目都将被逐出。xtrim key maxlen ~ count
:~
参数意味着用户并没有真正请求流长度正好为cnt个项目,而是可以多几十个条目,但永远不会少于cnt个项目。
-
xread [COUNT cnt] [BLOCK ms] streams key [key ...] id [id ...]
- 以阻塞或非阻塞方式获取消息列表。
- 未设置阻塞秒数即为非阻塞模式。
- 获取一个或多个key的从id开始cnt条消息(大于id的消息)。
$
代表特殊ID,表示以当前Stream已经存储的最大的ID作为最后一个ID,当前Stream中不存在大于当前最大ID的消息,因此此时返回nil。0-0
代表从最小的ID开始获取Stream中的消息,当不指定count,将会返回Stream中的所有消息,注意也可以使用0(00/000也都是可以的......)
(2)消费组相关指令
xgroup create
- 用于创建消费者组。
xgroup create key groupname 0
:从头部开始消费(依次向后消费)。xgroup create key groupname $
:从尾部开始消费(消费新来的信息)。
xreadgroup group
xreadgroup groupname consumer streams key
- 同一个消费者组里的消费者不能消费同一条信息。
- ">"表示从第一条尚未被消费的消息开始读取
xpending
- 查询每个消费组内所有消费者[已读取、但尚未确认]的消息。
- 查看某个消费者具体读取了哪些数据。
xack
- 向消息队列确认消息处理已完成。
10.位域(bitfield)
(0)简介
- 将一个Redis字符串看作是一个由二进制位组成的数组。
- 并能对变长位宽和任意没有字节对齐的指定整型位域进行寻址和修改。
- 主要功能为位域修改和溢出控制。