redis数据结构

redis数据结构

五种数据类型:

  • 字符串<String>
  • 哈希<Hash>
  • 字符串列表<List>
  • 字符串集合<Set>
  • 有序字符串集合<Sorted Set>

[redis数据结构--String]

存储String

  • 二进制安全的,存入和获取的数据相同
  • value最多可以容纳的数据长度时512M

存储String常用命令

赋值        set key value
取值        get key
删除        del key
数值增减    incr key | decr key | incrby key num | decrby key num
扩展命令    append key str(拼接字符串)

示例 

# 赋值
127.0.0.1:6379> set name zhangsan 
OK
# 取值
127.0.0.1:6379> get name 
"zhangsan"
# 取值后重新赋值
127.0.0.1:6379> getset name lisi 
"zhangsan"
127.0.0.1:6379> get name
"lisi"
# 删除
127.0.0.1:6379> del name 
(integer) 1
# 指定key的数值增加1,若key不存在,初始化为0,再做加操作
127.0.0.1:6379> incr num1 
(integer) 1
127.0.0.1:6379> get num1
"1"
# 指定key的值减少1,若key不存在,初始化为0,再做减操作
127.0.0.1:6379> decr num2 
(integer) -1
127.0.0.1:6379> get num2
"-1"
# 指定key的值增加指定的数值,若key不存在,初始化为0,再做加操作
127.0.0.1:6379> incrby num 5 
(integer) 6
# 指定key的值减少指定的数值,若key不存在,初始化为0,再做再做减操作
127.0.0.1:6379> decrby num 3
(integer) 3
# 拼接字符串,返回字符串的长度
127.0.0.1:6379> append num 5 
(integer) 2 
127.0.0.1:6379> get num
"35"

[redis数据结构--Hash]

存储Hash

  • String key和String value的map容器
  • 每一个Hash可以存储4294967295个键值对

示例

# 给指定key赋值一个键值对
127.0.0.1:6379> hset myhash username jack 
(integer) 1
127.0.0.1:6379> hset myhash age 18
(integer) 1
# 给指定key赋值多个键值对
127.0.0.1:6379> hmset myhash2 username jim age 20 
OK
# 获取myhash里username的值
127.0.0.1:6379> hget myhash username 
"jack"
# 获取myhash里多个键值对的值
127.0.0.1:6379> hmget myhash2 username age 
1) "jim"
2) "20"
# 获取myhash里所有属性以及属性的值
127.0.0.1:6379> hgetall myhash 
1) "username"
2) "jack"
3) "age"
4) "18"
# 删除myhash里的username和age属性
127.0.0.1:6379> hdel myhash username age 
(integer) 2
# 删除myhash2整体
127.0.0.1:6379> del myhash2 
(integer) 1
127.0.0.1:6379> hset hash age 18
(integer) 1
# hash里的age数值增加5
127.0.0.1:6379> hincrby hash age 5 
(integer) 23
# 判断hash中username是否存在,1为存在,0为不存在
127.0.0.1:6379> hexists hash username 
(integer) 0
# 获取hash内属性的数量
127.0.0.1:6379> hlen hash 
(integer) 1
#获取hash内所有的key
127.0.0.1:6379> hkeys hash 
1) "age"
# 获取hash内所有的值
127.0.0.1:6379> hvals hash 
1) "23"

[redis数据结构--List]

存储list

  • ArrayLis使用数组方式
  • LinkedList使用双向链接方式
  • 双向链表中增加数据
  • 双向链表中删除数据

示例

# 往链表左侧添加元素
127.0.0.1:6379> lpush list a b c 
(integer) 3
# 往链表右侧添加元素
127.0.0.1:6379> rpush list 1 2 3 
(integer) 6
# 查看list中所有的元素
127.0.0.1:6379> lrange list 0 -1 
1) "c"
2) "b"
3) "a"
4) "1"
5) "2"
6) "3"
# 弹出最左侧元素,弹出后该元素从list中移除
127.0.0.1:6379> lpop list 
"c"
# 弹出最右侧元素,弹出后该元素从list中移除
127.0.0.1:6379> rpop list 
"3"
127.0.0.1:6379> lrange list 0 -1
1) "b"
2) "a"
3) "1"
4) "2"
# 获取list中元素的个数
127.0.0.1:6379> llen list 
(integer) 4
# key存在才插入,往链表左侧添加元素
127.0.0.1:6379> lpushx list x 
(integer) 5
# key存在才插入,往链表右侧添加元素
127.0.0.1:6379> rpushx list y 
(integer) 6
# 从左往右删除2个3
127.0.0.1:6379> lrem list2 2 3 
(integer) 2
127.0.0.1:6379> lrange list2 0 -1
1) "2"
2) "1"
3) "2"
4) "1"
5) "3"
6) "2"
7) "1"
# 从右往左删除2个1
127.0.0.1:6379> lrem list2 -2 1 
(integer) 2
127.0.0.1:6379> lrange list2 0 -1
1) "2"
2) "1"
3) "2"
4) "3"
5) "2"
# 删除list2里所有的2
127.0.0.1:6379> lrem list2 0 2 
(integer) 3

其他命令

127.0.0.1:6379> lpush mylist a b c a b c
(integer) 6
127.0.0.1:6379> lrange mylist 0 -1
1) "c"
2) "b"
3) "a"
4) "c"
5) "b"
6) "a"
# 在mylist第三个角标处插入mmm
127.0.0.1:6379> lset mylist 3 mmm 
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "c"
2) "b"
3) "a"
4) "mmm"
5) "b"
6) "a"
# 在第一个b前插入11
127.0.0.1:6379> linsert mylist before b 11 
(integer) 7
# 在第一个b后插入22
127.0.0.1:6379> linsert mylist after b 22 
(integer) 8
127.0.0.1:6379> lrange mylist 0 -1
1) "c"
2) "11"
3) "b"
4) "22"
5) "a"
6) "mmm"
7) "b"
8) "a"
127.0.0.1:6379> lpush mylist2 1 2 3
(integer) 6
# 弹出mylist右侧元素,插入到mylist2左侧
127.0.0.1:6379> rpoplpush mylist mylist2 
"a"

[redis数据结构--Set]

存储Set

  • 和List类型不同的是,Set集合中不允许出现重复的元素
  • Set可包含的最大元素数量是4294967295

使用场景

  • 跟踪一些唯一性数据
  • 用于维护数据对象之间的关联关系

常用命令

添加/删除/元素

# 往set1中添加元素a,b,c
127.0.0.1:6379> sadd set1 a b c
(integer) 3
# 删除set1中的a,b元素
127.0.0.1:6379> srem set1 a b
(integer) 2

获得集合中的元素

# 获取set1中的元素
127.0.0.1:6379> smembers set1
1) "c"
# 判断是否为set1中的元素,1为是,0为否
127.0.0.1:6379> sismember set1 a
(integer) 0
127.0.0.1:6379> sismember set1 c
(integer) 1

集合中的差集运算

# 差集运算,与元素顺序有关
127.0.0.1:6379> sadd mya1 a b c
(integer) 3
127.0.0.1:6379> sadd myb1 a c 1 2
(integer) 4
127.0.0.1:6379> sdiff mya1 myb1
1) "b"
# 把差集运算所得集合存到 my1中
127.0.0.1:6379> sdiffstore my1 mya1 myb1
(integer) 1

集合中的交集运算

# 交集运算,返回两个集合都有的元素
127.0.0.1:6379> sadd mya2 a b c
(integer) 3
127.0.0.1:6379> sadd myb2 a c 1 2
(integer) 4
127.0.0.1:6379> sinter mya2 myb2
1) "a"
2) "c"
# 交集运算所得存到 my2中
127.0.0.1:6379> sinterstore my2 mya2 myb2
(integer) 2

集合中的并集运算

# 合拼集合
127.0.0.1:6379> sadd mya3 a b c
(integer) 3
127.0.0.1:6379> sadd myb3 a c 1 2
(integer) 4
127.0.0.1:6379> sunion mya3 myb3
1) "2"
2) "c"
3) "a"
4) "b"
5) "1"
# 并集运算所得存到 my3中
127.0.0.1:6379> sunionstore my3 mya3 myb3
(integer) 5

其他命令

127.0.0.1:6379> sadd myset a b c 1 2 3
(integer) 6
# 返回集合中元素的数量
127.0.0.1:6379> scard myset
(integer) 6
# 随机返回集合中某个元素
127.0.0.1:6379> srandmember myset
"2"

 

[redis数据结构--Sorted-Set]

存储Sorted-Set

  • Sorted-Set 和 Set的区别:Sorted Set中的每个元素都关联一个可重复的分数(score),这便是排序的依据。
  • Sorter-Set中的成员在集合中的位置是有序的

使用场景

  • 如大型在线游戏积分排行榜
  • 构建索引数据

常用命令

添加元素

# 70 80 90 是score
127.0.0.1:6379> zadd mysort 70 zhangsan 80 lisi 90 wangwu
(integer) 3
# 添加时,若元素已存在,则更新分数
127.0.0.1:6379> zadd mysort 100 zhangsan
(integer) 0

获得元素

# 获得zhangsan的分数
127.0.0.1:6379> zscore mysort zhangsan
"100"
# 获得集合中元素的数量
127.0.0.1:6379> zcard mysort
(integer) 3

删除元素

# 删除元素zhangsan
127.0.0.1:6379> zrem mysort zhangsan
(integer) 1

范围查询

127.0.0.1:6379> zadd mysort 85 jack 95 jim 100 rose
(integer) 3
# 范围查询,分数升序排列
127.0.0.1:6379> zrange mysort 0 -1
1) "lisi"
2) "jack"
3) "wangwu"
4) "jim"
5) "rose"
# 带分数范围查询,分数升序排列
127.0.0.1:6379> zrange mysort 0 -1 withscores
 1) "lisi"
 2) "80"
 3) "jack"
 4) "85"
 5) "wangwu"
 6) "90"
 7) "jim"
 8) "95"
 9) "rose"
10) "100"
# 带分数范围查询,分数降序排列
127.0.0.1:6379> zrevrange mysort 0 -1 withscores
 1) "rose"
 2) "100"
 3) "jim"
 4) "95"
 5) "wangwu"
 6) "90"
 7) "jack"
 8) "85"
 9) "lisi"
10) "80"
# 范围删除
127.0.0.1:6379> zremrangebyrank mysort 0 4
(integer) 5
127.0.0.1:6379> zadd mysort 80 zs 90 ls 100 ws
(integer) 3
# 分数范围删除
127.0.0.1:6379> zremrangebyscore mysort 80 100
(integer) 3

其他命令

127.0.0.1:6379> zadd mysort 70 zs 80 li 90 ww
(integer) 3
# 范围查询0到100分
127.0.0.1:6379> zrangebyscore mysort 0 100
1) "zs"
2) "li"
3) "ww"
# 带分数范围查询0到100分
127.0.0.1:6379> zrangebyscore mysort 0 100 withscores
1) "zs"
2) "70"
3) "li"
4) "80"
5) "ww"
6) "90"
# 带分数范围查询0到100分,角标范围为0到2
127.0.0.1:6379> zrangebyscore mysort 0 100 withscores limit 0 2
1) "zs"
2) "70"
3) "li"
4) "80"
# 指定成员li分数增加3
127.0.0.1:6379> zincrby mysort 3 li
"83"
# 返回集合中分数范围在80到90的成员个数
127.0.0.1:6379> zcount mysort 80 90
(integer) 2

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值