redis
努力的土豆
这个作者很懒,什么都没留下…
展开
-
Redis 高级技术点解析
Redis 属于非关系型数据库,也被称之为 NoSQL 数据库,主要以 Key-Value 形式存储数据,是目前用得较多的一种非关系型数据库。Redis 主要有如下特点:为纯内存数据库,操作速度非常快;可以通过持久化(如 RDB、AOF)保证数据基本不丢失;数据类型丰富,常用数据类型有字符串(String)、散列(Hash)、列表(List)、集合(Set)、有序集合(Sorted se...原创 2019-05-03 19:32:46 · 20709 阅读 · 0 评论 -
Redis内部数据结构详解(1)——dict
dict是一个用于维护key和value映射关系的数据结构,与很多语言中的Map或dictionary类似。Redis的一个database中所有key到value的映射,就是使用一个dict来维护的。不过,这只是它在Redis中的一个用途而已,它在Redis中被使用的地方还有很多。比如,一个Redis hash结构,当它的field较多时,便会采用dict来存储。再比如,Redis配合使用dic...原创 2019-05-04 18:52:40 · 23119 阅读 · 0 评论 -
Redis内部数据结构详解(2)——skiplist
Redis里面使用skiplist是为了实现sorted set这种对外的数据结构。sorted set提供的操作非常丰富,可以满足非常多的应用场景。这也意味着,sorted set相对来说实现比较复杂。同时,skiplist这种数据结构对于很多人来说都比较陌生,因为大部分学校里的算法课都没有对这种数据结构进行过详细的介绍。因此,为了介绍得足够清楚,本文会比这个系列的其它几篇花费更多的篇幅。我们...原创 2019-05-04 19:12:57 · 20141 阅读 · 0 评论 -
Redis 事务
Redis 事务Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:批量操作在发送 EXEC 命令前被放入队列缓存。收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。一个事务从开始到执行会经历以下三个阶段:开始事务。命令入队。执行事务。以下是一个事务的例子...原创 2019-05-05 17:30:32 · 20132 阅读 · 0 评论 -
Redis分布式锁注意事项
基于 Redis 的分布式锁的安全性分析1.1 预防死锁我们看下面这个典型死锁场景。一个客户端获取锁成功,但是在释放锁之前崩溃了,此时该客户端实际上已经失去了对公共资源的操作权,但却没有办法请求解锁(删除 Key-Value键值对),那么,它就会一直持有这个锁,而其它客户端永远无法获得锁。我们的解决方案是:在加锁时为锁设置过期时间,当过期时间到达,Redis 会自动删除对应的 Key-...原创 2019-05-13 21:34:21 · 24967 阅读 · 1 评论 -
Redis 实现分布式锁和Zookeeper实现分布式锁
使用 Redis 实现分布式锁在 JUC 包中除了阻塞锁外还有一种叫 CAS 的无阻塞锁(具体可以参考:Java 并发编程之美:并发编程基础晋级篇),CAS 操作本身是原子性的,多个线程操作同一个变量的 CAS 时候只有一个线程能进行 CAS 成功,失败的线程接下来那么使用乐观锁机制直接失败要么使用自旋方式使用 CPU 资源重复进行 CAS 尝试。那么在分布式锁的实现中我们也可以使用类似的方式...原创 2019-05-07 23:19:41 · 24257 阅读 · 0 评论 -
秒杀系统设计(一)
秒杀系统的场景特点秒杀时大量用户会在同一时间同时进行抢购,网站瞬时访问流量激增;秒杀一般是访问请求量远远大于库存数量,只有少部分用户能够秒杀成功;秒杀业务流程比较简单,一般就是下订单操作。...原创 2019-05-18 12:14:27 · 19964 阅读 · 0 评论 -
RedLock分布式锁
获取当前系统时间(毫秒数)。按顺序依次向 N 个 Redis 节点执行获取锁的操作。这个获取操作跟前面基于单 Redis 节点获取锁的过程相同,包含随机字符串 my_random_value,也包含过期时间(比如 PX 30000,即锁的有效时间)。为了保证在某个 Redis 节点不可用的时候算法能够继续运行,这个获取锁的操作还有一个超时时间(Time Out),它要远小于锁的有效时间(几十毫...原创 2019-07-21 18:36:47 · 20252 阅读 · 0 评论