![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
redis
文章平均质量分 92
云养猫v2
这个作者很懒,什么都没留下…
展开
-
redis哈希表 rehash过程
redis哈希表结构 使用链地址方法来解决键冲突的,冲突后追加到链表后面。redis中有两个哈希表,其中一个时正常使用的,另一个是在扩容或者收缩时才需要的redis中的原创 2020-08-13 16:46:48 · 786 阅读 · 0 评论 -
Redis过期策略
设置过期时间expire key time (单位为秒)setex(String key, int seconds, String value) – 字符串独有的方式原理就是在过期字典中 设置注意:除了字符串自己有独有的设置过期时间方法外,其他方法都要依靠expire方法来设置时间。如果没有设置时间,那么缓存就是永不过期如果设置了过期时间,之后又想让缓存永不过期,使用 persist key(表示删除key的过期时间)过期key的判定检查给定key是否存在于过期字典,如果存在,那么.原创 2020-08-13 15:38:03 · 83 阅读 · 0 评论 -
缓存与缓冲区
缓存可以提高低速设备的访问速度,或者减少复杂耗时的计算带来的性能问题。理论上说,我们可以通过缓存解决所有关于“慢”的问题,比如从磁盘随机读取数据慢,从数据库查询数据慢,只是不同的场景消耗的存储成本不同。缓冲区则是一块临时存储数据的区域,这些数据后面会被传输到其他设备上。缓冲区更像“消息队列篇”中即将提到的消息队列,用以弥补高速设备和低速设备通信时的速度差。比如,我们将数据写入磁盘时并不是直接刷盘,而是写到一块缓冲区里面,内核会标识这个缓冲区为脏。当经过一定时间或者脏缓冲区比例到达一定阈值时,由单独的线程.原创 2020-05-09 15:54:45 · 263 阅读 · 0 评论 -
缓存更新 (缓存与数据库的一致性)
https://coolshell.cn/articles/17416.html一般人在更新缓存数据时,想先删除缓存,然后再更新数据库,而后续的操作会把数据在装载到缓存中。然而这个逻辑是错误的。试想,两个并发操作,一个是更新操作,另一个是查询操作,更新操作删除缓存后,查询操作没有命中缓存,先把老数据读出来后放到缓存中,然后更新操作更新了数据库。于是,在缓存中的数据还是旧数据,导致缓存中的数据是脏...转载 2020-04-28 10:11:02 · 1013 阅读 · 0 评论 -
redis事务
Redis是通过MUTIL、EXEC、WATCH、等命令来实现事务功能。事务提供一种将多个命令请求打包,然后一次性、按顺序地执行多个命令地机制。事务的实现事务开始:mutil命令mutil命令可以将执行该命令的客户端从非实物状态切换为事务状态,通过在在客户端状态的flags属性中打开REDIS_MUTIL标识来完成的。命令入队在事务状态,如果客户端发送的命令是除了EXEC、DISCAR...原创 2020-04-21 11:12:24 · 92 阅读 · 0 评论 -
skipList 跳表
import java.util.Random;public class IntSkipList { private class Node { public Node[] next; public int value; public Node(int value, int level) { this.value...原创 2020-04-12 11:08:52 · 76 阅读 · 0 评论 -
一致性哈希算法
public class ConsistentHashingWithVirtualNode { private static String[] server = {"192.168.0.0:111", "192.168.0.1:111", "192.168.0.2:111", "192.168.0.3:111", "192.168.0.4:111"}; ...原创 2020-04-03 16:14:49 · 131 阅读 · 0 评论 -
缓存穿透、缓存击穿、缓存雪崩
缓存穿透概念访问一个不存在的key,缓存不起作用,请求会穿透到DB,流量大时DB会挂掉解决方案采用布隆过滤器,使用一个足够大的bitmap,用于用于存储可能访问的key,不存在的key直接被过滤掉访问key未在DB查询到值时,也将空值写进缓存,但可以设置较短过期时间//将空值写进缓存public object GetProductListNew() { int cache...原创 2020-03-31 14:26:36 · 92 阅读 · 0 评论 -
Redis的应用场景
1、缓存缓存现在几乎是所有中大型网站都在用的必杀技,合理的利用缓存不仅能够提升网站访问速度,还能大大降低数据库的压力。Redis提供了键过期功能,也提供了灵活的键淘汰策略,所以,现在Redis用在缓存的场合非常多。2、排行榜很多网站都有排行榜应用的,如京东的月度销量榜单、商品按时间的上新排行榜等。Redis提供的有序集合数据类构能实现各种复杂的排行榜应用。3、计数器什么是计数器,如电商网...原创 2020-03-31 11:44:05 · 116 阅读 · 0 评论 -
如何保证redis里的数据是热点数据
MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据?1.限定 Redis 占用的内存,Redis 会根据自身数据淘汰策略,加载热数据到内存。所以,计算一下 20W 数据大约占用的内存,然后设置一下 Redis 内存限制即可。2.问题是什么数据?比如用户数据。数据库有2000w条。活跃用户:redis sortSet里 放两天内(为方便取一...转载 2020-03-31 11:40:05 · 1616 阅读 · 0 评论 -
redis cluster集群
Redis集群是Redis提供的分布式数据库方案,集群通过分片(sharding)来进行数据共享,并提供复制和故障转移功能。槽指派Redis集群的整个数据库被分为16384(2^14)个槽slot,数据库中的每个键都属于者16384个槽的其中一个,集群中的每个节点可以处理0个会最多16384个槽。当数据库中的16384个槽都有节点在处理时,集群处于上线状态(ok);相反地。如果数据库中有任...原创 2020-03-19 18:20:25 · 102 阅读 · 0 评论 -
Redis Sentinel
Sentine(哨兵)是Redis的高可用性(high availability)解决方案:由一个或多个Sentinel实例(instance)组成的Sentinel系统(System)可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并且在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器代替已下线的主服务器继续处理命令请求。...原创 2020-03-19 14:39:12 · 91 阅读 · 0 评论 -
redis复制
在Redis中,用户可以通过执行SLAVE OF命令或者设置slaveof选项,让一个服务器去复制(replicate)另一个服务器。redis复制分为:同步(sync)和命令传播(command propagate)同步(sync)旧版复制(SYNC)从服务器向主服务器发送SYNC命令收到SYNC的主服务器执行BGSAVE命令,在后台生成一个RDB文件,并用一个缓冲区记录从现在开始执...原创 2020-03-19 10:44:15 · 82 阅读 · 0 评论 -
LRU算法
利用LinkedHashMap重写 removeEldestEntry()方法/** * An LRU cache, based on <code>LinkedHashMap</code>. * * <p> * This cache has a fixed maximum number of elements (<code>cacheSiz...原创 2020-03-18 09:50:03 · 117 阅读 · 0 评论 -
redis的数据类型
Redis的五种基本数据类型:string 字符串list 列表 (简单的字符串列表)hash 哈希set 集合 (string类型的无序集合)zset 有序集合 (string类型的有序集合)也可以理解为Redis五种类型的对象:字符串对象、列表对象、哈希对象、集合对象、有序集合对象Redis的基本数据结构:sds简单动态字符串链表字典(符号表)跳跃表int...原创 2020-03-18 09:40:12 · 79 阅读 · 0 评论 -
布隆过滤器
public class BloomFilter { private static final int DEFAULT_SIZE = 2 << 24; //布隆过滤器的比特长度 private static final int[] seeds = {3, 5, 7, 11, 13, 31, 37, 61}; //选取质数 private stati...转载 2020-03-17 13:06:19 · 145 阅读 · 0 评论 -
redis的优点和缺点
优点:1,支持多种数据类型:set,zset,list,hash,string2,持久化存储:RDB和AOF3,丰富的特性:pub/sub,key过期策略,事务,支持多个DB等4,性能好:由于是全内存操作,读写性能都很好。缺点:1,由于是内存数据库,所以数据的存储量跟机器本身的内存大小有关。2,Redis只能使用单线程,性能受限于CPU性能...原创 2019-03-07 14:47:59 · 550 阅读 · 0 评论 -
redis持久化
redis将数据从内存中以某种形式同步到硬盘中,使得重启后根据硬盘中的记录恢复数据。RDB持久化方式会在一个特定的间隔内保存那个时间点的一个数据快照。RDB:原理:将Redis在内存中的数据记录定时dump到磁盘上的RDB文件。Redis调用fork()函数,fork一个子进程(父进程的副本) 子进程把内存数据写到一个临时的RDB文件 当子进程写完所有数据,把旧的RDB文件替...原创 2019-03-19 15:17:39 · 76 阅读 · 0 评论 -
Redis总体快速的原因
快速的原因如下:1)绝大部分请求是纯粹的内存操作(非常快速)2)采用单线程,避免了不必要的上下文切换和竞争条件3)非阻塞IO原创 2019-03-12 08:47:35 · 103 阅读 · 0 评论 -
跳跃表
typedef struct zskiplistNode { struct zskiplistNode *backword; //后退指针 double score; //分值 robj *obj; //成员对象 struct zskiplistlevel { //层 ...转载 2019-03-12 09:42:59 · 88 阅读 · 0 评论 -
Redis为什么是单线程的
Redis为什么是单线程的?因为CPU不是Redis的瓶颈。Redis的瓶颈最有可能是机器内存或者网络带宽。(以上主要来自官方FAQ)既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了...原创 2019-03-12 14:54:48 · 88 阅读 · 0 评论 -
分布式环境下,管理Session的方式
一、session复制在支持session复制的web服务器上,通过修改web服务器配置,可以实现session同步到其它web服务器上,达到每个web服务器上都保存一致的session。适用于机器较少,网络流量较小优点:实现简单、配置较少、当网络中有机器down掉不影响用户使用。缺点:在数据量很大的情况下,不仅会占用网络资源,而且还会导致延迟适用场景:只适用于Web服务器比较...原创 2019-02-27 09:45:06 · 267 阅读 · 0 评论 -
redis有哪些数据淘汰策略
redis内存数据数据集大小升到一定大的时候,就会实行数据淘汰策略(回收策略)。1,volatile-lru:从已设置过期时间的哈希表(server.db[i].expires)中随机挑选多个key,然后在选到的key中用lru算法淘汰最近最少使用的数据2,allkey-lru:从所有key的哈希表(server.db[i].dict)中随机挑选多个key,然后再选到的key中利用lru算...转载 2019-03-18 20:34:18 · 8117 阅读 · 0 评论 -
Redis 的 5 个常见使用场景
1,会话缓存(Session Cache)Redis 具有缓存数据持久化的能力,当缓存因出现问题而重启后,之前的缓存数据还在那儿,这个就比较实用,避免了因为session突然消失带来的用户体验问题。2,页面缓存如果你使用的是服务器端内容渲染,你又不想为每个请求重新渲染每个页面,就可以使用 Redis 把常被请求的内容缓存起来,能够大大的降低页面请求的延迟,已经有很多框架用Redis来缓...原创 2019-03-07 14:34:33 · 344 阅读 · 0 评论