Redis 中的分布式锁如何使用 分布式锁的使用场景 使用 Redis 来实现分布式锁 使用 set key value px milliseconds nx 实现 SETNX+Lua 实现 使用 Redlock 实现分布式锁 锁的续租 看看 SETEX 的源码 为什么 Redis 可以用来做分布式锁 分布式锁如何选择 总结 参考 Redis 中的分布式锁如何使用 分布式锁的使用场景 为了保证我们线上服务的并发性和安全性,目前我们的服务一般抛弃了单体应用,采用的都是扩展性很强的分布式架构. 对于…
Redis 如何应对并发访问 Redis 中处理并发的方案 原子性 Redis 的编程模型 Unix 中的 I/O 模型 thread-based architecture(基于线程的架构) event-driven architecture(事件驱动模型) Reactor 模式 Proactor 模式 为什么 Redis 选择单线程 事件驱动框架对事件的捕获分发 客户端连接应答 命令的接收 命令的回复 Redis 多IO线程 多 IO 线程的初始化 命令的接收 命令的回复 原子性的单命令 总结…
Redis 如何应对并发访问 使用 Lua 脚本 Redis 中如何使用 Lua 脚本 EVAL EVALSHA SCRIPT 命令 SCRIPT LOAD SCRIPT EXISTS SCRIPT FLUSH SCRIPT KILL SCRIPT DEBUG 为什么 Redis 中的 Lua 脚本的执行是原子性的 Redis 中 Lua 脚本的使用 总结 参考 Redis 如何应对并发访问 上个文章中,我们分析了Redis 中命令的执行是单线程的,虽然 Redis6.0 版本之后,引入了 I/…
多线程查询数据,将结果存入到redis中,最后批量从redis中取数据批量插入数据库中 package com.xxx.xx.reve.service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.E…
目录 前言 1. RDB 持久化 1.1 RDB 文件的创建与载入 1.2 自动间隔性保存 1.2.1 设置保存条件 1.2.2 dirty 计数器和 lastsave 属性 1.2.3 检查保存条件是否满足 1.3 RDB 文件 1.3.1 RDB 的文件结构 1.3.2 database 的文件结构 1.3.3 key_value_pairs 的文件结构 1.3.4 value 的编码 1.4 RDB 文件的示例 2 AOF 持久化与 RDB 持久化的区别 3. AOF 持久化 3.1 AO…
怎样做可靠的分布式锁,Redlock 真的可行么? https://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html 本文是对 Martin Kleppmann 的文章 How to do distributed locking 部分内容的翻译和总结,上次写 Redlock 的原因就是看到了 Martin 的这篇文章,写得很好,特此翻译和总结.感兴趣的同学可以翻看原文,相信会收获良多. 开篇作者认为现在 Redi…
自动补全 P109 自动补全在日常业务中随处可见,应该算一种最常见最通用的功能.实际业务场景肯定要包括包含子串的情况,其实这在一定程度上转换成了搜索功能,即包含某个子串的串,且优先展示前缀匹配的串.如果仅包含前缀,那么可以使用 Trie 树,但在包含其他的情况下,使用数据库/ ES 本身自带查询就足够了.可以按照四种情况(精确匹配.前缀.后缀.包含(也可将后两种融合成包含)),分别查询结果,直至达到数据条数上限或者全部查询完毕.但这种使用方法有缺点:查询次数多.难以分页.不过实际场景中需要补全的…
原文:http://blog.csdn.net/l1028386804/article/details/73523810 1. 可重入锁(Reentrant Lock) Redisson的分布式可重入锁RLock Java对象实现了java.util.concurrent.locks.Lock接口,同时还支持自动过期解锁. public void testReentrantLock(RedissonClient redisson){ RLock lock = redisson.getLock("…
1.serverCron简介 在 Redis 中, 常规操作由 redis.c/serverCron 实现, 它主要执行以下操作 /* This is our timer interrupt, called server.hz times per second. * Here is where we do a number of things that need to be done asynchronously. * For instance: * * - Active expired key…
首先明白在java中线程和进程的区别: 1.什么是多线程? 是指一个应用程序同时执行多个任务,一般来说一个任务就是一个线程 ,而一个应用程序有一个以上的线程我们称之为多线程. 2.什么是进程? 进程是一个正在执行的程序 ,比如QQ,迅雷等 一个进程的运行会向CPU申请在内存中开辟一个内存块. 他是向CPU申请资源的,进程之间数据相互独立,一个进程至少有一个线程. 3.什么是线程? 线程是进程中的单一的顺序控制流程也可以叫做最小控制单元,线程是进程中执行单元,开启一个线程比开启一个进程更加节省资源…