Redis支持的存储结构

存储结构

       redis支持的数据类型包括字符串、散列表、列表、集合、有序集合五种类型。

 

1、字符串:是redis中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据。一个字符串类型键允许存储的数据最大容量为512MB。

常用的命令:

   1).set/get:

 

127.0.0.1:6379[2]> set key hello
OK
127.0.0.1:6379[2]> get key
"hello"
127.0.0.1:6379[2]> set key "hello world"
OK
127.0.0.1:6379[2]> get key
"hello world"
127.0.0.1:6379[2]>

 注:如果字符串之间有空格,需要用双引号引起。

 

   2).append(在字符串的尾部追加字符串)

127.0.0.1:6379[2]> set key hello
OK
127.0.0.1:6379[2]> append key " world"
(integer) 11
127.0.0.1:6379[2]> get key
"hello world"
127.0.0.1:6379[2]>

 

   3).strlen key(获取键值的长度)   

127.0.0.1:6379[2]> get key
"hello world"
127.0.0.1:6379[2]> strlen key
(integer) 11
127.0.0.1:6379[2]>

 

   4).同时获得/设置多个键值 

127.0.0.1:6379[2]> mset key1 "hello" key2 "world" key3 "china"
OK
127.0.0.1:6379[2]> mget key1 key2 key3
1) "hello"
2) "world"
3) "china"
127.0.0.1:6379[2]>

 

2、散列类型:Redis是采用字典结构以键值对的形式存储数据的,而散列类型(hash)的键值也是一种字典结构,其存储了字段和字段值的映射。但字段值只能是字符串,不支持其它数据类型,即不能嵌套其它数据类型。

常用的命令:

1)赋值/取值(hset/hget、hmset/hmget、hgetall)

127.0.0.1:6379[2]> hset person name lisi
(integer) 1
127.0.0.1:6379[2]> hget person name
"lisi"

 

127.0.0.1:6379[2]> hmset person name lisi sex man birthday 2001-09-26
OK
127.0.0.1:6379[2]> hmget person name sex birthday
1) "lisi"
2) "man"
3) "2001-09-26"
127.0.0.1:6379[2]> hgetall person
1) "name"
2) "lisi"
3) "sex"
4) "man"
5) "birthday"
6) "2001-09-26"
127.0.0.1:6379[2]>

 

 2).判断字段是否存在

127.0.0.1:6379[2]> hexists person address
(integer) 0
127.0.0.1:6379[2]> hexists person sex
(integer) 1
127.0.0.1:6379[2]>

 3).判断当字段不存在时赋值,否则不做处理(hsetnx).

127.0.0.1:6379[2]> hexists person address
(integer) 0
127.0.0.1:6379[2]> hexists person sex
(integer) 1
127.0.0.1:6379[2]> hsetnx person address "北京市"
(integer) 1
127.0.0.1:6379[2]> hexists person address
(integer) 1
127.0.0.1:6379[2]>

 

3、列表类型:可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素或者获得列表的某一个片段。列表类型内部是使用双向链表实现的。

常用的命令:

1).获取/增加元素(lpop/lpush)

127.0.0.1:6379[2]> lpush lkey 1
(integer) 1
127.0.0.1:6379[2]> lpop lkey
"1"
127.0.0.1:6379[2]>

 2).一次设置多个元素(lpush key value1 valu2....)、获取指定key的指定范围的元素值(lrange key start end).

127.0.0.1:6379[2]> lpush lkey 1 2 3 4 5
(integer) 5
127.0.0.1:6379[2]> lrange lkey 0 3
1) "5"
2) "4"
3) "3"
4) "2"
127.0.0.1:6379[2]>

 3).获取/设置指定索引的元素值(lindex/lset).

127.0.0.1:6379[2]> lpush lkey1 1 2 3 4 5
(integer) 5
127.0.0.1:6379[2]> lrange lkey1 0 4
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379[2]> lindex lkey1 5
(nil)
127.0.0.1:6379[2]> lindex lkey1 4
"1"
127.0.0.1:6379[2]> lset lkey1 4 0
OK
127.0.0.1:6379[2]> lindex lkey1 4
"0"
127.0.0.1:6379[2]>

 

 4).向列表中插入元素(linsert key before|after pivot value).

127.0.0.1:6379[2]> linsert lkey1 after 5 6
(integer) 6
127.0.0.1:6379[2]> lrange lkey1 0 -1
1) "5"
2) "6"
3) "4"
4) "3"
5) "2"
6) "0"
127.0.0.1:6379[2]>

 

4、集合类型:集合类型在redis内部使用值为空的散列表(hash table)实现的,最方便的是多个集合类型键之间可以进行并集、交集和差集运算.

常用的命令:sadd、srem、smembers、sismember、sdiff、sinter、sunion。

1).增加(sadd)、删除(srem)、获取所有增加的元素(smembers)、判断指定元素是否存在(sismembers)。

127.0.0.1:6379[2]> sadd skey a b c d e
(integer) 5
127.0.0.1:6379[2]> smembers skey
1) "d"
2) "b"
3) "a"
4) "c"
5) "e"
127.0.0.1:6379[2]> srem skey a c
(integer) 2
127.0.0.1:6379[2]> smembers skey
1) "d"
2) "b"
3) "e"
127.0.0.1:6379[2]> sismember skey a
(integer) 0
127.0.0.1:6379[2]>

 

2).集合运算(sdiff、sinter、sunion).

 

127.0.0.1:6379[2]> sadd set1 a b c d
(integer) 4
127.0.0.1:6379[2]> sadd set2 c d e f g
(integer) 5
127.0.0.1:6379[2]> sdiff set1 set2
1) "b"
2) "a"
127.0.0.1:6379[2]> sdiff set2 set1
1) "f"
2) "g"
3) "e"
127.0.0.1:6379[2]> sinter set1 set2
1) "d"
2) "c"
127.0.0.1:6379[2]> sunion set1 set2
1) "d"
2) "a"
3) "c"
4) "b"
5) "f"
6) "g"
7) "e"
127.0.0.1:6379[2]>

 

5、有序集合类型:有序集合类型是使用散列表和跳跃表实现的,所以即使读取位于中间的部分数据速度也很快(时间复杂度为O(log(N)))。

 常用命令:

1).增加元素和获取元素的分数.

127.0.0.1:6379> zadd Tom 87 math 76 language 81 English
(integer) 3
127.0.0.1:6379> zscore Tom math
"87"
127.0.0.1:6379>

 

2).获取指定范围的元素.

 

127.0.0.1:6379> zadd Tom 87 math 76 language 81 English
(integer) 3
127.0.0.1:6379> zscore Tom math
"87"
127.0.0.1:6379> zrange Tom 0 2
1) "language"
2) "English"
3) "math"
127.0.0.1:6379> zrange Tom 0 2 withscores
1) "language"
2) "76"
3) "English"
4) "81"
5) "math"
6) "87"
127.0.0.1:6379>

 

 以上是对redis支持的五种数据类型的说明,以及常用的操作指令。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值