redis文档(redisdoc)
本篇文章给大家谈谈redis文档,以及redisdoc对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
Spring Data Redis 官方中文文档
Spring Data Redis 官方中文文档 v2.5.5
更多Spring 官方文档森运森告尽此春梁在 geekdoc.top
[img]真正的 Redis 分布式锁,就该是这样实现的
众所周知,redis 分布式锁使用 SET 指令可以实现,但是仅仅使用该命令就行了吗?是否还需要考虑 CAP 理论。
要是有上面说的那么简单就好喽,我们平时在开发中用到的分布式锁方案可能比较简单,这个取决于业务的复杂程度以及并发量。
下面我们来说说在高并发场景中,该如何正确使用分布式锁。
在正式讲解分布式锁之前,先来看下将要围绕展开来讲的几个问题:
在同一时刻,只能有一个线程去读写一个【共享资源】,也就是高并发的场景下,通常为了保证数据的正确,需要控制同一时刻只允许一个线程访问。
此时就需要使用分布式锁了。
简而言之,分布式锁就是用来控制同一时刻,只有一个线程可以访问被保护的资源。
可信肆以使用 SETNX key value 命令实现互斥的特性。
解释下:如果 key 不存在,则设置 value 给这个 key ,否则啥都不做。
该命令的返回值有如下两种情况:
举例如下:
成功的情况:
SETNX lock:101 1 (integer) 1 # 获取 101 锁 成功
失败的情况:
SETNX lock:101 2 (integer) 0 # 后面申请锁 获取失败
可见,成功的就可以开始使用「共享资源」了。
使用结束后,要及时释放锁,给后面申请获得资源的机会。
释放锁比较简单,使用 DEL 命令删除这个 key 就可以了。如下:
DEL lock:101 (integer) 1
分布式锁简单使用方案如下:
这看起来不是挺简单的吗,能有什么问题?往下听我分析。
首先该方案存在一个锁无法被释放的问题,场景如下:
可见,这个锁就会一直被占用,导致其它客户端也拿不到这个锁了。
设置举例如下:
SETNX lock:101 1 // 获取锁 (integer) 1
EXPIRE lock:101 60 // 60s 过期删除 (integer) 1
可见,60 秒后后该锁就好释放掉,其他客户就可以申请使用察凳了。
由上面举例可知: 加锁 和 设置过期时间 是两个操作命令,并不是原子操作。
试想一下,可能存在这么个情况:
比如执行第一条命了成功,第二条命令还没来得及执行就出现了异常,导致设置 「 过期时间」失败,这样锁也是无法释放。
SET keyName value NX PX 30000
这样一看,似乎没啥毛病。不,仔细一看,写的还是不够严谨。想下,有没可能释放的不是自己加的锁。
思考中……
说下什么场景下, 释放的锁不是自己的 :
所以,有个关键点需要注意的是:只能释放自己申请的锁。
总之,解铃还须系铃人
伪代码如下:
// 判断 value 与 锁的唯一标识
此时,我们可以考虑通过 Lua 脚本来实现,这样判断和删除的过滑没轿程就是原子操作了。
// 获取锁的 value 值与 ARGV[1] 比较,匹配成功则执行 del
使用上面的脚本,为每个锁分配一个随机字符串“签名”,只有当删除锁的客户端的“签名”与锁的 value 匹配的时候,才会去删除它。
遇到问题不要慌,先从官方文档入手:redis.io/topics/dist…
到目前为止,以上修改后(优化后)的方案算相比较完善的了,业界大部分使用的也都是该方案。
当然这个锁的过期时间不能瞎写,通常是根据多次测试后的结果来做选择,比如压测多轮之后,平均执行时间在 300 ms。
那么我们的锁 过期时间就应该放大到平均执行时间的 3~4 倍。
有些小伙伴可能会问:为啥是放大 3~4 倍 呢 ?
这叫凡事留一手:考虑到锁的操作逻辑中如果有网络 IO 操作等,线上的网络不会总是稳定的,此时需要留点时间来缓冲。
加锁的时候设置一个过期时间,同时客户端开启一个「守护线程」,定时去检测这个锁的失效时间。
如果快要过期,但是业务逻辑还没执行完成,自动对这个锁进行续期,重新设置过期时间。
可以先谷歌一下,相信谷歌大哥会告诉你有这么一个库把这些工作都封装好了,你只管用就是了,它叫 Redisson 。
在使用分布式锁的时候,其实就是采用了「自动续期」的方案来避免锁过期,这个守护线程我们一般也把它叫做「看门狗」线程。
这个方案可以说很 OK 了,能想到这些的优化点已经击败一大批程序猿了。
对于追求极致的程序员来说,你们可能会考虑到:
这里就不展开讨论了。有兴趣的可以在评论区一起讨论交流哈。
《Redis设计与实现》pdf下载在线阅读,求百度网盘云资源
《Redis设计与实现》(黄健宏)电子书网盘下载免费在线阅读
资源链接:
链接:
密码:g1k5
书名:Redis设计与实现
作者:黄健宏
豆瓣评分:8.6
出版社:机械工业出版社
出版年份:2014-6
页数:388
内容简介:档渗圆
【官方网站】
本书的官方网站 提供了书本试读、相关源码下载和勘误回报等服务,欢迎读者浏览和使用。
【编辑推荐】
系统而全面地描述了 Redis 内部运行机制
图示丰富,描述清晰,并给出大量参考信息,是NoSQL数据库开发人员案头必备
包括大部分Redis单机特征,以及所有多机特性
【读者评价】
这本书描述的知识点很丰富,覆盖很全,里面提到特性较多,有不少我们也没用过 :) 每个命令内部的机制的介绍很不错,很多估计也是首次有详细文档介绍。
——杨卫华(@TimYang)新浪微博技术总监
近几年Redis以其高性能、高灵活性的优点,变得越来越流行。但很多人在使用Redis时,仅行塌仅还是停留在比较表层的功能性认识,缺乏对内部机制原理的深入理解。本书是huangz同学长期对Redis源码的阅读心得结晶,书中对Redis的各个方面都进行了详细且深入的讲解,将复杂的原理用最简单的方式为大家解构和讲解,强烈推荐给每一位Redis的使用者阅读。
—— iammutex,NoSQLFan站长,乐视网技术经理
Redis 是近些年来特别火爆的 NoSQL 之一。纵观中外各种书籍还没有一本能对 Redis 内部进行深入剖析,《Redis 设计与实现》可谓开此先河。常和作者在网上交流,知道作者为这本书付出了大量的心血。这本书行文流畅,思路清晰,详细地介绍了 Redis 源码的方方面面。无论是想学习 NoSQL、网络编程的初学者,还是源码控的进阶者,本书都会有很大的帮助。
—— 阮若夷,支付宝高级专家
【内容简介】
本书全面而完整地讲解了Redis的内部机制与实现方式,对Redis的大多数单机功能以及所有多机功能的实现原理进行了介绍,展示了这些功能的核心数据结构以及关键的算法思想,图示丰富,描述清晰,并给出大量参考信息。通过阅读本书,读者可以快速、有效地了解Redis的内部构造以及运作机制,更好、更高效地使用Redis。
本书主要分为四大部分。第一部分“数据结构与对象”介绍了Redis中的各种对象及其数据结构,并说明这些数据结构如何影响对象的功能和性能。第二部分“单机数据库的实现”对Redis实现单机数据库的方法进行了介绍,包括数据库、RDB持久化、AOF持久化、事件等。第三部分“多机数据库的实现”对Redis的Sentinel、复制、集群三个多机功能进行了介绍。第四部分“独立功能的实现”对Redis中各个相对独立的功能模块进行了介绍,涉及发布与订阅、事务、Lua脚本、排序、二进制位数组、慢查询日志、监视器等。本书作者专门维护了网站,提供带有详细注释的Redis源代码,以及本书相关的更新内容。
作者简介:
黄健宏 软件开发者,他喜欢函数式编程,热爱开源喊尺软件。出于对数据库的强烈兴趣,他开始阅读和分析 Redis 源代码,并对 Redis 2.6 和 Redis 3.0 的源代码进行了详细注释。他翻译并维护着 Redis 中文文档网站 .com ,编写 了 OORedis 库。除此之外,他还是《Redis in Action》一书的译者。
作者的豆瓣主页:douban.com/people/i_m_huangz/
关于redis文档和redisdoc的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。