redis
文章平均质量分 74
aa
云川之下
这个作者很懒,什么都没留下…
展开
-
为什么说Redis是单线程的以及Redis为什么这么快!
https://blog.csdn.net/chenyao1994/article/details/79491337转载 2021-06-24 16:31:21 · 293 阅读 · 0 评论 -
【redis】redis和zookeeper分布式锁的区别(优点、缺点)
文章目录1. 什么是分布式锁1. 1 分布式锁的原理是什么2. 单机2.1 redis可能会丢数据吗2.2 死锁2.3 注意事项3. 集群3.1 redis3.2 zookeeper4. 结论1. 什么是分布式锁锁,解决的是多线程或多进程情况下的数据一致性问题;分布式锁,解决的是分布式集群下的数据一致性问题。为了保证一个方法或属性在高并发情况下的同一时间只能被同一个线程执行,在传统单体应用单机部署的情况下,可以使用Java并发处理相关的API(如ReentrantLock或Synchronized)进原创 2021-06-24 15:02:41 · 12016 阅读 · 9 评论 -
【Redis】redis主从不一致问题(redis缺点、缺陷)
参考:数据库主从不一致,怎么解?原创 2021-05-24 10:36:54 · 5450 阅读 · 3 评论 -
【redis】 热点Key的发现与解决之道(阿里大神分享)
文章目录1. 热点问题概述1.1 热点问题的成因1.2 在了解热点问题产生后,为何要重视热点Key?1.3 常见问题解决方案1.3.1 服务端缓存方案1.3.2 使用Memcache、Redis方案1.3.3 阿里云数据库解热点之道1.3.3.1 读写分离方案1.3.3.1.1 readonly语法1.3.3.2 热点数据解决方案1.3.3.3 热点数据的读取1.3.3.4 热点数据发现摘要:在2018数据库直播大讲堂峰会-Redis专场中阿里云数据库组的梁盼从热点Key产生的原因,造成的问题开始讲解转载 2021-05-22 18:11:18 · 594 阅读 · 0 评论 -
【redis】经典面试问题
文章目录1. 缓存雪崩2. 缓存穿透1. 缓存雪崩缓存雪崩是指,在某一个时间段,缓存集中过期失效.很多业务场景,如:秒杀商品、微博热搜排行、或者一些活动数据,都是通过跑任务方式,将DB数据批量、集中预热到缓存中,缓存数据有着近乎相同的过期时间。当过这批数据过期时,会一起过期,此时,对这批数据的所有请求,都会出现缓存失效,从而将压力转嫁到DB,DB的请求量激增,压力变大,响应开始变慢。那么有没有解呢?当然有了。解决方案一:发现缓存不存在,在读取数据库时,再保存到redis缓存中,采用队列的原创 2021-05-22 14:50:31 · 137 阅读 · 0 评论 -
【redis】详解布隆过滤器BloomFilter的原理,使用场景和注意事项
文章目录1. 什么是布隆过滤器2. 实现原理2.1 HashMap 的问题2.2 布隆过滤器数据结构2.3 BloomFilter 的缺点2.4 如何选择哈希函数个数和布隆过滤器长度3. 最佳实践3.1 大Value拆分参考1. 什么是布隆过滤器本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(probabilistic data structure),特点是高效地插入和查询,可以用来告诉你 “某样东西一定不存在或者可能存在”。相比于传统的 List、Set、Map 等数据结构,它更高效、占用原创 2021-05-11 20:00:56 · 669 阅读 · 0 评论 -
【Redis】Redis数据淘汰算法
文章目录1. 概述2. Redis的LRU算法2.1 一般性的LRU算法2.2 淘汰数据样本采集2.2.1 非精准的LRU3 热点数据3.1 热点发现3.2 热点数据采用哪种淘汰策略1. 概述众所周知,Redis的所有数据都存储在内存中,但是内存是一种有限的资源,所以为了防止Redis无限制的使用内存,在启动Redis时可以通过配置项maxmemory来指定其最大能使用的内存容量。例如可以通过以下配置来设置Redis最大能使用 1G 内存:maxmemory 1G当Redis使用的内存超过配置的 ma原创 2021-05-11 17:09:43 · 251 阅读 · 0 评论 -
【redis】缓存穿透、缓存雪崩、缓存击穿
文章目录1 缓存穿透1.1 缓存空值1.2 使用布隆过滤器1.3 总结2 缓存雪崩2.1 解决方案3. 缓存击穿3.1 解决方案3.1.1 互斥锁3.1.1热点数据不过期。1 缓存穿透缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储层查不到数据则不写入缓存层。缓存穿透将导致不存在的数据每次请求都要到存储层去查询, 失去了缓存保护后端存储的意义。不管使用哪种缓存系统都有可能遇到缓存穿透的问题,少量的缓存穿透对系统也没有损害,但是如果你的系统遭遇攻击,原创 2021-05-10 20:16:48 · 174 阅读 · 0 评论 -
【Redis】Redis中SAVE和BGSAVE的区别
文章目录概述1. SAVE2. BGSAVE2.1 fork操作有影响吗概述Redis的这两个命令都是用于创建当前数据库的备份。因为Redis持久化选择RDB快照模式,所以Redis并不是实时的进行数据持久化,而是有一定的时间间隔。这个时候如果我们想要手动进行一次持久化,可以使用save或者bgsave命令。1. SAVE基本命令:redis 127.0.0.1:6379> SAVE OK该命令将在 redis 安装目录中创建dump.rdb文件。影响:SAVE 直接调用 rdb原创 2021-05-08 19:00:09 · 2784 阅读 · 1 评论 -
【Redis】Redis对象redisObject之有序集合对象
文章目录aaa原创 2021-05-08 12:01:26 · 148 阅读 · 0 评论 -
【Redis】跳跃表zskiplist的实现
文章目录跳跃表结构2. 跳跃表节点2.1 层2.2 前进指针2.3 跨度2.4 后退指针2.5 分值和成员3. 跳跃表跳跃表结构Redis 的跳跃表由 redis.h/zskiplistNode 和 redis.h/zskiplist 两个结构定义, 其中 zskiplistNode 结构用于表示跳跃表节点, 而 zskiplist 结构则用于保存跳跃表节点的相关信息, 比如节点的数量, 以及指向表头节点和表尾节点的指针, 等等。图 5-1 展示了一个跳跃表示例, 位于图片最左边的是 zskipl原创 2021-05-08 10:57:10 · 294 阅读 · 0 评论 -
【Redis】Redis对象redisObject之集合对象
文章目录概述1. intset 编码2. hashtable 编码3. 编码的转换概述集合对象的编码可以是 intset 或者 hashtable 。当集合元素都是数字并且数量比较少时,采用intset ,否则会转为hashtable 。1. intset 编码intset 编码的集合对象使用整数集合作为底层实现, 集合对象包含的所有元素都被保存在整数集合里面。举个例子, 以下代码将创建一个如图 8-12 所示的 intset 编码集合对象:redis> SADD numbers 1 3转载 2021-05-07 21:15:12 · 372 阅读 · 0 评论 -
【Redis】Redis对象redisObject之哈希对象
文章目录概述ziplist 编码hashtable 编码编码转换概述哈希对象的编码可以是 ziplist 或者 hashtable 。当内容较少时,采用ziplist,当数据量达到一定级别,那么就会转为hashtableziplist 编码ziplist 编码的哈希对象使用压缩列表作为底层实现, 每当有新的键值对要加入到哈希对象时, 程序会先将保存了键的压缩列表节点推入到压缩列表表尾, 然后再将保存了值的压缩列表节点推入到压缩列表表尾, 因此:保存了同一键值对的两个节点总是紧挨在一起, 保存键原创 2021-05-07 20:28:55 · 304 阅读 · 0 评论 -
【Redis】列表对象底层原理之quicklist
文章目录概述为什么引入quicklist1. quicklist内部存储结构1.1 控制ziplist元素长度1.2 quicklist的compress属性1.3 quicklistNode的zl指针概述在Redis3.2之后,统一用quicklist来存储列表对象,quicklist存储了一个双向列表,每个列表的节点是一个ziplist,所以实际上quicklist就是linkedlist和ziplist的结合。为什么引入quicklist我们先看看之前的版本,单独采用linkedlist或zi原创 2021-05-07 14:31:58 · 467 阅读 · 0 评论 -
【Redis】链表和链表节点的实现
文章目录概述链表和链表节点的实现概述链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点来灵活地调整链表的长度。作为一种常用的数据结构,链表内置在很多高级的编程语言里面,因为Redis使用的C语言并没有内置这种数据结构,所以Redis构建了自己的链表实现。链表在Redis中应用非常广泛,比如列表建的底层实现之一就是链表,当一个列表包含了数量比较多的元素,又或者列表中包含的元素都是比较长的字符串时,Redis会使用链表作为列表键的底层实现。3.2之后list键已经不直接用zi原创 2021-05-07 11:06:00 · 188 阅读 · 1 评论 -
【Redis】压缩列表
文章目录概述1. 压缩列表的构成2. 压缩列表节点2.1 previous_entry_length2.1.1 压缩列表的遍历2.2 encoding2.3 content概述ziplist是list键、hash键以及zset键的底层实现之一(3.0之后list键已经不直接用ziplist和linkedlist作为底层实现了,取而代之的是quicklist)这些键的常规底层实现如下:list键:双向链表hash键:字典dictzset键:跳跃表zskiplist但是当list键里包含的元素原创 2021-05-07 10:47:07 · 279 阅读 · 0 评论 -
【Redis】Redis对象redisObject之列表对象
文章目录概述1. ziplist2. linkedlist3 编码转换概述列表对象的编码可以是 ziplist 或者 linkedlist 。根据元素个数,会进行转换。1. ziplistziplist 编码的列表对象使用压缩列表作为底层实现, 每个压缩列表节点(entry)保存了一个列表元素。举个例子, 如果我们执行以下 RPUSH 命令, 那么服务器将创建一个列表对象作为 numbers 键的值:redis> RPUSH numbers 1 "three" 5(integer) 3原创 2021-05-07 10:13:07 · 216 阅读 · 0 评论 -
【Redis】Redis对象redisObject之字符串对象
文章目录概述1. int 类型2. raw 类型3. embstr3.1 double 类型数字也采用embstr概述字符串对象的编码可以是 int 、 raw 或者 embstr 。1. int 类型如果一个字符串对象保存的是整数值, 并且这个整数值可以用 long 类型来表示, 那么字符串对象会将整数值保存在字符串对象结构的 ptr属性里面(将 void* 转换成 long ), 并将字符串对象的编码设置为 int 。也就是说,此时,采用ptr属性直接存储值,而是一个指向对象的指针,效率更原创 2021-05-06 19:51:57 · 228 阅读 · 0 评论 -
【Redis】字典
文章目录概述概述字典 key/value形式,类似java中的hashmap哈希算法 数组,采用hash,时间复杂度为O(1)rehash 扩容或缩容,需要重新计算hash,原有的位置需要发生变更渐进式 rehash 不是一次性完成rehash 的,而是分多次解决键冲突 链表...原创 2021-05-06 16:24:31 · 179 阅读 · 0 评论 -
【Redis】字符串和SDS
文章目录1. 字符串1.1 字符串介绍1.2 SDS——动态字符串1.2.1 SDS结构体1.3 参考1. 字符串1.1 字符串介绍字符串是Redis中最为常见的数据存储类型,其底层实现是简单动态字符串sds(simple dynamic string),是可以修改的字符串。如图中所示,内部为当前字符串实际分配的空间 。其中capacity是最大容量,len是实际长度,一般要高于实际字符串长度 len。当字符串长度小于 1M 时,扩容都是加倍现有的空间,如果超过 1M,扩容时一次只会多扩 1M转载 2021-05-06 15:39:31 · 141 阅读 · 0 评论 -
【redis】idea报jedisConnectionFactory找不到
首先确认引入了spring-data-redis,但是idea识别不了。spring-data-redis 与 jedis 版本匹配问题 spring-data-redis2.1.9搭配jedis 3.0.1会报错,替换一个较低版本的jedis:这两个版本的匹配可以 <dependency> <groupId>redis.clients</groupId> <artifactId>原创 2021-04-28 13:50:19 · 2652 阅读 · 0 评论 -
【Redis】JedisCluster与ShardedJedisPool的区别
JedisCluster与ShardedJedisPool的区别jedis客户端操作redis主要三种模式:单台模式、分片模式(ShardedJedis)、集群模式(BinaryJedisCluster),分片模式是一种轻量级集群。ShardedJedisPool是redis没有集群功能之前客户端实现的一个数据分布式方案,redis3.0提供集群之后,客户端则采用JedisCluster实现连接redis集群环境。ShardedJedisPool使用的是JedisShardInfo的insta原创 2021-04-27 00:13:26 · 717 阅读 · 0 评论 -
【Redis】主从、哨兵、集群各自架构的优点和缺点对比
文章目录1. 单机模式2. 主从架构3. 哨兵4. 集群模式1. 单机模式Redis 单副本,采用单个 Redis 节点部署架构,没有备用节点实时同步数据,不提供数据持久化和备份策略,适用于数据可靠性要求不高的纯缓存业务场景。优点:架构简单,部署方便。高性价比:缓存使用时无需备用节点(单实例可用性可以用 supervisor 或 crontab 保证),当然为了满足业务的高可用性,也可以牺牲一个备用节点,但同时刻只有一个实例对外提供服务。高性能。缺点:不保证数据的可靠性。在缓存使用,原创 2021-04-26 21:10:39 · 15738 阅读 · 2 评论 -
【Redis】Spring Boot整合Redis集群cluster
文章目录1、引入相关依赖:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency> <groupId>org.apache.commons</groupId>原创 2021-04-25 23:32:40 · 446 阅读 · 0 评论 -
【Redis】Java操作redis集群cluster
文章目录借助redis的java客户端jedis可以操作以上集群,引用jedis版本的maven坐标如下:<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version></dependency>Java编写访问redis集群的代码非常简单,如原创 2021-04-25 23:26:42 · 1779 阅读 · 0 评论 -
【Redis】访问保护属性/参数protected-mode
redis3.2版本后新增protected-mode配置,默认是yes,即开启。设置外部网络连接redis服务,设置方式如下:1、关闭protected-mode模式,此时外部网络可以直接访问2、开启protected-mode保护模式,需配置bind ip或者设置访问密码...原创 2021-04-24 13:57:33 · 5717 阅读 · 2 评论 -
【Redis】Info 命令
文章目录Redis Info 命令以一种易于理解和阅读的格式,返回关于 Redis 服务器的各种信息和统计数值。通过给定可选的参数 section ,可以让命令只返回某一部分的信息:redis 127.0.0.1:6379> INFO [section] section可选项:Server 服务器运行的环境参数Clients 客户端相关信息Memory 服务器运行内存统计数据Persistence 持久化信息Stats 通用统计数据Replication 主从复制相关信息CPU原创 2021-04-24 00:12:30 · 552 阅读 · 0 评论 -
【Redis】client客户端 工具 redis-cli
语法:redis-cli -h 192.168.20.33 -p 6379如果是连接本机,并且采用默认的端口,可以直接用redis-cli详细解释:用法:redis-cli [OPTIONS] [cmd [arg [arg ...]]]-h <主机ip>,默认是127.0.0.1-p <端口>,默认是6379-a <密码>,如果redis加锁,需要传递密码--help,显示帮助信息参考:《redis-cli,Redis命令行工具》...原创 2021-04-24 00:04:12 · 2195 阅读 · 0 评论 -
【Redis】Lua脚本(Eval 命令)
文章目录语法Redis Eval 命令使用 Lua 解释器执行脚本。语法redis Eval 命令基本语法如下:EVAL script numkeys key [key ...] arg [arg ...] 参数说明:script: 参数是一段 Lua 5.1 脚本程序。脚本不必(也不应该)定义为一个 Lua 函数。numkeys: 用于指定键名参数的个数。作用是区分key 数组和arg数组,例如2 a b c ,假设numkeys是2,说明前2个参数 a 和b是key,第三个参数c原创 2021-04-22 23:13:39 · 3914 阅读 · 0 评论 -
【Redis】GETBIT和SETBIT
《Redis中的GETBIT和SETBIT(转载)》《redis 用setbit(bitmap)统计活跃用户》原创 2021-04-22 19:49:31 · 211 阅读 · 0 评论 -
【Redis】Java Redis Pipeline(管道) 使用示例
文章目录概述概述一般情况下,大家使用redis去put/get都是先拿到一个jedis实例,然后操作,然后释放连接,这种模式是 请求-响应,请求-响应这种模式,下一次请求必须得等第一次请求响应回来之后才可以,因为redis是单线程的,按部就班,一步一步来。而pipeline管道改变了这种请求模式,客户端可以一次发送多个命令,无须等待服务器的返回,请求,请求,请求,响应,响应,响应这种模式大大减少了影响性能的关键因素-网络往返时间。package com.test.jedis;import原创 2021-04-22 19:29:52 · 2769 阅读 · 0 评论 -
【Redis】复制风暴
文章目录1. 复制风暴1.1 单节点复制风暴1.2 单机器复制风暴1.3 总结1. 复制风暴复制风暴是指大量从节点对同一主节点或者对同一台机器的多个主节点短时间内发起全量复制的过程。复制风暴对发起复制的主节点或者机器造成大量开销,导致 CPU、内存、带宽消耗。因此我们应该分析出复制风暴发生的场景,提前采用合理的方式规避。规避方式有如下几个。1.1 单节点复制风暴当一个主机下面挂了很多个 slave从机的时候,主机 master 挂了,这时 master 主机重启后,因为 runid 发生了变化,所有原创 2021-04-22 14:43:13 · 964 阅读 · 1 评论 -
【Redis】Redis的版本演进核心的变化
参见《Redis的版本演进核心的变化》转载 2021-04-22 11:10:30 · 307 阅读 · 0 评论 -
【Redis】主从复制之repl_backlog(部分复制、断点续传)
文章目录1. 前言2. 配置项1. 前言注意,repl_backlog只针对部分复制(Partial Replication),而非全量复制。本文内容基于redis-5.0.5(截至2019/6/6的最新版本),本文深入介绍REdis主从复制的部分复制核心要素repl_backlog,与其相关的配置直接影响主从间的稳定性,对提升集群的稳定性十分重要。注意REdis的主节点把所有从节点也当作一个Client看待,正常的数据同步并不涉及repl_backlog。当从节点断开重连,这个时候repl_bac原创 2021-04-22 10:58:45 · 1739 阅读 · 0 评论 -
【Redis】keys命令和SCAN命令
文章目录1 keys2 SCAN1 keyskeys:全量遍历键,用来列出所有满足特定正则字符串规则的key,假设redis此时正在生产环境下,使用该命令就会造成隐患,当redis数据量比较大时:keys会一次性返回所有符合条件的key,所以会造成redis的卡顿另外如果一次性返回所有key,对内存的消耗在某些条件下也是巨大的。keys性能比较差,要避免使用:2 SCANSCAN是一个基于游标的迭代器,需要基于上一次的游标延续之前的迭代过程。SCAN以0作为游标,开始一次新的迭代,直到命原创 2021-04-21 16:43:15 · 4138 阅读 · 0 评论 -
【Redis】 Zunionstore 命令
文章目录1. 概述2. 语法3. 实例1. 概述Redis Zunionstore 命令计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination 。默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和 。2. 语法redis Zunionstore 命令基本语法如下:redis > ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS原创 2021-04-21 14:47:38 · 1412 阅读 · 0 评论 -
【Redis】解决分布式锁——死锁问题(SETNX 、EXPIRE 、EX、NX、PX )
文章目录1. Redis分布式锁实现原理2. 针对该问题,redis 在2.6.12版本过后增加新的解决方案1. Redis分布式锁实现原理SETNX key value //如果key不存在,则创建并赋值,成功加入缓存并且返回1;如果已存在,则返回0。EXPIRE key seconds //设置key的生存时间,当key过期(生存时间为0),会自动删除存在风险:SETNX和EXPIRE 为两个指令,如果设置了SETNX后程序崩溃,EXPIRE未成功执行则会出现资源锁死的情况。2. 针对该问题原创 2021-04-20 20:01:24 · 8693 阅读 · 0 评论