redis
文章平均质量分 82
redis详解
张孟浩_jay
分享Java后端、MySQL、数据结构、计算机基础、算法、并发编程技术!欢迎朋友们交流关注,共同进步!
展开
-
Redis集群详解
为了提高redis的高可用性,可以通过集群来容灾,一般有三种集群方案:1、主从复制主从复制模式下,redis分为 一个master 主库 和 多个 slave 从库。master 主库 可以提供读、写操作。slave 从库 只能提供读操作。master不断的将数据同步给slave。主从复制的两个关键点:1、runid当主从复制的时候,没有利用 ip地址+端口号 来标识,而是采用runid。runid 是一个 40位的随机UUID,当redis重启后,会重新生成runid,runid可以唯一标原创 2021-10-08 22:58:02 · 1507 阅读 · 1 评论 -
Redis之缓存一致性
当数据库中的数据更改之后,Redis中的缓存数据也需要更改?怎么保证Redis中的数据和数据库中数据一致呢?首先说下,现阶段只能保证数据库和redis的最终一致性,无法保证其强一致性,无论怎么做都会存在一段时间的数据不一致。1、删除还是更新Redis按常理说,我们在更新完数据库后,应该对Redis中的数据进行更新。但是现实中都是将对应的数据删除,这是为什么呢?首先,删除一个数据比更新一个数据要轻松的多,删除只需要传入对应的key就可以了,而更新的话,不仅多传入key对应的值,还会涉及到复杂的内存操原创 2021-10-07 22:52:15 · 620 阅读 · 1 评论 -
Redis之缓存雪崩、缓存穿透、缓存击穿
redis原创 2021-10-07 19:06:19 · 184 阅读 · 1 评论 -
Redis事务详解
Redis作为一个数据库,也有事务的概念,本文就从事务的四大特性来分析以下Redis的事务。1、原子性原子性是事务的一个非常重要的特性。就是一个事务中的操作要么全部执行,要么全部不执行。Redis中提供了与原子性有关的命令:MUlTI:用于显示开启一个事务,之后的操作都不会立即执行,而是进入一个操作队列EXEC依次执行操作队列中的所有操作。DISCARD抛弃操作队列中的所有操作,也就是所有操作都不执行事务执行过程1、事务开启通过MULTI命令来显示开启事务2、命令入队客户端所有的原创 2021-10-06 22:21:05 · 447 阅读 · 1 评论 -
Redis持久化
Redis的一个特色就是提供了持久化操作,也就是将内存中的数据保存到磁盘中。当重启机器或者转移机器的时候,可以快速的恢复数据。Redis中提供了两种持久化策略:RDB 和 AOF。我们接下来就详细的说一下这两种策略:1、RDBRDB使用的是快照的方式来备份redis,就是将redis中的所有数据生成快照 保存到磁盘上,是一个全量备份。RDB有3种备份模式:1、save由于redis服务器是单线程处理请求的,当客户端发起save命令后,redis服务器会进行数据的全量备份,当数据备份完毕后,才会处原创 2021-10-06 18:24:54 · 171 阅读 · 0 评论 -
Redis内存淘汰策略LRU、LFU详解
Redis内存淘汰原因Redis是一种内存数据库,redis的容量往往有限,无法存放所有的数据。当内存满了的时候,并且这个时候还需要往Redis中放入新的数据,就需要将Redis中的一部分数据淘汰了,把新的数据放进入。Redis内存淘汰策略一个Redis中存储了很多的数据,应该选取哪部分数据进行置换呢?Redis提供了多种淘汰策略,大概分为以下五类:1、lru通过lru,least recently used,也就是最近最久使用算法,也就是淘汰使用时间最旧的数据。redis中的每个数据的key原创 2021-10-05 23:02:12 · 8952 阅读 · 5 评论 -
Redis过期时间三种删除策略详解
redis中的数据有一个过期时间,比如验证码、token等。当数据过了期限后,应该要被删除。redisDb中有两个dict对象,dict内部实现的是哈希表的结构。两个dict对象的名字一个叫dict,一个叫expires。dict用于存放实际数据、expires用于存放过期时间数据。当往redisDb中的dict中加入key-value数据的的时候,会将对应的key和过期时间存放到expires中,便于后期查找过期时间。Redis中提供了三种删除策略:1、定时删除当放入数据后,设置一个定时器,当原创 2021-10-04 23:29:39 · 4601 阅读 · 2 评论 -
Redis存储模型详解
简介Redis是一个基于Key-Value的内存模型。Key的数据类型只有string,Value有String、Hash、Set、List、Zset五种类型。存储模型详解1、redisServerRedisServer中对应着redisServer的对象,一个redisServer中可以存在多个数据库实例。struct redisServer { // ... // redisDb数组,一个redisDb代表着一个redis数据库 redisDb *db;原创 2021-10-04 20:45:31 · 876 阅读 · 2 评论 -
Java版skiplist跳表详解
skiplist简介skiplist 是 一个概率型数据结构,查找、删除、插入的时间复杂度都是O(logN)。skiplist是由多层有序的链表组成的,来加快查找速度。其中第0层包含了所有元素,然后往上增加了多层的有序链表作为索引来加快查找速度。skiplist组成链表节点Nodepublic class Node { //存储的数据 private int data = -1; /** * 表示当前节点位置的下一个节点所有层的原创 2021-10-03 22:09:22 · 880 阅读 · 1 评论 -
Redis线程模型和五种数据类型详解
redis简介redis是一个基于内存的NoSQL数据库,因为数据是存在内存中,主要用于缓存。redis的存储方式是Key-Value的。redis线程模型redis采用的是单线程模型,为什么会采用单线程呢?因为redis是基于内存的数据库,只会操作内存,不牵扯到IO,属于CPU计算密集型任务,如果贸然引入多线程的话,线程之间的切换只会白白浪费资源,不如单线程的执行效率。除此之外,单线程不会造成并发问题,保证了线程安全问题。单线程怎么同时处理多个连接呢?redis采用的epoll,也就是多原创 2021-10-02 21:36:26 · 517 阅读 · 1 评论