长生剑、孔雀翎、碧玉刀、多情环、离别钩、霸王枪、拳头是古龙笔下的七种武器,而本文打算将Redis的几种使用方式 Strings、Hashs、Lists、Sets、Sorted Sets、Pub/Sub、Transactions 也比作七种武器,为大家讲解Redis的七种特性,并列举其适合的应用场景。

  武器一:Strings

  Strings 数据结构是简单的key-value类型,value其实不仅是String,也可以是数字。使用Strings类型,你可以完全实现目前 Memcached 的功能,并且效率更高。还可以享受Redis的定时持久化,操作日志及 Replication等功能。除了提供与 Memcached 一样的get、set、incr、decr 等操作外,Redis还提供了下面一些操作:

  ·获取字符串长度

  ·往字符串append内容

  ·设置和获取字符串的某一段内容

  ·设置及获取字符串的某一位(bit)

  ·批量设置一系列字符串的内容

  武器二:Hashs

  在Memcached中,我们经常将一些结构化的信息打包成hashmap,在客户端序列化后存储为一个字符串的值,比如用户的昵称、年龄、性别、积分等,这时候在需要修改其中某一项时,通常需要将所有值取出反序列化后,修改某一项的值,再序列化存储回去。这样不仅增大了开销,也不适用于一些可能并发操作的场合(比如两个并发的操作都需要修改积分)。而Redis的Hash结构可以使你像在数据库中Update一个属性一样只修改某一项属性值。

  武器三:Lists

  Lists 就是链表,相信略有数据结构知识的人都应该能理解其结构。使用Lists结构,我们可以轻松地实现最新消息排行等功能。Lists的另一个应用就是消息队列,可以利用Lists的PUSH操作,将任务存在Lists中,然后工作线程再用POP操作将任务取出进行执行。Redis还提供了操作Lists中某一段的api,你可以直接查询,删除Lists中某一段的元素。

  武器四:Sets

  Sets 就是一个集合,集合的概念就是一堆不重复值的组合。利用Redis提供的Sets数据结构,可以存储一些集合性的数据,比如在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。Redis还为集合提供了求交集、并集、差集等操作,可以非常方便的实现如共同关注、共同喜好、二度好友等功能,对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存集到一个新的集合中。

  武器五:Sorted Sets

  和Sets相比,Sorted Sets增加了一个权重参数score,使得集合中的元素能够按score进行有序排列,比如一个存储全班同学成绩的Sorted Sets,其集合value可以是同学的学号,而score就可以是其考试得分,这样在数据插入集合的时候,就已经进行了天然的排序。另外还可以用Sorted Sets来做带权重的队列,比如普通消息的score为1,重要消息的score为2,然后工作线程可以选择按score的倒序来获取工作任务。让重要的任务优先执行。

  武器六:Pub/Sub

  Pub/Sub 从字面上理解就是发布(Publish)与订阅(Subscribe),在Redis中,你可以设定对某一个key值进行消息发布及消息订阅,当一个key值上进行了消息发布后,所有订阅它的客户端都会收到相应的消息。这一功能最明显的用法就是用作实时消息系统,比如普通的即时聊天,群聊等功能。

  武器七:Transactions

  谁说NoSQL都不支持事务,虽然Redis的Transactions提供的并不是严格的ACID的事务(比如一串用EXEC提交执行的命令,在执行中服务器宕机,那么会有一部分命令执行了,剩下的没执行),但是这个Transactions还是提供了基本的命令打包执行的功能(在服务器不出问题的情况下,可以保证一连串的命令是顺序在一起执行的,中间有会有其它客户端命令插进来执行)。Redis还提供了一个Watch功能,你可以对一个key进行Watch,然后再执行Transactions,在这过程中,如果这个Watched的值进行了修改,那么这个Transactions会发现并拒绝执行。

转载于:https://blog.51cto.com/wws5201985/761565

Redis的七种武器及其适合的应用场景相关推荐

  1. redis的七种数据结构

     [IT168 技术]长生剑.孔雀翎.碧玉刀.多情环.离别钩.霸王枪.拳头是古龙笔下的 七种武器,而本文打算将 Redis的几种使用方式 Strings.Hashs.Lists.Sets.Sort ...

  2. 旧文重发:程序员的七种武器

    这篇文章发表在<程序员>杂志2007.03期的专辑"程序员的武器大家谈"中. <程序员>:请谈谈您所定位的优秀程序员应该有哪些技能?您是怎样理解程序员七种武 ...

  3. 谈谈UCloud保障数据安全的七种“武器”

    当前,数据安全受到多方面的威胁.有来自系统软硬件的非人为故障,有运维工程师的误操作,甚至是黑客或内部人员的恶意删除.2017年1月31日,全球最大的代码托管服务平台Gitlab由于工程师的误操作,删除 ...

  4. python枪械_Python的七种武器

    君子生非异也,善假于物也. "物"能够延展英雄的能力.它是吕布的赤兔马,杨过的玄铁重剑,CS中的沙漠之鹰,曹操传中的凤凰羽衣."物"也可用以治愈英雄,例如张无忌 ...

  5. GIS就业参考系列之技术篇——七种武器

    题记 从2007--2017,职场中第一个十年即将完成.十年足以摧毁一个人的样貌:十年可以见证一个时代的发展:十年你从匆匆那年转变为而立之年:不知道从毕业一直还在从事本专业的人有多少,不知道这是一种幸 ...

  6. 5G网络切片的七种武器(一)

    | 文章版权所有,未经授权请勿转载或使用 广为人知的,5G面向万物互联,定义了增强移动宽带eMBB.超高可靠低时延uRLLC.海量机器类通信mMTC三大类应用场景,使得5G提供的能力集更能适合垂直行业 ...

  7. 转载:应用软件系统架构设计的“七种武器”

    本文章转载自:应用软件系统架构设计的"七种武器"(http://space.itpub.net/12639375/viewspace-167369) 在此向原作者本人表示感谢. ( ...

  8. 数据库性能诊断的七种武器-图片参考附件

    数据库性能诊断的七种武器 主要议题 •        性能优化面临的挑战 •        调优工具的变迁 •        诊断工具中的七种武器 •        Q & A 性能优化面临的 ...

  9. Linux操作系统中的七种武器

    Linux是一套免费使用和自由传播的类UNIX操作系统,主要用于基于Intel x86系列CPU的计算机上.Linux系统是由全世界各地的成千上万的程序员设计和实现的,其目的是建立不受任何商品化软件的 ...

最新文章

  1. 模板元编程时的参数推导类型输出
  2. iOS11开发教程(二十三)iOS11应用视图实现按钮的响应(3)
  3. SSAS Tabular模式中关系设置不支持直接设置多对多?
  4. 速冻果蔬青麦源品牌-农业大健康·李喜贵:谋定功能性技术
  5. 奇葩说之RTC的那些事
  6. Mac Book Pro不能识别移动硬盘
  7. android开发我的新浪微博客户端-用户授权页面功能篇(3.2)
  8. Hibernate使用的一些细节注意事项
  9. for myself
  10. matlab中结构体使用方法
  11. php 模块不存在,模块不存在:index.php?
  12. 图片URL转换为base64的两种方式
  13. OverFeat笔记
  14. 经纬度与大地坐标相互转换
  15. 域用户本地管理员密码破解
  16. RuntimeError: Trying to backward through the graph a second time (or directly access saved variable
  17. java.lang.NoClassDefFoundError: Could not initialize class com.cyj.util.Jdbc
  18. 解决问题:Something‘s wrong--perhaps a missing \item. \end{thebibliography}
  19. Hyper-V 2016 系列教程33 学习型服务器推荐
  20. 如何同步化本地svn库到googlecode

热门文章

  1. Python外(1)--try-expect
  2. redis 缓存过期默认时间_redis缓存过期机制
  3. c++面向对象高级编程 学习十 function-like classes
  4. 并发不是并行,它更好!
  5. 信息图:程序员/开发人员实际在用哪些工具
  6. 软件开发者面试百问答案,老紫竹研究室出品(已经有64个)
  7. Django:学习笔记(2)——创建第一个应用
  8. robotframework基础学习(8)
  9. PHP超全局变量$_SERVER
  10. GLSL/C++ 实现滤镜效果