Redis的数据结构

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Ray0812/article/details/81945998

 

  • 五种数据类型

  1. 字符串(String)
  2. 字符串列表(list)
  3. 哈希(hash)
  4. 字符串集合(set)
  5. 有序字符串集合(sorted set)
  • 存储String

常用命令:

  •  赋值 set "key"  "value" 例:set name raychen
  •  取值 get "key" l  例:get name
  •  删除del "key" 例:del name
  •  数值增加  incr  n 默认为0 get n 得到1 
  • 数值减少  decr 
  • 追加字符串  append "key" "value"  例: append name test
  • 存储Hash

String key和String Value的Map容器  每一个Hash可以存储4294967295个键值对  

存储Hash常用命令:

  • 赋值、  取值

单个赋值 hset "Mapname"  "key"  " value"

127.0.0.1:6379> hset my name ray
(integer) 1
127.0.0.1:6379> hget my name
"ray"
127.0.0.1:6379>

多个一起赋值 hset "MapName" "key1"  "value1" "key2" "value2"

127.0.0.1:6379> hmset my2 age 27 hig 170
OK
127.0.0.1:6379> hmget my2 age
1) "27"
127.0.0.1:6379> hmget my2 hig
1) "170"
127.0.0.1:6379> hmget my2 age hig
1) "27"
2) "170"
127.0.0.1:6379> hgetall my2
1) "age"
2) "27"
3) "hig"
4) "170"
5) "sex"
6) "male"
7) "addr"
8) "shenzhen"
127.0.0.1:6379>


  • 删除

可以一次删除一个或者多个

127.0.0.1:6379> hdel my2 age  hig
(integer) 2
127.0.0.1:6379> hgetall my2
1) "sex"
2) "male"
3) "addr"
4) "shenzhen"
127.0.0.1:6379>
  • 增加数字
127.0.0.1:6379> hset my number1 10
(integer) 1
127.0.0.1:6379> hget my number1
"10"
127.0.0.1:6379> hincrby my number1 10
(integer) 20
127.0.0.1:6379> hget my number1
"20"
127.0.0.1:6379>
  • 判断字段是否存在(1表示存在 0表示不存在)
127.0.0.1:6379> HEXISTS my number1
(integer) 1
127.0.0.1:6379> HEXISTS my number2
(integer) 0
127.0.0.1:6379>
  • 获取hash属性个数(hlen)
127.0.0.1:6379> hgetall my
1) "name"
2) "ray"
3) "number1"
4) "20"
5) "a1"
6) "a1str"
7) "a2"
8) "a2str"
127.0.0.1:6379> hlen my
(integer) 4
127.0.0.1:6379>
  • 获取hash所有属性名称
127.0.0.1:6379> hvals my
1) "ray"
2) "20"
3) "a1str"
4) "a2str"
127.0.0.1:6379> hvals my2
1) "male"
2) "shenzhen"
127.0.0.1:6379>
  • 存储list

添加list 

lpush key values  从左端开始添加、rpush key values  从右端开始添加;

lrange 获取指定方位的集合元素 lrange key beginIndex(0开始)  endIndex(-1结束) 

127.0.0.1:6379> lpush l0 1 2 3 4 5
(integer) 5
127.0.0.1:6379> lrange l0 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> rpush l1 a b c d e
(integer) 5
127.0.0.1:6379> lrange l1 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
127.0.0.1:6379>

lpop 左侧弹出集合元素、rpop 右侧弹出集合元素;

127.0.0.1:6379> lrange l1 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
127.0.0.1:6379> lpop l1
"a"
127.0.0.1:6379> lrange l1 0 -1
1) "b"
2) "c"
3) "d"
4) "e"
127.0.0.1:6379> rpop l1
"e"
127.0.0.1:6379> lrange l1 0 -1
1) "b"
2) "c"
3) "d"
127.0.0.1:6379>

lpushx 集合头部插入元素、rpushx 集合尾部插入元素;llen 查看元素个数

127.0.0.1:6379> lrange l1 0 -1
1) "b"
2) "c"
3) "d"
127.0.0.1:6379> lpushx l1 xxxx
(integer) 4
127.0.0.1:6379> lrange l1 0 -1
1) "xxxx"
2) "b"
3) "c"
4) "d"
127.0.0.1:6379> rpushx l1 yyyy
(integer) 5
127.0.0.1:6379> lrange l1 0 -1
1) "xxxx"
2) "b"
3) "c"
4) "d"
5) "yyyy"
127.0.0.1:6379> llen l1
(integer) 5

lrem 从指定方向删除指定个数的指定元素(左边从0 开始,右边从-1开始) lrem key count value

  • count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。
  • count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。
  • count = 0 : 移除表中所有与 value 相等的值
127.0.0.1:6379> lrange l1 0 -1
 1) "xxxx"
 2) "c"
 3) "b"
 4) "a"
 5) "a"
 6) "xxxx"
 7) "b"
 8) "c"
 9) "d"
10) "yyyy"
127.0.0.1:6379> lrem l1 2 a
(integer) 2
127.0.0.1:6379> lrange l1 0 -1
1) "xxxx"
2) "c"
3) "b"
4) "xxxx"
5) "b"
6) "c"
7) "d"
8) "yyyy"
127.0.0.1:6379> lrem l1 -1 xxxx
(integer) 1
127.0.0.1:6379> lrange l1 0 -1
1) "xxxx"
2) "c"
3) "b"
4) "b"
5) "c"
6) "d"
7) "yyyy"
127.0.0.1:6379> lrem l1 0 b
(integer) 2
127.0.0.1:6379> lrange l1 0 -1
1) "xxxx"
2) "c"
3) "c"
4) "d"
5) "yyyy"

lset 设置集合指定索引的值 lset key index value   

127.0.0.1:6379> lrange l1 0 -1
1) "xxxx"
2) "c"
3) "c"
4) "d"
5) "yyyy"
127.0.0.1:6379> lset l1 2 a
OK
127.0.0.1:6379> lrange l1 0 -1
1) "xxxx"
2) "c"
3) "a"
4) "d"
5) "yyyy"
127.0.0.1:6379>

linsert 在集合里插入指定元素 linsert key BEFORE|AFTER pivot value

127.0.0.1:6379> lrange l1 0 -1
1) "xxxx"
2) "c"
3) "a"
4) "d"
5) "yyyy"
127.0.0.1:6379> linsert l1 before a aaaaaa
(integer) 6
127.0.0.1:6379> lrange l1 0 -1
1) "xxxx"
2) "c"
3) "aaaaaa"
4) "a"
5) "d"
6) "yyyy"
127.0.0.1:6379> linsert l1 after d dddddddd
(integer) 7
127.0.0.1:6379> lrange l1 0 -1
1) "xxxx"
2) "c"
3) "aaaaaa"
4) "a"
5) "d"
6) "dddddddd"
7) "yyyy"
127.0.0.1:6379>

rpoplpush 把A集合尾部元素弹出并插入到B集合头部

127.0.0.1:6379> lrange l4 0 -1
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> lrange l3 0 -1
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> RPOPLPUSH l3 l4
"c"
127.0.0.1:6379> lrange l4 0 -1
1) "c"
2) "1"
3) "2"
4) "3"
127.0.0.1:6379> lrange l3 0 -1
1) "a"
2) "b"
127.0.0.1:6379>
  • 存储Set

 和List类型不同的是,Set集合中无序且不重复的元素、Set可包含的最大元素数量是4294967295

添加元素 sadd key members 、删除元素srem key member、查看元素 smembers key 、

判断集合中是否存在某个元素 返回1 表示存在 返回0表示不存在 sismember key member

127.0.0.1:6379> sadd set2 a1 a2 a3 a4
(integer) 4
127.0.0.1:6379> smembers set2
1) "a4"
2) "a1"
3) "a3"
4) "a2"
127.0.0.1:6379> srem set2 a3
(integer) 1
127.0.0.1:6379> smembers set2
1) "a4"
2) "a1"
3) "a2"
127.0.0.1:6379> sismember set2 a2
(integer) 1
127.0.0.1:6379> sismember set2 a10
(integer) 0
127.0.0.1:6379>

集合中的差集运算 sdiff key1 key2  ;

集合中的交集运算 sinter key1 key2;

集合中的并集元算sunion key1 key2

127.0.0.1:6379> sadd set3 a b c d
(integer) 4
127.0.0.1:6379> sadd set4 aj a sk s c
(integer) 5
127.0.0.1:6379> sdiff set3 set4
1) "d"
2) "b"
127.0.0.1:6379> sdiff set4 set3
1) "s"
2) "aj"
3) "sk"
127.0.0.1:6379> sinter set3 set4
1) "c"
2) "a"
127.0.0.1:6379> sunion set3 set4
1) "d"
2) "a"
3) "s"
4) "aj"
5) "c"
6) "sk"
7) "b"
127.0.0.1:6379>

sunionstore把并集结果存储到新集合中;

sinterstore 把交集结果存储到新集合中;

scard计算元素总数;

sdiffstore 把差集结果存储到新集合中;

srandmember 随机取一个元素;

  • 存储Sorted-Set

Sorted-Set中的成员在集合中的位置是有序的

添加元素 zadd key score member、查看元素 zrange key index1 index2、查看评分 zscore key member

127.0.0.1:6379> zadd sort1 1 a 2 b 3 c
(integer) 3
127.0.0.1:6379> zrange sort1 0 -1
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> zscore sort1 a
"1"

添加相同的元素时候  评分被覆盖

127.0.0.1:6379> zadd sort1 9 a
(integer) 0
127.0.0.1:6379> zscore sort1 a
"9"

删除元素 zrem key members...

127.0.0.1:6379> zrange sort1 0 -1
1) "a"
2) "b"
3) "c"
4) "e"
5) "f"
127.0.0.1:6379> zrem sort1 a c
(integer) 2
127.0.0.1:6379> zrange sort1 0 -1
1) "b"
2) "e"
3) "f"
127.0.0.1:6379>

查询元素个数 zcard key  查询元素及评分 zrange key index1 index2 withscore

127.0.0.1:6379> zcard sort1
(integer) 3
127.0.0.1:6379> zrange sort1 0 -1 withscore
(error) ERR syntax error
127.0.0.1:6379> zrange sort1 0 -1 withscores
1) "b"
2) "10"
3) "e"
4) "12"
5) "f"
6) "13"
127.0.0.1:6379>

zrevrange 降序排列

127.0.0.1:6379> zrevrange sort1 0 -1 withscores
 1) "m"
 2) "25"
 3) "l"
 4) "23"
 5) "f"
 6) "13"
 7) "e"
 8) "12"
 9) "b"
10) "10"
11) "k"
12) "1"
127.0.0.1:6379>

zremrangebyrank 根据排名来删除元素  

127.0.0.1:6379> zremrangebyrank sort1 0 2
(integer) 3
127.0.0.1:6379> zrevrange sort1 0 -1 withscores
1) "m"
2) "25"
3) "l"
4) "23"
5) "f"
6) "13"

zremrangebyscore 根据具体评分范围来删除元素

zrangebyscore 根据评分范围来查找元素

zincrby 给指定元素加分

zcount 查找指定评分范围的元素个数

127.0.0.1:6379> zrevrange sort1 0 -1 withscores
 1) "w"
 2) "50"
 3) "z"
 4) "46"
 5) "y"
 6) "45"
 7) "x"
 8) "44"
 9) "m"
10) "25"
11) "l"
12) "23"
13) "f"
14) "13"
127.0.0.1:6379> zremrangebyscore sort1 40 45
(integer) 2
127.0.0.1:6379> zrevrange sort1 0 -1 withscores
 1) "w"
 2) "50"
 3) "z"
 4) "46"
 5) "m"
 6) "25"
 7) "l"
 8) "23"
 9) "f"
10) "13"
127.0.0.1:6379> zrangebyscore sort1 18 23 withscores
1) "l"
2) "23"
127.0.0.1:6379> zincrby sort1 10 w
"60"
127.0.0.1:6379> zcount sort1 10 60
(integer) 5
127.0.0.1:6379>

猜你喜欢

转载自blog.csdn.net/Ray0812/article/details/81945998