Redis笔记-5种数据结构

Redis笔记-5种数据结构与操作

Redis 支持5种数据结构与操作

结构类型 结构存储的值 结构的读写能力
String 可以是字符串、整数或者是字符串 对字符串操作,整数自增,自减
LIST 链表,链表的每个节点都包含一个字符串 链表两端推入节点插入,删除;
根据偏移量进行修剪(trim);
读取单个或多个元素;
根据值查找或移除节点;
SET 集合,无序,唯一 。对应: List < String > 添加,删除,获取,判断是否存在;
计算交集、并集、差集;
随机获取一元素;
HASH 键值对,无序,key唯一 对应 HashMap<String,String> 添加,获取,移除单个键值;
获取整个键值对
ZSET 键(member)值(score)对,有序,根据 值(score)的大小进行排序 添加,获取,删除;
根据范围(Range)获取成员

示例操作

一:String

1)添加(set [key] [值] ,key存在时,则更新)

127.0.0.1:6379> set name1 richy
OK

2)查看(get [key] )

127.0.0.1:6379> get name1
“richy”

3)删除(del [key])

127.0.0.1:6379> del name1
(integer) 1

4)更改 (getset [key] )

127.0.0.1:6379> getset name1 richyliu
“richy”

PS:key不存在时,自动创建,并返回旧值感觉跟set实际是一个样。。

5)获取多个值(mget)

127.0.0.1:6379> mget name1 name2

  1. “richyliu2”
  2. “wa”

6)将值加到后面 (append [key] [value])

127.0.0.1:6379> append name2 liu
(integer) 5

7)获取字符长度 (strlen [key])

127.0.0.1:6379> strlen name1
(integer) 9

PS:返回值为最终字符串长度

8)数值加 (incr [key])

127.0.0.1:6379> incr age1
(integer) 11

PS:返回值为最终值

9)数值加 (decr [key])

127.0.0.1:6379> decr age1
(integer) 10

PS:返回值为最终值

PS: 还有不少不怎么常用的,比如:字符偏移量(getbit),浮点自增(减),所有值自增(减)等,想得到的基本上都有对应的命令。下面类型也是一样,不再复述

二:LIST

1) 左边(头)添加值 (lpush [list] [value] [value] [value] )

127.0.0.1:6379> lpush l1 richy
(integer) 1

PS:LIST不存在时创建,如果有多个值 ,以空格隔开 ,多个值时 index 排在最后的最靠前,如下:

127.0.0.1:6379> lpush l3 a b c d e f
(integer) 6
127.0.0.1:6379> lindex l3 0
“f”

2) 右边(尾)添加值 (rpush [list] [value] )

127.0.0.1:6379> rpush l8 richy
(integer) 3
127.0.0.1:6379> lindex l8 2
“richy”
127.0.0.1:6379>

3)获取值 (lindex [list] [index] )

127.0.0.1:6379> lindex l1 0
“richy”

4)移出并获取列表的第一个元素 (lpop [list [index] )

127.0.0.1:6379> lpop l1
“richy”

5)移出并获取列表的最后一个元素 (rpop [list] [index] )

127.0.0.1:6379> rpop l1
“richy”

6)获取长度 (llen [list] [index] )

127.0.0.1:6379> llen l3
(integer) 6

7)移除值 (lrem [list] [count] [value] )

127.0.0.1:6379> lpush l3 e e e e e e e e
(integer) 8
127.0.0.1:6379> lrem l3 3 e
(integer) 3
127.0.0.1:6379> lrem l3 3 e
(integer) 3
127.0.0.1:6379> lrem l3 3 e
(integer) 2

PS:返回值为移除掉的数量

8)移除列表的最后一个元素,并将该元素添加到另一个列表并返回 ( rpoplpush [source] [destination] )

127.0.0.1:6379> lpush l4 1 2 3 4 5 (插入后实际顺序是:5 4 3 2 1 )前面有讲到
(integer) 5
127.0.0.1:6379> rpoplpush l4 l5 (第一次)
“1”
127.0.0.1:6379> llen l4
(integer) 4
127.0.0.1:6379> llen l5
(integer) 1
127.0.0.1:6379> rpoplpush l4 l5 (第二次)
“2”
127.0.0.1:6379> llen l4
(integer) 3
127.0.0.1:6379> llen l5
(integer) 2

127.0.0.1:6379> lindex l5 0
“2”
127.0.0.1:6379>

PS:通过两次的插入实践证明这个逻辑:从l4取出第1个值 插入l5的最后。 l4数量减少,l5数量增加

9)从列表中取出最后一个元素,并插入到另外一个列表的头部; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 ( brpoplpush [source] [destination] [expire(秒)])

127.0.0.1:6379> lpush l6 1 2 3 #插入3个元素, 顺序为 3 2 1
(integer) 3
127.0.0.1:6379> brpoplpush l6 l7 10 第一次,取l6最后一元素,插入l7头部
“1”
127.0.0.1:6379> brpoplpush l6 l7 10 第二次
“2”
127.0.0.1:6379> lindex l7 0
“2”
127.0.0.1:6379> brpoplpush l6 l7 10 第三次
“3”
127.0.0.1:6379> brpoplpush l6 l7 10 第四次,因为没有元素,进入等待
(nil)
(10.03s)

10)赋值 ( lset [list] [index] [value])

127.0.0.1:6379> lset l8 0 abc
OK

三:SET

1)赋值 ( sadd [set] [value1] [value2] [value3]) ,多个值 以空格隔开

127.0.0.1:6379> sadd s1 1 2 3
(integer) 3

2)随机弹出 ( spop [set] [count])

127.0.0.1:6379> spop s1 2
“2”
“3”
127.0.0.1:6379> spop s1 1
“1”
127.0.0.1:6379> spop s1 1
(empty list or set)

2)获取集合数量 (scard [set])

127.0.0.1:6379> scard s1
(integer) 3

3)获取所有元素 ( smembers [set] )

127.0.0.1:6379> smembers s1
1 ) “c”
2 ) “b”
3 ) “a”

4)获取集差( sdiff [set1] [set2] )

127.0.0.1:6379> sadd s1 a b c
(integer) 3
127.0.0.1:6379> sadd s2 c d e f
(integer) 4
127.0.0.1:6379> sdiff s1 s2
1 ) “b”
2 ) “a”

5)获取指定所有集合的交集 (sinter [set] [set2] [set3] )

127.0.0.1:6379> sinter s1 s2
1 ) “c”

6)获取并集( sunion [set] [set] [set] )

127.0.0.1:6379> sunion s1 s2
1 ) “a”
2 ) “f”
3 ) “e”
4 ) “c”
5 ) “d”
6 ) “b”

7)获取并集 并存到目标集合 (sunion [destination set] [set1] [set2] )

127.0.0.1:6379> 127.0.0.1:6379> sunionstore s3 s1 s2
(integer) 6
127.0.0.1:6379> smembers s3
1 ) “a”
2 ) “f”
3 ) “e”
4 ) “c”
5 ) “d”
6 ) “b”

8)移动(smove [source][destination] [value] )

127.0.0.1:6379> smove s3 s4 a
(integer) 1 PS:1 移动个数

9)删除( srem [source] [destination] [value] )

127.0.0.1:6379> srem s1 g
(integer) 1 删除个数

四:HASH

1)赋值 (hset [table] [key] [value] )

127.0.0.1:6379> hset h1 name richy #当集合不存在时则创建集合再赋值
(integer) 1
127.0.0.1:6379> hset h1 age 18
(integer) 1
127.0.0.1:6379> hset h1 addr guanzhou
(integer) 1

2)多个赋值 ( hmset [table] [col1] [value1] [col2] [value2] )

127.0.0.1:6379> hmset h2 name wa age 17 addr guangzhou
OK

3)获取表指定字段 (hget [table] [col])

127.0.0.1:6379> hget h2 name
“wa”

4)获取表多个指定字段 (hmget [表] [col1] [col2] [col3] )

127.0.0.1:6379> hmget h1 name age
1 ) “richy”
2 ) “18”

5)获取所有字段与值 (hgetall [table] )

127.0.0.1:6379> hgetall h1
1 ) “name”
2 ) “richy”
3 ) “age”
4 ) “18”
5 ) “addr”
6 ) “guanzhou”

6)获取所有字段名 ( hkeys [table] )

127.0.0.1:6379> hkeys h1
1 ) “name”
2 ) “age”
3 ) “addr”

7)获取所有值 ( hvals [table] )

127.0.0.1:6379> hvals h2
1 ) “wa”
2 ) “17”
3 ) “guangzhou”

8)获取长度 ( hlen [table] )

127.0.0.1:6379> hlen h1
(integer) 3

9)删除值 ( hdel [table] [col1] [col2] )

127.0.0.1:6379> hdel h1 age name
(integer) 2

10)字段自增( hincrby [table] [col] [num] )

127.0.0.1:6379> hincrby h2 age 1
(integer) 18
127.0.0.1:6379> hincrby h2 age 1
(integer) 19
127.0.0.1:6379> hincrby h2 age 2
(integer) 21
127.0.0.1:6379> hincrby h2 age -2
(integer) 19

五:ZSET

1)新增 (zadd [set] [score] [member] )

127.0.0.1:6379> zadd z1 100 richy
(integer) 1
127.0.0.1:6379> zadd z1 90 wa
(integer) 1

2)获取成员数 ( zcard [member] )

127.0.0.1:6379> zcard z1
(integer) 2

3)获取区间成员数量 ( zcount [set] [start score] [end score])

127.0.0.1:6379> zcount z1 1 100
(integer) 2

4)返回指定区间成员 zrange[set] [num] [member]

127.0.0.1:6379> zrange z1 1 100
1 ) “richy”

5)自增 ( zrange [set ] [index start] [index end] )

127.0.0.1:6379> zrange z1 0 10
1 ) “wa”
2 ) “richy”

6)通过字典区间返回有序集合的成员 ( zrangebylex [set] [min] [max] )

127.0.0.1:6379> zrangebylex z1 - [wa # [ 表示 闭区间 ,( 表示开区间
1 ) “wa”
2 ) “richy”

7)通过分数区间返回有序集合的成员 ( zrangebyscore [set] [score start] [score end] )

127.0.0.1:6379> zrangebyscore z1 200 400
1 ) “rui”

8) 获取成员索引 zrank ( [set] [member] )

127.0.0.1:6379> zrank z1 richy
(integer) 1

9) 删除成员 ( zrem [set] [member] )

127.0.0.1:6379> zrem z1 rui
(integer) 1

10) 删除成员 ( zrem [set] [member] )

127.0.0.1:6379> zrem z1 rui
(integer) 1

11) 移除有序集合中给定的排名区间的所有成员 ( zremrangebyscore [set] [start score] [end score] )

先插入点数据先

127.0.0.1:6379> zadd z1 120 a 110 b 130 c 140 d
(integer) 4
127.0.0.1:6379> zcard z1
(integer) 6
127.0.0.1:6379> zrangebyscore z1 0 1000
1 ) “wa”
2 ) “b”
3 ) “a”
4 ) “richy”
5 ) “c”
6 ) “d”

测试

127.0.0.1:6379> zremrangebyscore z1 100 120
(integer) 3

12) 移除有序集合中给定的排名区间的所有成员 (zremrangerank [set] [star] [end])

127.0.0.1:6379> zadd z2 120 a 110 b 130 c 140 d
(integer) 4
127.0.0.1:6379> zremrangebyrank z2 0 1
(integer) 2

PS: 如果 [end] 是负数,即表示删除 排名在【end】之外的成员, 见以下示例

127.0.0.1:6379> zscan z1 0 # 列出所有元素
1 ) “0”
2 ) 1) “k5”
2) “6”
3) “k2”
4) “10”
5) “k3”
6) “10”
7) “k4”
8) “10”
9) “k1”
10 ) “99”
127.0.0.1:6379> zremrangebyrank z1 0 -4 #删除最后排名在 4之后(包括4)
(integer) 2
127.0.0.1:6379> zscan z1 0 #操作后结果
1 ) “0”
2 ) 1) “k3”
2 ) “10”
3 ) “k4”
4 ) “10”
5 ) “k1”
6 ) “99”

13) 获取指定排序的成员 ( zrevrange [set] [start index] [end index])

127.0.0.1:6379> zadd z3 120 a 110 b 130 c 140 d 50 f
(integer) 5
127.0.0.1:6379> zrevrange z3 0 10
1 ) “d”
2 ) “c”
3 ) “a”
4 ) “b”
5 ) “f”

总结

五种结构的常用操作都一 一试过。实际上每一种结构都有各自特定的使用场景,不同的结构对应的指令侧重点也不同。
STRING 侧重于字符的操作。
LIST 侧重于插入的顺序,使用起来更像是队列
SET 侧试重于集合的计算,交集,并集,差集
HASH 侧试重于 键值对 使用,可以当成二维表的一段记录来用。
ZSET 侧重于排序。

猜你喜欢

转载自blog.csdn.net/richyliu44/article/details/106886031
今日推荐