Redis数据类型(包含新增stream)

1.字符串类型

可以存储任何类型的字符串,包括json字符串,二进制数据,允许最大的容量为512MB

  • 赋值和取值
127.0.0.1:6379> set name ashin
OK
127.0.0.1:6379> get name
"ashin"
  • 增加指定的整数(自动加1,可以指定+多少)
127.0.0.1:6379> incr songs
(integer) 1
127.0.0.1:6379> incr songs
(integer) 2
127.0.0.1:6379> get songs
"2"
127.0.0.1:6379> incrby songs 7
(integer) 9
127.0.0.1:6379> get songs
"9"
  • 减少指定整数(自动减1,可以指定-多少)
127.0.0.1:6379> decr songs
(integer) 8
127.0.0.1:6379> decrby songs 3
(integer) 5
  • 增加浮点数
127.0.0.1:6379> incrbyfloat songs 0.1
"5.1"
127.0.0.1:6379> get songs
"5.1"
  • 向尾部追加值(如果键不存在,就直接设置成追加的值)
127.0.0.1:6379> append songs rr
(integer) 5
127.0.0.1:6379> append songs 10
(integer) 7
127.0.0.1:6379> append songs 1
(integer) 8
127.0.0.1:6379> append songs 10
(integer) 10
127.0.0.1:6379> get songs
"5.1rr10110"
127.0.0.1:6379> append sing 1
(integer) 1
127.0.0.1:6379> get sing
"1"
  • 获取字符串长度(中文占3个)
127.0.0.1:6379> strlen songs
(integer) 10
127.0.0.1:6379> set person 阿信
OK
127.0.0.1:6379> get person
"\xe9\x98\xbf\xe4\xbf\xa1"
127.0.0.1:6379> strlen person
(integer) 6
  • 同时获取多个键
127.0.0.1:6379> mget songs sing person
1) "5.1rr10110"
2) "1"
3) "\xe9\x98\xbf\xe4\xbf\xa1"
  • 同时设置多个键值对
127.0.0.1:6379> mset day 1997 day1 0329
OK
127.0.0.1:6379> mget day day1
1) "1997"
2) "0329"

2.散列类型(hash)

散列类型(hash)的键值也是一种字典结构,其存储了字段(field)和字段值的映射,但字段值只能是字符串,不支持其他数据类型,一个散列类型键可以包含至多2^32-1个字段

  • 设置键
127.0.0.1:6379> hset singer:1 name ashin
(integer) 1
127.0.0.1:6379> hset singer:1  age 18
(integer) 1
  • 获取某个字段的值
127.0.0.1:6379> hget singer:1 name
"ashin"
  • 获取键的所有字段和值
127.0.0.1:6379> hgetall singer:1
1) "name"
2) "ashin"
3) "age"
4) "18"
  • 获取所有的键不需要值
127.0.0.1:6379> hkeys singer:1
1) "name"
2) "age"
  • 获取所有的值
127.0.0.1:6379> hvals singer:1
1) "ashin"
2) "18"
  • 获取多个字段的值
127.0.0.1:6379> hmget singer:1 name age
1) "ashin"
2) "18"
  • 设置多个字段的值
127.0.0.1:6379> hmset singer:1 address china date 20201020
OK
127.0.0.1:6379> hgetall singer:1
1) "name"
2) "ashin"
3) "age"
4) "18"
5) "address"
6) "china"
7) "date"
8) "20201020"
  • 判断键的字段是否存在(不存在返回0)
127.0.0.1:6379> hexists singer:1 desc
(integer) 0
  • 增加字段值数字
127.0.0.1:6379> hincrby singer:1 age 2
(integer) 20
127.0.0.1:6379> hgetall singer:1
1) "name"
2) "ashin"
3) "age"
4) "20"
5) "address"
6) "china"
7) "date"
8) "20201020"
  • 删除字段
127.0.0.1:6379> hdel singer:1 date
(integer) 1
127.0.0.1:6379> hgetall singer:1
1) "name"
2) "ashin"
3) "age"
4) "20"
5) "address"
6) "china"

3.列表类型

列表类型(list)可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的某一个片段。列表类型内部是使用双向链表(doublelinkedlist)实现的借助列表类型,Redis还可以作为队列中使用。与散列类型最多能容纳的字段数量相同,一个列表类型最多能容纳2^32-1个元素

  • 向列表的左边添加值(添加完会返回列表中现在的个数,列表中的元素是可以重复的)
127.0.0.1:6379> lpush province fujian zhejiang
(integer) 2
  • 向列表的右边添加值
127.0.0.1:6379> rpush province guangdong
(integer) 3
  • 向列表添加多个值
127.0.0.1:6379> lpush province jiangsu
(integer) 4
  • 弹出列表中的值(弹出之后列表中就没有这个值了)
127.0.0.1:6379> lpop province-----弹出左边第一个
"jiangsu"
127.0.0.1:6379> rpop province-----弹出右边第一个
"guangdong"
  • 获取列表中的元素的个数
127.0.0.1:6379> llen province
(integer) 2
  • 获取列表中指定位置到指定位置的元素(获取了不会删除这些)
127.0.0.1:6379> lrange province 0 1-----redis的下标也是从0开始
1) "zhejiang"
2) "fujian"
  • 没有从右边开始截取的命令,但是可以用负数
127.0.0.1:6379> lrange province -2 -1
1) "zhejiang"
2) "fujian"

列出所有元素

127.0.0.1:6379> lrange province 0 -1
1) "fujian"
2) "fujain"
3) "zhejiang"
  • 删除元素
127.0.0.1:6379> lrem province 1 fujian ---从左边找 删除1个value为fujian
(integer) 1
127.0.0.1:6379> lpush province fujian fujian fujain fujian
(integer) 5
127.0.0.1:6379> lrem province -2 fujian ---从右边找 删除2个value为fujian
(integer) 2
(1)当count>0时LREM命令会从列表左边开始删除前count个值为value的元素。
(2)当count<0时LREM命令会从列表右边开始删除前count个值为value的元素。
(3)当count=0是LREM命令会删除所有值为value的元素
  • 获取指定下标元素
127.0.0.1:6379> lrange province 0 -1
1) "xizang"
2) "liaoning"
3) "heilongjiang"
4) "guangxi"
5) "fujian"
6) "fujain"
7) "zhejiang"
127.0.0.1:6379> lindex province 3
"guangxi"
127.0.0.1:6379> lindex province -3
"fujian"
  • 设置下标的元素的值
127.0.0.1:6379> lset province -1 shanxi --右边第一个
OK
127.0.0.1:6379> lrange province 0 -1
1) "xizang"
2) "liaoning"
3) "heilongjiang"
4) "guangxi"
5) "fujian"
6) "fujain"
7) "shanxi"
  • 只保留某些元素
127.0.0.1:6379> ltrim province 0 5  ---只保留留个元素 其他的删除
OK
127.0.0.1:6379> lrange province 0 -1
1) "xizang"
2) "liaoning"
3) "heilongjiang"
4) "guangxi"
5) "fujian"
6) "fujain"
  • 插到指定元素的前面后面
127.0.0.1:6379> linsert province after fujian xinjiang--从左边开始找fujian将xinjiang插到后面
(integer) 7
127.0.0.1:6379> lrange province 0 -1
1) "xizang"
2) "liaoning"
3) "heilongjiang"
4) "guangxi"
5) "fujian"
6) "xinjiang"
7) "fujain"
127.0.0.1:6379> linsert province before fujian hunan--从左边开始找fujian将hunan插到前面
(integer) 8
127.0.0.1:6379> lrange province 0 -1
1) "xizang"
2) "liaoning"
3) "heilongjiang"
4) "guangxi"
5) "hunan"
6) "fujian"
7) "xinjiang"
8) "fujain"
  • 将列表元素移动到另一个列表中
127.0.0.1:6379> rpoplpush province protemp--将province右边第一个移动到protemp的左边
"fujain"
127.0.0.1:6379> lrange province 0 -1
1) "xizang"
2) "liaoning"
3) "heilongjiang"
4) "guangxi"
5) "hunan"
6) "fujian"
7) "xinjiang"
127.0.0.1:6379> lrange protemp 0 -1
1) "fujain"

4.集合类型(set)

集合类型的常用操作是向集合中加入或者删除元素,判断某个元素是否存在等,由于集合类型在Redis内部是使用值为空的散列表(hashtable)实现的,集合的值不能重复

  • 添加
127.0.0.1:6379> sadd color red blue yellow
(integer) 3
  • 删除值
127.0.0.1:6379> srem color red
(integer) 1
  • 获取所有值
127.0.0.1:6379> smembers color
1) "yellow"
2) "blue"
  • 比较两个集合,找不一样的值
127.0.0.1:6379> smembers color
1) "yellow"
2) "blue"
127.0.0.1:6379> sadd morecolor pink red blue black
(integer) 4
127.0.0.1:6379> sdiff color morecolor
1) "yellow"
  • 计算多个集合的交集
127.0.0.1:6379> sinter color morecolor
1) "blue"
  • 计算几个集合所有的元素不重复
127.0.0.1:6379> sunion color morecolor lesscolor
1) "pink"
2) "brown"
3) "black"
4) "yellow"
5) "white"
6) "blue"
7) "red"
  • 集合的元素
127.0.0.1:6379> scard color
(integer) 2
  • 将集合运算的结果存到元素中(会返回计算的结果个数)
127.0.0.1:6379> sdiffstore color1 color morecolor (差集)
(integer) 1
127.0.0.1:6379> sinterstore color2 color morecolor(交集)
(integer) 1
127.0.0.1:6379> sunionstore color3 color morecolor (并集)
(integer) 5
  • 随机从集合中取出元素(不会删除,后面是每次随机取出多少个,如果是-10,而且元素和数还没有10个就会出现重复的)
127.0.0.1:6379> srandmember color 1
1) "yellow"
  • 随机弹出某个元素
127.0.0.1:6379> spop color
"yellow"

5.有序集合zset

有序集合类型(sortedset)的特点从它的名字中就可以猜到,它与介绍的集合类型的区别就是有序二字。在集合类型的基础上有序集合类型为集合中的每个元素都关联了一个分数,这使得我们不仅可以完成插入、删除和判断元素是否存在等集合类型支持的操作,还能够获得分数最高(或最低)的合可以(通过更改这个元素的分数)。有序集合要比列表类型更耗费内存。
 

  • 增加修改元素
127.0.0.1:6379> zadd result 100 ashin 99 jay 98 stone
(integer) 3
127.0.0.1:6379> zadd result -inf masa --添加一个无限小的数,如果有多个的话先加的小
(integer) 1
127.0.0.1:6379> zadd result +inf monster--添加一个无限大的数,如果有多个的话就按照添加顺序后加的大
(integer) 1
  • 获取元素分数
127.0.0.1:6379> zscore result ashin
"100"
  • 按照顺序找元素
127.0.0.1:6379> zrange result 0 2 --从小到大 第0个到第2个
1) "stone"
2) "jay"
3) "ashin"
127.0.0.1:6379> zrevrange result 0 2 --从大到小 最后一个到倒数第三个
1) "monster"
2) "ashin"
3) "jay"
127.0.0.1:6379> zrange result 0 -1 -- 从小到大排列所有的
1) "stone"
2) "jay"
3) "ashin"
4) "monster"
127.0.0.1:6379> zrange result 0 -1
1) "masa"
2) "stone"
3) "jay"
4) "ashin"
5) "monster"
127.0.0.1:6379> zrange result 0 -1 withscores --列出所有分数值
 1) "masa"
 2) "-inf"
 3) "stone"
 4) "98"
 5) "jay"
 6) "99"
 7) "ashin"
 8) "100"
 9) "monster"
10) "inf"

如果两个元素的分数相同的话Redis会按照字典顺序(即0<9<A<Z<a<z这样的顺序)

  • 获取指定分数之间的元素
127.0.0.1:6379> zrangebyscore result 60 80 --分数60到80之间的
1) "maria"
2) "jane"
3) "kangkang"
127.0.0.1:6379> zrangebyscore result 60 (80--加(表示不包含这个值
1) "maria"
2) "jane"
127.0.0.1:6379> zrangebyscore result 60 +inf--60到正无穷
1) "maria"
2) "jane"
3) "kangkang"
4) "stone"
5) "jay"
6) "ashin"
7) "monster"
127.0.0.1:6379> zrangebyscore result -inf 60--负无穷到60
1) "masa"
2) "maria"
127.0.0.1:6379> zrangebyscore result -inf +inf--所有的
1) "masa"
2) "maria"
3) "jane"
4) "kangkang"
5) "stone"
6) "jay"
7) "ashin"
8) "monster"
  • 分页功能(limit offset count)
127.0.0.1:6379> zrangebyscore result -inf +inf limit 0 2--从小到大
1) "masa"
2) "maria"
127.0.0.1:6379> zrevrangebyscore result  100 -inf limit 0 2--从大到小
1) "ashin"
2) "jay"
  • 分数++
127.0.0.1:6379> zincrby result 2 kangkang
"82"
127.0.0.1:6379> zincrby result -2 jane
"68"
127.0.0.1:6379> zrange result 0 -1 withscores
 1) "masa"
 2) "-inf"
 3) "maria"
 4) "60"
 5) "jane"
 6) "68"
 7) "kangkang"
 8) "82"
 9) "stone"
10) "98"
11) "jay"
12) "99"
13) "ashin"
14) "100"
15) "monster"
16) "inf"

如果指定的元素不存在,Redis在执行命令前会先建立它并将它的分数赋值为0再执行操作

  • 获取有序集合的元素个数
127.0.0.1:6379> zcard result
(integer) 8
  • 获取指定分数范围内元素的个数
127.0.0.1:6379> zcount result 60 80
(integer) 2
  • 删除元素
127.0.0.1:6379> zremrangebyrank result 0 1--按照排名范围
(integer) 2
127.0.0.1:6379> zrange result 0 -1 withscores
 1) "kangkang"
 2) "82"
 3) "stone"
 4) "98"
 5) "jay"
 6) "99"
 7) "ashin"
 8) "100"
 9) "monster"
10) "inf"
127.0.0.1:6379> zremrangebyscore reslut 80 90--按照分数范围
(integer) 0
127.0.0.1:6379> zrange result 0 -1 withscores
 1) "kangkang"
 2) "82"
 3) "stone"
 4) "98"
 5) "jay"
 6) "99"
 7) "ashin"
 8) "100"
 9) "monster"
10) "inf"
  • 获取元素排名
127.0.0.1:6379> zrange result 0 -1 withscores
 1) "kangkang"
 2) "82"
 3) "stone"
 4) "98"
 5) "jay"
 6) "99"
 7) "ashin"
 8) "100"
 9) "monster"
10) "inf"
127.0.0.1:6379> zrank result jay-----从小到大
(integer) 2
127.0.0.1:6379> zrevrank result stone----从大到小
(integer) 3
  • 获取两个有序集合的交集
aggregate min 就会比较两个集合的值去最小的值,max就取最大的值
127.0.0.1:6379> zinterstore des 2 result  weight aggregate max
(integer) 2


计算有序集合的交集,并将结果保存起来
 
语法:ZINTERSTORE destination numkeys [WEIGHTS weight weight...] [AGGREGATE SUM | MIN | MAX]
 
destination :代表计算结果保存的地方
 
Numkeys: 代表你要计算几个集合的交集
 
WEIGHTS :代表权重,它可以设置每个元素的权重,也就是在每个元素参与计算时,元素的分数会乘以你指定的一个权重。
 
[AGGREGATE SUM | MIN | MAX]:代表元素如果有交集,是计算它的和、最大值还是最小值。

6.stream(redis 5.0新增)

消息ID

消息ID的形式是timestampInMillis-sequence,例如1527846880572-5,它表示当前的消息在毫米时间戳1527846880572时产生,并且是该毫秒内产生的第 5 条消息。消息 ID 可以由服务器自动生成,也可以由客户端自己指定,但是形式必须是整数-整数,而且必须是后面加入的消息的 ID 要大于前面的消息 ID。

追加消息

127.0.0.1:6379> xadd secret * name ashin age 18
"1603174873083-0"

获取消息长度

127.0.0.1:6379> xlen secret
(integer) 2

获取消息列表,自动过滤已删除的消息

127.0.0.1:6379> xrange secret - +    --- -表示最小值,+表示最大值 可以替换为对应的消息id
1) 1) "1603174873083-0"
   2) 1) "name"
      2) "ashin"
      3) "age"
      4) "18"
2) 1) "1603174889738-0"
   2) 1) "name"
      2) "jay"
      3) "age"
      4) "28"
3) 1) "1603174982760-0"
   2) 1) "name"
      2) "stone"
      3) "age"
      4) "38"
4) 1) "1603174991603-0"
   2) 1) "name"
      2) "kangkang"
      3) "age"
      4) "48"
5) 1) "1603175002324-0"
   2) 1) "name"
      2) "jane"
      3) "age"
      4) "58"

删除消息,这里的删除仅删除标志位不影响消息长度

127.0.0.1:6379> xlen secret
(integer) 5
127.0.0.1:6379> xdel recret 1603174991603-0
(integer) 0
127.0.0.1:6379> xlen secret
(integer) 5

删除整个stream

127.0.0.1:6379> del secret
(integer) 1

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值