设为首页 收藏本站
查看: 997|回复: 0

[经验分享] Redis支持的存储结构

[复制链接]

尚未签到

发表于 2016-12-19 11:36:29 | 显示全部楼层 |阅读模式
  存储结构
  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支持的五种数据类型的说明,以及常用的操作指令。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-316430-1-1.html 上篇帖子: redis持久化RDB和AOF 下篇帖子: spring 结合 Redis 例子,简单入门例子
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表