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

[经验分享] redis(二)-数据类型

[复制链接]

尚未签到

发表于 2016-12-19 08:52:08 | 显示全部楼层 |阅读模式
  参考文章:http://www.iyunv.net/article/56448.htm
  一、redis数据类型
  ·1.1 字符串-strings
  有人说,如果只使用redis中的字符串类型,且不使用redis的持久化功能,那么,redis就和memcache非常非常像了。这说明strins类型是一个很基础的数据类型,也是任何存储系统都必须必备的数据类型。字符串类型是二进制安全的。
  1、set
  创建string。注意:此命令默认会覆盖已存在key的值。
  用法:

         set JOAN DORA
set JOAN DORA nx  -->如果存在key为JOAN时,则会失败
set JOAN DORA xx  -- >成功
  2、incr
  如果value是数字类型(当然也是string的),可以使用此命令,进行加法操作。
  用法:

         set counter 100
incr counter   -->101
incrby counter 49  -->150
  在遇到数值操作时,redis会将字符串类型转换为数值。由于INCR等指令本身就具有原子操作的特性,所以我们完全可以利用redis的INCR、INCRBY、DECR、DECRBY等指令来实现原子计数的效果。假如,在某种场景下有三个客户端同时读取了mynum的值(值为2),然后对其同时进行了加1操作,那么,最后mynum的值一定是5。不少网站都利用redis的这个原子特性来实现业务上的统计计数需求。
  3、get
  取值,用法:

get JOAN -->DORA
  1.2 列表-lists
  rdis中的lists在底层实现并不是数组,而是链表,也就是对于一个具有上百万个元素的lists来说,在头部和尾部插入一个新元素,其时间复杂度是常数级别的。虽然lists有这样的优势,但同样尤其弊端,那就是,链表型lists的元素定位会比较慢,而数组型lists的元素定位就会快很多。
  lpush、rpush、lrange
  redis 的一种数据结构:双端列表。lpush是将alue放到列表的头部,rpush是将value放在列表的尾部。
  用法:

    rpush mylist a
rpush mylist b
lpush mylist first
lrange mylist 0 -1  -->0代表列表的第一个  -1代表列表的最后一个  -2 是倒数第二个
rpush mylist a b c d "JOANDORA"   --> 连续存放多个值
  应用场景:
  1、我们可以利用lists来实现一个消息队列,而且可以确保先后顺序,不必像Mysql那样还要通过order by来进行排序。
  2、利用lrange可以很方便的实现分页功能。
  3、在博客系统中,没篇博文的评论也可以存入一个单独的lists中。
  1.2.1 LTRIM 
  对一个列表进行修剪,让列表只保留制定区间的元素。例如:LTRIM 0 2:表示只保留list前三个元素,其他元素都删除。
  1.3 无序不重复集合 set
  redis中的集合是一种无序的集合集合相关的操作也很丰富,如添加删除已有元素,取交集、并集、差集等。
  用法: 

//向集合myset中加入一个新元素"one"
127.0.0.1:6379> sadd myset "one"
(integer) 1
127.0.0.1:6379> sadd myset "two"
(integer) 1
//列出集合myset中的所有元素
127.0.0.1:6379> smembers myset
1) "one"
2) "two"
//判断元素1是否在集合myset中,返回1表示存在
127.0.0.1:6379> sismember myset "one"
(integer) 1
//判断元素3是否在集合myset中,返回0表示不存在
127.0.0.1:6379> sismember myset "three"
(integer) 0
//新建一个新的集合yourset
127.0.0.1:6379> sadd yourset "1"
(integer) 1
127.0.0.1:6379> sadd yourset "2"
(integer) 1
127.0.0.1:6379> smembers yourset
2) "2"
//对两个集合求并集
127.0.0.1:6379> sunion myset yourset
1) "1"
2) "one"
3) "2"
4) "two"
  1.4 有序不重复集合 sorted set
  有序集合中的每个元素都关联一个序号(score),这便是排序的依据。很多时候,我们都将redis中的有序集合叫做zsets。这是因为在redis中,有序集合相关的操作指令都是以z开头,比如:zrange、zadd等。

     zadd 1 a  --> 1是排序
zrange  myset 0 -1 --> 查看集合元素
zrevrange myset 0 -1 -->  查看集合元素,反向
zrange myset 0 -1 withscores  --> 打印元素的时候,间隔打印出序号
  1.5 哈希-hashes
  哈希是从redis-2.0版本之后才有的数据结构。hashes存的是字符串和字符串值之间的映射,比如一个用户要存储其全名、姓氏、年龄等等,就很适用hashes。

        hmset key field value  --> 将多个field-vaue存放到key中
hmset webset google www.google.com baidu www.baidu.com
hmget webset google
hget webset yahoo --> 能查,不过结果为空
hincrby user age 10  --> 给hash中age加10
  二、其他操作命令
  2.1、mset、mget
  可同时完成多个key-value存取值
  用法:

     mset a 10 b 20 c 30
mget a b c
  2.2、del
  删除key-value
  用法:del mylist
  2.3、pop
  取值,和push类似,也是分左和右。
  用法:rpop mylist
  lpop mylist

运维网声明 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-316191-1-1.html 上篇帖子: 谈谈Memcached与Redis(三) 下篇帖子: redis(六)-主从配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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