
Redis
文章平均质量分 73
Micrle_007
这个作者很懒,什么都没留下…
展开
-
redis实际应用实现合集
首先需要把10个观众的id(具体是什么id可以根据实际业务情况自己定义)放到redis 的 set 集合里。从10名观众中抽取奖项,其中一等奖1人,二等奖2人,三等奖3人。插入10个观众,act:002是活动的名字,后面分别是观众id。从10个观众中随机抽2名幸运观众。需要用到redis的。原创 2023-12-11 21:20:44 · 293 阅读 · 0 评论 -
Redis key 过期通知
默认 notify-keyspace-events "" 修改为:notify-keyspace-events Ex。//通知效果如图 RedisKeyExpirationListener.onmessage。只有当key被删除时候 才会通知 并不是在key过期后就马上删除的。转载 2023-11-09 10:09:02 · 938 阅读 · 0 评论 -
spring cache和SpEL表达式
spring cache原创 2023-05-16 08:50:53 · 1652 阅读 · 0 评论 -
注解的方式实现分布式锁
分布式锁转载 2022-08-07 22:05:56 · 526 阅读 · 1 评论 -
redis如何选择合适的数据结构
01 前言redis作为目前最流行的nosql缓存数据库,凭借其优异的性能、丰富的数据结构已成为大部分场景下首选的缓存工具。由于redis是一个纯内存的数据库,在存放大量数据时,内存的占用将会非常可观。那么在一些场景下,通过选用合适数据结构来存储,可以大幅减少内存的占用,甚至于可以减少80%-99%的内存占用。02 利用zipList来替代大量的Key-Value先来看一下场景,在Dsp广告系统、海量用户系统经常会碰到这样的需求,要求根据用户的某个唯一标识迅速查到该用户id。譬如根据ma转载 2021-12-18 20:50:06 · 886 阅读 · 0 评论 -
一次redis乱用导致的事故现场
前言首先说下问题现象:内网sandbox环境API持续1周出现应用卡死,所有api无响应现象。刚开始当测试抱怨环境响应慢的时候 ,我们重启一下应用,应用恢复正常,于是没做处理。但是后来问题出现频率越来越频繁,越来越多的同事开始抱怨,于是感觉代码可能有问题,开始排查。正文top 命令首先发现开发的本地ide没有发现问题,应用卡死时候数据库,redis都正常,并且无特殊错误日志。开始怀疑是sandbox环境机器问题(测试环境本身就很脆!_!)于是ssh上了服务器 执行以下命令top原创 2021-12-08 21:31:05 · 645 阅读 · 0 评论 -
redis什么时候执行rehash
https://blog.youkuaiyun.com/Oooo_mumuxi/article/details/105903889前言上一章把Redis基础类型介绍完了,更深的问题便会问:哈希表会有什么缺点?或者你了解hash吗?它是怎么解决冲突的?Redis渐进式rehash的原理是什么?下面就来深入的解析这些问题。一、字典字典是Redis中存在最广泛的一种数据结构不仅在哈希对象,集合对象和有序结合对象中都有使用,而且Redis所有的Key,Value都是存在db->dict这张字典中的。Re原创 2021-11-24 20:36:17 · 4715 阅读 · 0 评论 -
redis源码编译和调试
https://www.cnblogs.com/grey-wolf/p/12637730.html环境搭建的大体思路windows下安装linux工具链#大家记得在linux上,怎么安装redis那些的吧,是不是有个configure,make,make install啥的,为啥java程序不需要这么弄呢?因为java有jvm,我们的java文件是编译成class,在jvm上运行的,而c语言程序,是直接依赖于操作系统的,同样的c语言程序,比如你要实现网络功能,在windows上和在linux上,转载 2021-11-20 21:12:26 · 635 阅读 · 0 评论 -
redis插槽(slot)分配详解(集群动态新增或删除结点)
https://blog.youkuaiyun.com/qq_41587243/article/details/1153318971.哈希槽的概念Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value时,redis 先对 key(有效值)使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。Redis 集群没有使用一致转载 2021-11-10 07:30:25 · 6042 阅读 · 0 评论 -
redis九大数据类型数据结构及底层源码
https://blog.youkuaiyun.com/weixin_45596022/article/details/113141544一,String字符串1.存储原理1)数据模型set hello word 为例,因为 Redis 是 KV 的数据库,它是通过 hashtable 实现的(我们把这个叫做外层的哈希)。所以每个键值对都会有一个 dictEntry(源码位置:dict.h),里面指向了 key 和 value 的指针。next 指向下一个 dictEntry。typedef struct转载 2021-10-29 16:23:38 · 453 阅读 · 0 评论 -
如何自己实现一个缓存服务
场景:我们对于需要大量计算的场景,希望将结果缓存起来,然后我们一起来实现一个缓存服务。即对于一个相同的输入,它的输出是不变的(也可以短时间不变)。实现说明:这里实现采用GuavaCache+装饰器模式。首先设计一个缓存服务接口。这里定义了一个缓存服务接口,这里的key和Hashmap的key一样,需要覆写equals和hashcode方法。public class CacheableServiceWrapper<I , O> implements转载 2021-07-28 13:02:21 · 420 阅读 · 0 评论 -
设计模式实现一个简单的缓存
一、背景介绍我们日常开发网站时,经常会用到下图这样的下拉框。其中下拉框里面的选项,不会经常变动。对于不会经常变动的数据,如果每次都从数据库读取,可能会影响网站的响应速度。所以通常会把这部分数据缓存起来,使用时直接从缓存读取。如果在项目中引入Redis这一类缓存框架,好像又不太划算,所以我们可以选择自己实现一个简单的缓存。这篇文章的目的不是具体的介绍设计模式,而是结合一个做缓存的案列,介绍设计模式的使用,加深对设计模式的理解。这里实现的缓存也可以应用于实际项目中。为了方便说明,我先用 Entity转载 2021-07-21 10:19:41 · 474 阅读 · 0 评论 -
redis延时双删保证和数据库的一致性
在使用redis时,需要保持redis和数据库数据的一致性,最流行的解决方案之一就是延时双删策略,今天我们就来详细刨析一下注意:要知道经常修改的数据表不适合使用redis,因为双删策略执行的结果是把redis中保存的那条数据删除了,以后的查询就都会去查询数据库。所以redis使用的是读远远大于改的数据缓存。1,首先要理解在并发环境下redis数据一致性的问题所在在多线程并发情况下,假设有两个数据库修改请求,为保证数据库与redis的数据一致性,修改请求的实现中需要修改数据库后,级联修改red转载 2021-06-12 22:04:37 · 1772 阅读 · 1 评论 -
redis LRU和LFU
前言Redis缓存淘汰策略与Redis键的过期删除策略并不完全相同,前者是在Redis内存使用超过一定值的时候(一般这个值可以配置)使用的淘汰策略;而后者是通过定期删除+惰性删除两者结合的方式进行内存淘汰的。这里参照官方文档的解释重新叙述一遍过期删除策略:当某个key被设置了过期时间之后,客户端每次对该key的访问(读写)都会事先检测该key是否过期,如果过期就直接删除;但有一些键只访问一次,因此需要主动删除,默认情况下redis每秒检测10次,检测的对象是所有设置了过期时间的键集合,每次从这个集合中转载 2021-06-10 14:30:30 · 395 阅读 · 0 评论 -
redis 8种淘汰策略
https://blog.youkuaiyun.com/l_mloveforever/article/details/111665927前言:redis数据库的最大缓存、主键失效、淘汰机制等参数都是通过配置文件来配置的,docker容器建立默认是无配置文件启动的,所以要下载一个redis.conf文件下载链接:redis.conf非docker容器的应该在redis的安装目录下就可以找到该文件(/usr/local/redis)打开该文件找到内存限制(MEMORY MANAGEMENT)我们可转载 2021-06-10 10:13:43 · 358 阅读 · 0 评论 -
redis底层数据结构
系列redis数据淘汰原理redis过期数据删除策略redis server事件模型redis cluster mget 引发的讨论redis 3.x windows 集群搭建redis 命令执行过程redis string底层数据结构redis list底层数据结构redis hash底层数据结构redis set底层数据结构redis zset底层数据结构redis 客户端管理redis 主从同步-slave端redis 主从同步-master端redis 主从超时检测redis aof持久化red转载 2021-06-09 16:18:55 · 126 阅读 · 0 评论 -
redis源码阅读
https://blog.youkuaiyun.com/Shinlyzsljay/article/details/103653581Redis源码阅读【1-简单动态字符串】Redis源码阅读【2-跳跃表】Redis源码阅读【3-Redis编译与GDB调试】Redis源码阅读【4-压缩列表】Redis源码阅读【5-字典】Redis源码阅读【6-整数集合】Redis源码阅读【7-quicklist】Redis源码阅读【8-命令处理生命周期-1】Redis源码阅读【8-命令处理生命周期-2】Redis源转载 2021-05-28 12:44:15 · 167 阅读 · 0 评论 -
Windows下编译redis
https://blog.youkuaiyun.com/oooo2316/article/details/107545700Redis 6.0出来了,但微软提供的Windows版Redis竟然还是3.2版本,不能忍,所以准备自己编译安装新版Redis。编译Redis需要gcc和make,这里就用MSYS2来提供gcc和make环境。先下载MSYS2,我用的清华的源 https://mirrors.tuna.tsinghua.edu.cn/msys2/distrib/x86_64/ ,里面有安装版(后缀是转载 2021-05-25 09:29:58 · 976 阅读 · 0 评论 -
redis闲聊
redis主从结构闲聊(一主二从):如果主机挂了,那么所有的slave将原地待命,不会有slave篡位,换句话说,他们还都是slave模式,一旦主机回复启动,slave立刻又能和主机建立连接,继续主从模式 如果其中一个slave挂了,那么其他两个继续原来的主从工作模式,只是这个挂了的slave再回复启动的时候,它将不再是原来的那个slave,而且和原来的那个主从系统已经没有关系了,自己变成了一个独立的机器,并且是master,如果想和原来的那个主从系统再次建立练习,需要重新执行命令:> SLAV原创 2021-05-19 21:48:05 · 176 阅读 · 1 评论 -
一致性哈希和redis分布式集群
前言互联网公司中,绝大部分都没有马爸爸系列的公司那样财大气粗,他们即没有强劲的服务器、也没有钱去购买昂贵的海量数据库。那他们是怎么应对大数据量高并发的业务场景的呢?这个和当前的开源技术、海量数据架构都有着不可分割的关系。比如通过mysql、nginx等开源软件,通过架构和低成本的服务器搭建千万级别的用户访问系统。怎么样搭建一个好的系统架构,这个话题我们能聊上个七天七夜。这里我主要结合Redis集群来讲一下一致性Hash的相关问题。Redis集群的使用我们在使用Redis的过程中,为了保证Re转载 2021-04-18 10:53:18 · 229 阅读 · 0 评论 -
Redis主从同步机制
今天想和大家分享有关 Redis 主从同步(也称「复制」)的内容。我们知道,当有多台 Redis 服务器时,肯定就有一台主服务器和多台从服务器。一般来说,主服务器进行写操作,从服务器进行读操作。那么这里有存在一个问题:从服务器如何和主服务器进行数据同步的呢?这个问题,就是通过今天的内容:主从同步来解决的。文章内容依旧比较干,建议大家静下心来专心看,文末会给大家做个简单总结归纳。1. 如何进行主从同步假如,现在有 2 台 Redis 服务器,地址分别是 127.0.0.1:6379 和转载 2021-04-07 17:35:58 · 268 阅读 · 0 评论 -
redis通过lua脚本实现分布式锁
实现原理。说实话,如果在公司里落地生产环境用分布式锁的时候,一定是会用开源类库的,比如Redis分布式锁,一般就是用Redisson框架就好了,非常的简便易用。大家如果有兴趣,可以去看看Redisson的官网,看看如何在项目中引入Redisson的依赖,然后基于Redis实现分布式锁的加锁与释放锁。下面给大家看一段简单的使用代码片段,先直观的感受一下:怎么样,上面那段代码,是不是感觉简单的不行!此外,人家还支持redis单实例、redis哨兵、redis cluster、redis转载 2020-12-11 16:30:43 · 1003 阅读 · 0 评论 -
redis实现订单过期取消
redis过期监听的实现:1.修改redis.windows.conf配置文件中notify-keyspace-events的值默认配置notify-keyspace-events的值为 ""修改为 notify-keyspace-events Ex这样便开启了过期事件2. 创建配置类RedisListenerConfig(配置RedisMessageListenerContainer这个Bean)package com.zjt.shop.config;import org..转载 2020-12-01 09:42:28 · 1088 阅读 · 0 评论 -
如何设计一个秒杀系统
作者:敖丙链接:https://www.zhihu.com/question/54895548/answer/923987542来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。正文首先设计一个系统之前,我们需要先确认我们的业务场景是怎么样子的,我就带着大家一起假设一个场景好吧。场景我们现场要卖100件下面这个婴儿纸尿裤,然后我们根据以往这样秒杀活动的数据经验来看,目测来抢这100件纸尿裤的人足足有10万人。(南极人打钱!)你一听,完了呀,这我们.原创 2020-11-26 23:31:18 · 301 阅读 · 0 评论 -
redis常见问题和解决方案
目录redis常见问题和解决方案 持久化、主从问题 Hashtag(可以实现批量操作) Redis事务 Redis的多数据库机制 Redis集群机制不足的地方 Redis集群模式下,如何进行批量操作 Redis做读写分离有什么问题 大文本数据必须压缩再存储 线上 Redis 禁止使用 Keys 正则匹配操作 线上禁止使用 monitor 命令 与tair的对比选型 如何借助 有序集合 实现多维排序 转载:https://www.cnblogs...原创 2020-11-19 23:05:00 · 414 阅读 · 0 评论 -
redis持久化方法
“快醒醒!快醒醒!”,隐隐约约,我听到有人在叫我。慢慢睁开眼睛,原来旁边是MySQL大哥。“我怎么睡着了?”“嗨,你刚才是不是出现了错误,整个进程都崩溃了!害得一大堆查询请求都给我怼过来了!”,MySQL说到。刚刚醒来,脑子还有点懵,MySQL大哥扶我起来继续工作。“糟了!我之前缓存的数据全都不见了!”“WTF?你没有做持久化吗?”,MySQL大哥一听脸色都变了。我尴尬的摇了摇头,“我都是保存在内存中的,所以才那么快啊”“那也可以在硬盘上保存一下啊,遇到这种情况全部从头再来建转载 2020-09-21 08:46:32 · 132 阅读 · 0 评论 -
LSET与LREM结合删除list中特定索引的值
Redis可以通过LINDEX key index获取list中的特定值, 但无法直接删除特定索引下的值.LSET与LREM结合删除list中特定索引的值两步:先用LSET在指定索引位置上设置特殊值:LSET key index value在指定索引位置的值替换为value 再用LREM删除该特殊值:LREM key n value, 从左边删除n个value例如删除list1索引3对应的在值LSET list1 3 delLREM list1 1 del补充在Redis..原创 2020-09-16 08:29:15 · 207 阅读 · 0 评论 -
redis 的 key 设计原则
在设计redis key 的时候,我们要遵循“一对多”的原则,就是“一”作为redis 的 key,“多”作为value,啥都不说了,上实际业务场景,比如下单的业务,设计方法如下:1、由于一个订单肯定包含多个部分,比如:价格,商品id,订单日期等,所以订单和订单详情是一对多的关系,可以用hash 类型:hmset order:1 goodId 001 price 30 date 2020-09-06hmset order:2 goodId 002 price 30 date 2020-...原创 2020-08-24 08:54:24 · 1418 阅读 · 0 评论 -
redis scan命令详解
翻译自:https://redis.io/commands/scan使用SCAN命令和与之密切相关的命令SSCAN,HSCAN和ZSCAN以便逐步迭代元素集合。SCAN迭代当前选择的Redis数据库中的密钥集。 SSCAN迭代Sets类型的元素。 HSCAN迭代Hash类型的字段及其关联的值。 ZSCAN迭代“排序集”类型的元素及其关联的分数。由于这些命令允许增量迭代,每次调用仅返回少量元素,因此可以在生产中使用它们,而不会受到诸如KEYS或SMEMBERS之类的命令的不利影响,这些命令在被原创 2020-08-21 12:38:49 · 2354 阅读 · 0 评论 -
Redis内存淘汰策略
Redis作为当前最常用的开源内存数据库,性能十分高,据官方数据表示Redis读的速度是110000次/s,写的速度是81000次/s 。而且Redis支持数据持久化,众多数据结构存储,master-slave模式数据备份等多种功能。但是长期将Redis作为缓存使用,难免会遇到内存空间存储瓶颈,当Redis内存超出物理内存限制时,内存数据就会与磁盘产生频繁交换,使Redis性能急剧下降。此时如何淘汰无用数据释放空间,存储新数据就变得尤为重要了。对此,Redis在生产环境中,采用配置参数maxmemo原创 2020-08-21 09:36:23 · 193 阅读 · 0 评论 -
秒杀商品超卖事故:Redis分布式锁请慎用!
基于Redis使用分布式锁在当今已经不是什么新鲜事了。本篇文章主要是基于我们实际项目中因为redis分布式锁造成的事故分析及解决方案。背景:我们项目中的抢购订单采用的是分布式锁来解决的。有一次,运营做了一个飞天茅台的抢购活动,库存100瓶,但是却超卖了!要知道,这个地球上飞天茅台的稀缺性啊!!!事故定为P0级重大事故...只能坦然接受。整个项目组被扣绩效了~~事故发生后,CTO指名点姓让我带头冲锋来处理,好吧,冲~事故现场经过一番了解后,得知这个抢购活动接口以前从来没有出现过这种情况,但是这次为原创 2020-08-20 15:22:13 · 301 阅读 · 0 评论 -
redis 主从原理
1.Redis主从搭建主从的搭建很简单,主节点设置连接密码,从节点的配置上主节点的ip和端口,以及密码,一般从节点我们都设置只读模式。主节点配置: 主节点密码: requirepass xxx从节点中配置: #主节点 replicaof 192.168.0.67 6379 #从节点只读 replica-read-only yes #主节点连接密码 masterauth root使用对应的配置文件启动master和slave服务即可。如果不使转载 2020-08-11 14:02:44 · 232 阅读 · 0 评论 -
redis 哨兵的原理
关于哨兵的原理,关键是了解以下几个概念:定时任务:每个哨兵节点维护了3个定时任务。定时任务的功能分别如下:通过向主从节点发送info命令获取最新的主从结构;通过发布订阅功能获取其他哨兵节点的信息;通过向其他节点发送ping命令进行心跳检测,判断是否下线。主观下线:在心跳检测的定时任务中,如果其他节点超过一定时间没有回复,哨兵节点就会将其进行主观下线。顾名思义,主观下线的意思是一个哨兵节点“主观地”判断下线;与主观下线相对应的是客观下线。客观下线:哨兵节点在对主节点进行主观下线后,会通过se.转载 2020-08-11 13:58:58 · 186 阅读 · 0 评论 -
redis内存模型
请至原文观赏:https://www.cnblogs.com/kismetv/p/8654978.html#t1前言Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分。我们使用Redis时,会接触Redis的5种对象类型(字符串、哈希、列表、集合、有序集合),丰富的类型是Redis相对于Memcached等的一大优势。在了解Redis的5种对象类型的用法和特点的基础上,进一步了解Redis的内存模型,对Redis的使转载 2020-08-05 17:05:07 · 166 阅读 · 0 评论 -
Redis 数据类型
Strings字符串是Redis值的最基本类型。Redis字符串是二进制安全的,这意味着Redis字符串可以包含任何类型的数据,例如JPEG图像或序列化的Ruby对象。字符串值的最大长度为512 MB。您可以使用Redis中的字符串来做许多有趣的事情,例如,您可以:使用INCR系列中的命令将字符串用作原子计数器:INCR,DECR,INCRBY。 使用APPEND命令附加到字符串。 使用字符串作为GETRANGE和SETRANGE的随机访问向量。 在很小的空间内编码大量数据,或者使用G原创 2020-08-03 10:16:17 · 158 阅读 · 0 评论 -
redis总结
目录:Redis五大对象 Redis持久化 Redis主从复制 慢查询日志 Redis Shell Pipeline 事务 Bitmaps HyperLogLog 发布订阅 GEO 哨兵 集群 缓存设计1、Redis五大对象:在Redis中有五大对象,分别是String、List、Hash、Set、Sorted Set。这五大对象都有自己独特的编码方式,每个编码的实现都不一样,有自己独特的使用场景。通过命令:object encoding keyName查看键的编转载 2020-07-20 11:44:40 · 234 阅读 · 0 评论 -
redis集群搭建
这里的Redis集群指的是Redis Cluster,它是Redis在3.0版本正式推出的专用集群方案,有效地解决了Redis分布式方面的需求。当单机内存、并发、流量等遇到瓶颈的时候,可以采用这种Redis Cluster方案进行解决。分区规则Redis Cluster采用虚拟槽(slot)进行数据分区,即使用分散度良好的哈希函数把所有键映射到一个固定范围的整数集合里,这里的整数就是槽(slot)。Redis Cluster槽的范围是0~16383,计算公式:slot=CRC16(key) &转载 2020-07-14 15:51:55 · 504 阅读 · 0 评论 -
redis 经典36问
文章正文1、什么是 Redis?简述它的优缺点?Redis 的全称是:Remote Dictionary.Server,本质上是一个 Key-Value 类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据 flush 到硬盘上进行保存。因为是纯内存操作,Redis 的性能非常出色,每秒可以处理超过 10 万次读写操作,是已知性能最快的Key-Value DB。Redis 的出色之处不仅仅是性能,Redis 最大的魅力是支持保存多种数据转载 2020-07-14 07:25:22 · 230 阅读 · 0 评论 -
redis常用命令
reference:http://doc.redisfans.com/1.基于内存的key-value数据库2.基于c语言编写的,可以支持多种语言的api //set每秒11万次,取get 81000次3.支持数据持久化4.value可以是string,hash, list, set, sorted set使用场景1. 去最新n个数据的操作2. 排行榜,取top n个数据 //最佳人气前10条3. 精确的设置过期时间4. 计数器5. 实时系统, 反垃圾系统6. pub, sub发布原创 2020-07-13 21:54:06 · 189 阅读 · 0 评论 -
Redis的那些最常见面试问题
随笔:经过长达一周的奔波和面试,电话面试,回首今天终于成功的入职了,总共面试了大概10家公司,包括阿里,京东,IBM等等,京东技术过了,学历因为非统招就被pass了,阿里面了2次电话面试就没下文了,估计是我当时最后提问题的时候减分了吧,其他的也有一些offer,不是不想去,就是了无音讯了,眼看年关将近,也由不得我挑挑拣拣了,就直接进了我现在这家公司,主要是感觉公司人不错,薪水这方面也就...转载 2018-06-21 14:47:46 · 292 阅读 · 0 评论