
Redis
雪落南城
这一场人间流浪,长随步履温柔相候
展开
-
记一次redis导致的商品超卖问题
背景朋友反馈了一个商品超卖的问题,代码大致逻辑是将商品库存数量存在redis中,在执行扣减库存逻辑的时候,使用了lua脚本,在lua脚本中先查询当前库存数量,和要扣减的值作比较,如果库存数量[>=]要扣减的值,那么再执行decrby操作扣减库存,如果库存数量[<]要扣减的值,则不扣减;扣减成功后的数据库也再执行一遍减库存操作然而出现了商品超卖的问题,直接现象就是redis日志打印了两次相同剩余库存和待扣减库存分析1.很多人认为lua脚本有问题,但是这个是可以排除的,lua脚本是原子性的,原创 2021-11-11 13:30:21 · 1311 阅读 · 1 评论 -
数据库-缓存数据一致性
1、不推荐更新缓存 建议删除缓存2、采用延迟双删先删缓存,后更新数据库,延时再删一次缓存但是会存在问题:改库后延时时间内的数据可能是旧数据如果业务场景要求,改库成功就不能使用旧数据,可以采用如下优化方案:新增一个缓存类型,记录key是否被更新过,并且设置自动过期时间在访问的时候,先查询key是否被更新过,如果没有 查从库,如果有,查主库...原创 2020-09-07 17:29:49 · 263 阅读 · 0 评论 -
Redis-pipeline初相识
背景今天在调研公司BCD平台Frog的时候,在消费延时队列的时候,碰到了一个名词,pipeline,简单探究一下吧redis请求原理Redis其实是一个基于TCP协议的CS架构的内存数据库。所有的操作都是一个request一个response的同步操作。redis每接收到一个命令就会处理一个命令,并同步返回结果。这样带来的问题就是,一个命令就会产生一次RTT,这样的话必然会消耗大量的网络IO。什么是RTTredis客户端执行一条命令分4个过程:发送命令-〉命令排队-〉命令执行-〉返回结果这个过原创 2020-07-31 00:10:52 · 259 阅读 · 0 评论 -
redis分布式锁原理
单redis时加锁1.先拿key进行setnx(set not exist,如果key值为空,则正常设置,返回1,否则不会进行设置并返回0)操作,如果设置成功,表示已经获得锁,否则并没有获取锁。2.如果没有获得锁,去Redis上拿到该key对应的值,在该key上我们存储一个时间戳(用毫秒表示,t1),为了避免死锁以及其他客户端占用该锁超过一定时间(5秒),使用该客户端当前时间戳,与存储的时...原创 2020-03-16 00:33:40 · 1138 阅读 · 0 评论 -
RedisCluster集群间通信gossip协议
基础通讯原理集群元数据的维护一般分为集中式和gossip集中式:集群的元数据存储在某个节点上gossip:每个节点相互通信redis cluster采用gossipredis集群内部通讯端口号=对外端口号+10000gossip协议包含ping、pong、meet、failmeet:某个节点发送meet给新加入的节点,让新节点加入到集群中,然后新节点会与其他节点进行通讯ping:...原创 2020-03-15 16:15:46 · 1147 阅读 · 0 评论 -
Redis主从模式浅析
主从架构原理1、主从架构的核心原理当启动一个slave node的时候,它会发送一个PSYNC命令给master node如果这是slave node重新连接master node,那么master node仅仅会复制给slave部分缺少的数据; 否则如果是slave node第一次连接master node,那么会触发一次full resynchronization开始full resy...原创 2020-03-09 00:56:24 · 283 阅读 · 0 评论 -
Redis如何保证高并发高可用
1、主从结构支持高并发我们使用redis缓存,主要目的是为了读的高并发,所以可以采用一主多从,读写分离,master负责写,写完后异步将数据复制到slave中,slave负责分担读请求redis replication 原理(1)redis采用异步方式复制数据到slave节点,不过redis 2.8开始,slave node会周期性地确认自己每次复制的数据量(2)一个master node...原创 2020-03-08 17:33:59 · 644 阅读 · 0 评论 -
Redis删除策略及内存淘汰机制
问题场景:某些key设置了过期时间为什么到时间了内存占用没有少原因:redis的删除策略是 定期删除 + 惰性删除定期删除:redis默认每隔100ms就随机抽取一部分设置了过期时间的key进行检查,如果过期就删除。并不是遍历所有的key,只是取一部分,否则会造成性能问题。惰性删除:在获取某个key的时候进行检查,如果过期就删除。两种手段结合...原创 2020-03-08 14:31:55 · 434 阅读 · 0 评论 -
Redis线程模型为什么单线程会这么快
redis的线程模型图:1)文件事件处理器redis基于reactor模式开发了网络事件处理器,这个处理器叫做文件事件处理器,file event handler。这个文件事件处理器,是单线程的,redis才叫做单线程的模型,采用IO多路复用机制同时监听多个socket,根据socket上的事件来选择对应的事件处理器来处理这个事件。如果被监听的socket准备好执行accept、read、...原创 2020-03-08 12:31:22 · 339 阅读 · 0 评论 -
Redis Sentinel-哨兵模式浅析
参考链接:https://www.jianshu.com/p/21110d3130bcRedis Sentinel 哨兵模式,使用场景 数据量不大 + 高可用原理简介Redis Sentinel 是 Redis 官方推荐的高可用性(HA)解决方案,这是生产环境中最实用也是最常用的方案。这里涉及到另一个概念:master-slaver(主从模式)。很好理解,就是常用的主备模式,例如 ...原创 2019-10-18 15:21:55 · 571 阅读 · 0 评论 -
RedisTemplate ZSet使用、实现排行榜
1、@Beanpublic RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException { RedisTemplate<Object, Object> template = new ...原创 2019-10-18 14:57:58 · 4046 阅读 · 0 评论 -
Redis 7问
你好 Redis,能回答我 7 个问题吗?陈于喆石杉的架构笔记8月11日公众号后台回复“学习”,获取作者独家秘制精品资料Hello,Redis!我们相处已经很多年了,从模糊的认识到现在我们已经深入结合,你的好我一直都知道也一直都记住能否再让我多问你的几个问题,让我更加深入的去了解你。一、Redis 的通讯协议是什么Red...原创 2019-09-11 15:13:02 · 241 阅读 · 0 评论 -
使用redisClient查找key时查不到
因为redis分很多库所以当前库找不到时尝试切库select 库编号原创 2019-09-10 15:41:30 · 5291 阅读 · 4 评论 -
使用RedisTemplate时set的key乱码
在使用redisTemplate时,程序get、set key都没有问题但是在redis client 查找该key时 总是查不到最后发现是该key乱码了导致查询不到解决方法:@Beanpublic RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFa...原创 2019-09-10 15:32:24 · 3092 阅读 · 0 评论 -
Redis之GEO
redis新增了对地理位置的支持相关命令geoadd时间复杂度为O(log(N))geoadd cityGeo 116.405285 39.904989 "北京"geoadd cityGeo 121.472644 31.231706 "上海"添加经纬度信息geopos时间复杂度为O(log(N))127.0.0.1:6379> geopos cityGe...原创 2019-09-01 23:02:21 · 702 阅读 · 0 评论 -
Redis集群为什么使用16384个slots
why redis-cluster use 16384 slots? crc16() can have 2^16 -1=65535 different remainders。 The reason is: Normal heartbeat packets carry the full configuration of a node, that ca...原创 2019-08-29 15:06:33 · 643 阅读 · 0 评论 -
Redis Cluster原理
参考:https://blog.youkuaiyun.com/yejingtao703/article/details/78484151·https://www.javazhiyin.com/22957.htmlhttps://segmentfault.com/a/1190000014442144Redis Cluster使用场景:大数据 + 高并发 +高可用主从 + 哈希re...原创 2019-08-28 17:38:14 · 480 阅读 · 0 评论