`

Redis之七种武器

 
阅读更多

长生剑、孔雀翎、碧玉刀、多情环、离别钩、霸王枪、拳头是古龙笔下的七种武器,而本文打算将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会发现并拒 绝执行。

 

本帖转自http://blog.nosqlfan.com/html/2942.html

 

分享到:
评论

相关推荐

    zabbix-redis-template:Zabbix的多实例Redis发现模板

    总的来说,"zabbix-redis-template"为Zabbix用户提供了监控多实例Redis的强大武器。它简化了监控配置,提高了运维效率,是保障Redis服务稳定运行不可或缺的一部分。通过对Redis关键性能指标的实时监控,我们可以预防...

    程序员必备的7种武器

    "程序员必备的7种武器"概括了程序员在工作中最常使用且至关重要的技能,下面将对这些武器进行深入解析。 1. **正则表达式(Regular Expressions)**:正则表达式是一种强大的文本处理工具,用于匹配、查找、替换或...

    tabard:laravel 中的平面文件博客在 40 分钟内建成,归咎于 laravel IRC

    如果你真的很在意,就让它成为 redis,因为 redis 就是这么酷。 等等,你说的“测试”是什么意思? 半夜匆匆写的,你真以为我想好了? 伙计,看看所有这些球体和扫描仪。 这个项目可能有资格作为武器,因为向 TDD ...

    基于PHP技术的法律服务信息技术平台设计与实现.pdf

    促进信息技术与法律的整合,充分发挥网络化信息技术的优势,逐步改变法律的服务方式,适应人们在网络化环境下求助方式的变革,为人们的生活提供可靠的法律环境和有力的法律武器。 在需求分析中,公民和企业对律师和...

    高性能高并发服务器架构.pdf

    - **七种缓存使用武器**:在高并发场景下,合理运用缓存可以极大提升系统响应速度。常见的缓存策略包括本地缓存、分布式缓存、反向代理缓存、数据库查询结果缓存等。选择合适的缓存工具和策略,如Memcached、Redis、...

    阿里45K高级Java岗,必备技能清单来了! (2).docx

    需要了解如何设计高可用、高性能、可扩展的系统,包括负载均衡、分布式Session管理、分布式缓存(如Redis、Memcached)以及数据库分库分表策略。同时,理解CAP理论和BASE原则对于处理分布式一致性问题至关重要。 ...

    Java架构面试专题寒冬(含答案)和学习笔记.zip

    8. **设计模式**:23种设计模式是软件设计的基石,了解并能灵活运用这些模式可以提高代码质量和可维护性。 9. **分布式系统**:CAP理论、BASE理论、分布式一致性(如Raft、Paxos协议)、分布式事务等,这些都是...

    GaussDB云数据库行业解决方案.pdf

    GaussDB云数据库行业解决方案是华为云推出的一种全面的数据库服务,旨在帮助企业加速数字化转型。华为云数据库在GaussDB的全新升级中,强调了其全场景覆盖、开放生态和安全可信的特点,以满足不同行业的多样需求。 ...

    mxd-scroll-V2-vue:冒险岛卷轴推算辅助网站(前分离分离+分布式服务)的前端工程

    Redis做部署 RabbitMQ将卷轴全选时的连续操作同步转换异步处理; MyBatis数据持久化; MySQL数据库 Dubbo + Zookeeper实现RPC调度和服务分割; 基于Docker容器部署; Nginx负载均衡。 ##网站

    SkyCrypt:Hypixel Skyblock统计信息网站

    基于LeaPhant的的SkyCrypt项目,可让您与其他玩家共享您的 SkyBlock个人资料,并快速概述自己的统计数据,技能,装甲,武器和配件。 网址: : 截屏 贡献 您可以自由地报告错误或为该项目做出贡献。 只需打开或,...

    程序员简历模板简历排版及简历具体需撰写内容

    你应该详细列出你掌握的技术栈,例如Web服务器管理(如Nginx、Apache)、数据库管理(MySQL的高可用性和优化、MongoDB副本集)、分布式系统(如HBase、Redis集群)、文件存储(FTP、FastDFS、HDFS)、安全措施(如...

    基于java的java缓存工具 SimpleCache.zip

    5. **扩展性**:SimpleCache 可能支持插件化,允许开发者自定义缓存实现,如基于 Redis 或 Memcached 的分布式缓存。 6. **API 设计**:一个好的缓存工具应该提供简洁的 API,让开发者能够方便地添加、获取、删除...

    JAVA基础课程PPT

    常用工具集"可能包括JUnit(单元测试)、Maven(项目管理)、Git(版本控制)等,这些工具是Java开发者的日常武器,熟练使用它们能提高开发效率并确保代码质量。 "7.必会框架与Spring全家桶"指Spring框架及其相关...

    yii 最新版

    - 内置了多种缓存策略,包括文件缓存、APC、Memcached 和 Redis 等,以提高网站的响应速度。 6. **身份验证和授权** - 使用 RBAC(Role-Based Access Control)系统,实现精细的权限控制。 - 用户认证和会话管理...

    IT-运维工程师的23个细节-进阶.doc.docx

    #### 运维技能武器库概览 运维工程师在处理日常工作中需要掌握多种技能与工具来确保系统的稳定运行与优化升级。以下将详细介绍文档中提到的部分核心工具和技术。 ### Bootstrapping(自动化部署) - **Kickstart*...

    JavaGuide:“ Java学习+面试指南”一部分覆盖了大部分Java程序员所需要的核心知识。准备Java面试,首选JavaGuide!

    转载须知:以下所有文章如非文首说明都都是我(Guide哥)的原创,转载在文首注明出处,如发现恶意抄袭/搬运,会动用法律武器维护自己的权益。让我们一起维护一个良好的技术创作环境! :fuel_pump:赞助 Java基础知识...

    JavaGuide:「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识。准备 Java 面试,首选 JavaGuide!

    转载须知 :以下所有文章如非文首说明皆为我(Guide哥)的原创,转载在文首注明出处,如发现恶意抄袭/搬运,会动用法律武器维护自己的权益。让我们一起维护一个良好的技术创作环境!:fuel_pump: Sponsor Java 基础 ...

Global site tag (gtag.js) - Google Analytics