
Redis
文章平均质量分 90
Redis 全称 Remote Dictionary Server(即远程字典服务),它是一个基于内存实现的键值型非关系(NoSQL)数据库,由意大利人 Salvatore Sanfilippo 使用 C 语言编写。
逆流°只是风景-bjhxcc
当你的才华还撑不起你的野心的时候,你就应该静下心来学习;当你的能力还驾驭不了你的目标时,就应该沉下心来,历练;梦想,不是浮躁,而是沉淀和积累,只有拼出来的美丽,没有等出来的辉煌,机会永远是留给最渴望的那个人,学会与内心深处的你对话,问问自己,想要怎样的人生,静心学习,耐心沉淀,送给自己,共勉。
展开
-
【redis】学了redis不会实战?看这篇就够了
适用人群:熟悉redis的指令,但不了解使用场景的人群。本文会详细描述各个场景的伪代码和对应的redis指令,至于为什么只是伪代码是因为每个语言操作redis的方式不一致,但是思想是一致的,只需要根据这个思想去找对应的api即可。通过伪代码的形式讲解了redis中String、List、Hash、set等,使用场景,解决方案,对于命令以及如何使用。希望对你有帮助,如有问题欢迎评论区留言。原创 2023-04-24 14:31:27 · 527 阅读 · 0 评论 -
【redis】Redis缓存失效、雪崩、穿透、击穿、并发等案例分析难题解决方案
目录如何解决Redis缓存失效、雪崩、穿透、击穿、并发等5大难题???缓存失效出现场景:处理方法:缓存雪崩出现场景:处理方法:缓存穿透出现场景:处理方法:缓存击穿出现场景:处理方法:缓存并发出现场景:处理方法:热点key出现场景:处理方法:如何保证redis中的数据都是热点数据redis 提供 6种数据淘汰策略:Redis到底是单线程还是多线程Redis案例分析一 分布式锁Redis案例分析二 秒杀业务超卖现象Redis案例分析三 redis分布式主从互备的高可用方案redis是单进程单线程应用,命原创 2020-05-28 15:13:25 · 1445 阅读 · 1 评论 -
【Redis】RedisTemplate最全的常用方法
RedisTemplate常用方法String类型Hash类型List类型Set类型zSet类型Redis常用的数据类型:String、Hash、List、Set、zSet。原创 2023-11-19 22:06:19 · 1489 阅读 · 0 评论 -
【Redis】如何保证Redis缓存与数据库的一致性?
但是这个方案会有⼀个缺点就是会对业务代码造成大量的侵入,深深的耦合在⼀起,所以这时会有⼀个优化的方法,我们知道对 Mysql 数据库更新操作后再 binlog 日志中我们都能够找到相应的操作,那么我们可以订阅 Mysql 数据库的 binlog 日志对缓存进行操作。先更新数据库,后删除缓存这⼀种情况也会出现问题,比如更新数据库成功了,但是在删除缓存的阶段出错了没有删除成功,那么此时再读取缓存的时候每次都是错误的数据了。最终结果是,缓存中存储了旧的数据,而数据库中存储了新的数据,二者数据不一致。转载 2023-09-08 14:00:00 · 1686 阅读 · 0 评论 -
【面试】Redis的热key问题如何发现和解决?
上面我们提到从redis只不负责读和写请求的,但redis官方提供了一个方法,在操作读请求时,可以先加上readonly命令,这样从redis就可以提供读请求服务了,不需要转发到主redis。上图是redis经典的三主三从集群方案,客户端进行set和get时,都是走的主redis,从redis只是个备份,主要作用是用来做高可用的,如:主redis挂了,从redis顶上。根据这个特性,我们可以对客户端工具进行改造,读请求方法时,加上readonly这个命令,从而实现读写分离,提高了从redis的利用率。原创 2023-09-08 08:12:47 · 1763 阅读 · 0 评论 -
【缓存设计】记一种不错的缓存设计思路
之前与同事讨论接口性能问题时听他介绍了一种缓存设计思路,觉得不错,做个记录供以后参考。原创 2023-08-26 23:59:06 · 1023 阅读 · 0 评论 -
【Redis】Redis三种集群模式-主从、哨兵、集群各自架构的优点和缺点对比
Redis 单副本,采用单个 Redis 节点部署架构,没有备用节点实时同步数据,不提供数据持久化和备份策略,适用于数据可靠性要求不高的纯缓存业务场景。架构简单,部署方便。高性价比:缓存使用时无需备用节点(单实例可用性可以用 supervisor 或 crontab 保证),当然为了满足业务的高可用性,也可以牺牲一个备用节点,但同时刻只有一个实例对外提供服务。高性能。不保证数据的可靠性。原创 2023-08-15 07:47:04 · 4159 阅读 · 2 评论 -
【Redis】项目使用redis做缓存除了击穿穿透雪崩我们还要考虑哪些?
相信大家在项目中都是用过redis,比如用来做一个分布式缓存来提高程序的性能。当使用到了redis来做缓存,那么我们就必须要考虑几个问题,除了缓存击穿,缓存穿透,缓存雪崩,那么我们还需要考虑哪些问题呢?原创 2023-08-08 07:11:17 · 227 阅读 · 0 评论 -
【高并发】热点数据更新导致CPU100%的解决方案
在平常的工作中,更新数据是再正常不过的一个需求了,我们只需要执行一个update语句即可,如果有必要我们还可以加上事务来保证数据的可靠性。但是如果这是一个热点数据,就比如说直播下单,如果这个商品很火爆,价格又很低,那么就会有很多人下单,这种下单不像秒杀,秒杀是有限制数量,但是这种直播下单是不限量的,可以同时有很多人在下单,这时候用户来下单,那么首先就要判断库存是否足够,如果有库存,那么就更新库存。这时候,这个库存就成了热点数据,因为如果有几万人同时下单,那么就会导致同时有几万个线程来更新这个库存数据。原创 2023-08-03 05:00:00 · 668 阅读 · 0 评论 -
【Redis】Redis zset 实现排行榜
排行榜是业务开发中常见的一个场景,如何设计一个好的数据结构能够满足高效实时的查询,下面我们结合一个实际例子来讨论一下。原创 2023-07-26 15:59:27 · 2471 阅读 · 0 评论 -
【面试】 redis击穿现象?如何防止击穿?
简单地来说,就是在缓存失效的时候(判断拿出来的值为空),不是立即去load db,而是先使用缓存工具的某些带成功操作返回值的操作(比如Redis的SETNX或者Memcache的ADD)去set一个mutex key,当操作返回成功时,再进行load db的操作并回设缓存;比如淘宝双十一,对于某个特价热门的商品信息,缓存在Redis中,刚好0点,这个商品信息在Redis中过期查不到了,这时候大量的用户又同时正好访问这个商品,就会造成大量的请求同时到达数据库。注意: 这里指的是单个key发生高并发!原创 2023-07-25 12:25:47 · 734 阅读 · 1 评论 -
【Redis 】Redis 的脑裂现象和解决方案
此时的 min-slaves-to-write 和 min-slaves-max-lag 的组合要求就无法得到满足,原主库就会被限制接收客户端请求,客户端也就不能在原主库中写入新数据,就可以避免脑裂现象的发生了。这两个配置项组合后的要求是,主库连接的从库中至少有 N 个从库,和主库进行数据复制时的 ACK 消息延迟不能超过 T 秒,否则,主库就不会再接收客户端的请求了。数据丢失不一定是发生了脑裂,最常见的原因是主库的数据还没有同步到从库,结果主库发生了故障,等从库升级为主库后,未同步的数据就丢失了。原创 2023-07-06 15:46:53 · 3218 阅读 · 0 评论 -
【Redisson】Redisson--分布式中几种锁
Redisson的分布式可重入读写锁RReadWriteLock Java对象实现了java.util.concurrent.locks.ReadWriteLock接口。该对象允许同时有多个读取锁,但是最多只能有一个写入锁。Redisson分布式可重入公平锁也是实现了java.util.concurrent.locks.Lock接口的一种RLock对象。Redisson的分布式可重入锁RLock Java对象实现了java.util.concurrent.locks.Lock接口,同时还支持自动过期解锁。原创 2023-07-04 15:31:35 · 1311 阅读 · 0 评论 -
【Redisson】Redisson--话题(订阅分发)
最后把我们需要推送的MUser对象,使用RTopic对象的publish方法加入到消息队列中。我们在数据库中找到这个用户,然后把这个用户对象塞入Redisson的消息队列中。之前在用Redis的时候,可以利用List这种数据类型的左进右出的特性,能够做消息中间件。为了让我们有一个类似监听器的对象,我们可以实现一个叫做ApplicationRunner接口,然后这个实现类就会一直在内存中。实现Ordered接口为其制定顺序,因为可能有多个ApplicationRunner接口的实现类。原创 2023-07-04 14:22:40 · 494 阅读 · 0 评论 -
【Redisson】Redisson--分布式远程服务(Remote Service)
B节点向Redisson注册中心订阅这些API接口,因此它可以向Redisson服务器发送这些请求,这些请求最终会被注册中心转发到A节点。这样,B节点就能够通过Redisson注册中心与A节点通信,从而实现远程服务调用功能。expectResultWithin(15,TimeUnit.SECONDS)表示,如果生产端服务器能够接通的话,在15秒之内需要返回数据,否则报异常No response after 15000ms for request。消费端项目B需要与生产端连接相同的Redisson服务器。原创 2023-07-04 11:25:07 · 1437 阅读 · 0 评论 -
【Redisson】Redisson--限流器
主要原理就是调用接口之前,需要拥有指定个令牌。限流器每秒会产生X个令牌放入令牌桶,调用接口需要去令牌桶里面拿令牌。如果令牌被其它请求拿完了,那么自然而然,当前请求就调用不到指定的接口。基于Redis的分布式限流器RateLimiter可以用来在分布式环境下现在请求方的调用频率。既适用于不同Redisson实例下的多线程限流,也适用于相同Redisson实例下的多线程限流。但是有每10秒只允许发送1次的限制。用了一个死循环,但是从日志的打印效果上来看,每10秒才请求到一次我们的发送短信接口。原创 2023-07-04 11:09:06 · 4616 阅读 · 0 评论 -
【Redisson】Redisson--布隆(Bloom Filter)过滤器
布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。上面这句介绍比较全面的描述了什么是布隆过滤器,如果还是不太好理解的话,就可以把布隆过滤器理解为一个set集合,我们可以通过add往里面添加元素,通过contains来判断是否包含某个元素。原创 2023-05-15 19:10:39 · 5342 阅读 · 1 评论 -
【Redisson】Redisson--基础入门
之前用的Redis,都是用的原生的RedisTempale或者是StringRedisTemplate,各种API非常的难易记忆,每次用的时候还得去网上查询API文档,真是麻烦。所以我在想,能不能自己提供一个Redis的便捷工具。按道理,几乎每个公司都会有一套RedisService的实现,但是在我看来还是不够完美,功能不算是强大。无意间在网上看到了Redisson,号称是Redis正确使用姿势。原创 2023-07-03 23:19:54 · 1396 阅读 · 0 评论 -
【技术选型】Redis的几种集群方案、及优缺点对比
客户端分片是把分片的逻辑放在Redis客户端实现,(比如:jedis已支持Redis Sharding功能,即ShardedJedis),通过Redis客户端预先定义好的路由规则(使用一致性哈希),把对Key的访问转发到不同的Redis实例中,查询数据时把返回结果汇集。在服务开发中,单机都会存在单点故障的问题,及服务部署在一台服务器上,一旦服务器宕机服务就不可用,所以为了让服务高可用,分布式服务就出现了,将同一服务部署到多台机器上,即使其中几台服务器宕机,只要有一台服务器可用服务就可用。原创 2023-06-26 09:16:56 · 1483 阅读 · 0 评论 -
【redis】redis的5种数据结构及其底层实现原理
比如扩展哈希表,就是为ht[1]分配一块大小为ht[0]两倍的空间,然后把ht[0]的数据通过rehash的方式全部迁移到ht[1],最后释放ht[0],使ht[1]成为ht[0],再为ht[1]分配一个空哈希表。空间复杂度:也是以每两个节点取一个索引为例,第一层n个节点,第二层n/2,第三次n/4,等比序列求和,或者取极限,可以认为索引节点数量无限接近于n,所以空间复杂度为O(n)。然后看每层遍历多少个元素,首先最高层最多遍历3个节点,就能往下走了,同理,次高层也最多遍历三个节点,就能往下走。原创 2023-06-16 22:18:17 · 2017 阅读 · 0 评论 -
【Redis】Redis主从复制
下面我们来看看redis的主从复制。为了提高redis的性能,需要将读写进行分类,例如:一台redis负责写,其他redis负责读,此时就需要用到redis的读写分离,即:Master-Slave。上述就是Redis的主从复制,希望对大家理解redis有所帮助。原创 2023-05-31 17:23:59 · 2626 阅读 · 0 评论 -
【Redis】浅谈Redis-集群(Cluster)
下面我们来看看redis的集群实现。redis集群,即对redis的一种水平扩容,主要解决并发写量太大有性能瓶颈,单台redis容量限制的问题。n>3:一个集群至少有3个master,新master的选举需要大于半数的集群master节点同意才能选举成功,如果只有两个master节点,其中一个宕机了,达不到选举新master的条件。上述就是Redis的集群实现,可能存在不详细的地方,请大家多多指出。同时也希望对大家理解redis有所帮助。原创 2023-05-31 16:11:49 · 3114 阅读 · 0 评论 -
【Redis】Redis 中地理位置功能 Geospatial 了解一下?
Geospatial Indexes 是 Redis 提供的一种数据结构,用于存储和查询地理位置信息。它可以将地理位置的经度和纬度编码为二维平面上的点,并支持根据距离或矩形区域查询附近的地理位置点,这使得它在很多场景下被广泛应用,比如 LBS(Location Based Service)、智能推荐、出行规划等。Redis 中 Geospatial Indexes 是通过有序集合实现的,其内部使用 zset 数据类型来存储地理位置点的经纬度和成员信息。原创 2023-05-31 10:13:58 · 2980 阅读 · 0 评论 -
【分布式锁】Redisson分布式锁底层原理
现在最流行的redis分布式锁就是Redisson了,来看看它的底层原理就了解redis是如何使用分布式锁的了。原创 2023-05-21 17:04:08 · 1385 阅读 · 0 评论 -
【Redis】Redis中bitmap的原理和使用
bigmap 基于最小的单位bit进行存储,最大优势是非常省空间;设置时候时间复杂度O(1)、读取时候时间复杂度O(n),操作是非常快的;二进制数据的存储,进行相关计算的时候非常快,也能方便扩容;不要给一个很短的 bigmap 设置很长位的偏移量的值,这样有可能堵塞。原创 2023-05-15 22:12:51 · 1652 阅读 · 0 评论 -
【Redis】Redis位图(bitmap)介绍和在签到场景的应用
基本原理:《Redis设计与实现》中对位图的实现描述是:Redis使用字符串对象来表示位数组,因为字符串对象使用的SDS数据结构是二进制安全的,所以程序可以直接使用SDS结构来保存位数组,并使用SDS结构的操作函数来处理为数组。所以位图本质上结构就是redis的字符串类型SDS(simple dynamic string)。计算机的存储,都是以二进制0和1存储的数据,位图就是直接对数据的比特位进行读取、赋值等操作。原创 2023-05-15 21:53:52 · 777 阅读 · 0 评论 -
【Redisson】Redisson--分布式锁的使用(推荐使用)
在某些场景中,多个进程必须以互斥的方式独占共享资源,这时用分布式锁是最直接有效的。随着技术快速发展,数据规模增大,分布式系统越来越普及,一个应用往往会部署在多台机器上(多节点),在有些场景中,为了保证数据不重复,要求在同一时刻,同一任务只在一个节点上运行,即保证某一方法同一时刻只能被一个线程执行。原创 2023-05-11 09:39:11 · 3371 阅读 · 0 评论 -
【Redis】Redis分布式锁的10个坑
日常开发中,经常会碰到秒杀抢购等业务。为了避免并发请求造成的库存超卖等问题,我们一般会用到Redis分布式锁。但是使用Redis分布式锁,很容易踩坑哦~ 本文田螺哥将给大家分析阐述,Redis分布式锁的10个坑~原创 2023-05-04 19:13:45 · 1718 阅读 · 4 评论 -
【Redis】Redis持久化机制
Redis提供了两种主要的持久化机制:RDB持久化和AOF持久化。此外,还可以采用混合持久化(RDB + AOF)的方式,将这两种持久化方式结合在一起。下面我们简要概述这些持久化机制。RDB持久化、AOF持久化和混合持久化。RDB持久化通过定期生成数据快照实现持久化,具有快速恢复和更小的存储空间等优点,但可能存在数据丢失和子进程占用内存等缺点。AOF持久化通过记录所有写操作命令实现持久化,具有更高的数据安全性和更好的容错性等优点,但可能存在较大的存储空间和数据加载速度较慢等缺点。原创 2023-04-20 11:11:47 · 2659 阅读 · 0 评论 -
【redis】Redis为什么能抗住10万并发?
Redis是一个开源的,基于内存的,高性能的键值型数据库。它支持多种数据结构,包含五种基本类型String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合),和三种特殊类型Geo(地理位置)、HyperLogLog(基数统计)、Bitmaps(位图),可以满足各种应用场景的需求。Redis还提供了多种特性,如持久化、事务、发布订阅、Lua脚本、管道、主从复制、哨兵机制、集群机制等,可以保证数据的安全性、一致性和可用性。原创 2023-04-17 17:14:29 · 1344 阅读 · 0 评论 -
【Redis】redis大key和大value的危害,如何处理?
还记得上次和同事一起去面试候选人时,同事提了一个问题:Redis的大key有什么危害?虽说答的是挺好的,但是我又随之产生了另一个疑惑,如果redis的key较长时,会产生什么样的影响呢?查了很多文章,说的都不是特别清楚。所以我决心探究一下这个问题。我们需要知道Redis是如何存储key和value的:根结构为RedisServer,其中包含RedisDB(数据库)。而RedisDB实际上是使用Dict(字典)结构对Redis中的kv进行存储的。原创 2023-03-04 07:15:00 · 4723 阅读 · 4 评论 -
【Redis】Redis高级客户端Lettuce详解
支持Redis的新增命令ZPOPMIN, ZPOPMAX, BZPOPMIN, BZPOPMAX。支持通过Brave模块跟踪Redis命令执行。支持Redis Streams。支持异步的主从连接。支持异步连接池。新增命令最多执行一次模式(禁止自动重连)。全局命令超时设置(对异步和反应式命令也有效)。…等等注意一点:Redis的版本至少需要2.6,当然越高越好,API的兼容性比较强大。原创 2023-03-04 07:00:00 · 2526 阅读 · 0 评论 -
【缓存中间件】redis 支持的数据类型
Redis 数据库支持五种数据类型。字符串(string)哈希(hash)列表(list)集合(set)有序集合(sorted set)位图 ( Bitmaps )基数统计 ( HyperLogLogs )原创 2022-11-18 09:25:51 · 494 阅读 · 0 评论 -
Redis哨兵(Sentinel)模式
主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式。一、哨兵模式概述哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。Redis哨兵这里的哨兵有两个作用通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和.原创 2020-05-28 19:38:46 · 386 阅读 · 0 评论 -
【Redis】Redis与HyperLogLog
今天,我有幸拜读了老钱的《Redis深度历险:核心原理与应用实践》,小册里面有一篇关于HyperLogLog的文章,其中算法部分对本菜鸟来说还是有些晦涩难懂。因此,我写下这篇博客,一是为了将我对Redis与HyperLogLog的理解记录下来;二是为了以更白话的方式来描述Redis与HyperLogLog之间的关系,让小白都能读懂。一、Redis与HyperLogLogRedis是什么我就不再详述了,不知道的人可自行谷歌(baidu)。而HyperLogLog则是一种算法,它提供了不精确的去重计数方案。原创 2020-05-22 22:35:37 · 264 阅读 · 0 评论 -
redis和memcached的区别是什么?
Redis是一个开源的内存数据结构存储,用作数据库,缓存和消息代理;Memcached是一个免费的开源高性能分布式内存对象缓存系统,它通过减少数据库负载来加速动态Web应用程序。Redis与Memcached的区别:1、类型Redis是一个开源的内存数据结构存储系统,用作数据库,缓存和消息代理。Memcached是一个免费的开源高性能分布式内存对象缓存系统,它通过减少数据库负载来加速动态Web应用程序。2、数据结构Redis支持字符串,散列,列表,集合,有序集,位图,超级日志和空间索引;而M.原创 2020-05-12 20:18:15 · 344 阅读 · 0 评论