随笔 - 2  文章 - 721  评论 - 6  阅读 - 35万

文章分类 -  Redis

1 2 3 下一页
Redis之订阅发布
摘要:消息的发送者与接收者之间通过 channel 绑定:channel 可以是确定的字符串,也可以基于模式匹配;客户端可以订阅任意多个 channel;发送者发送的消息无法持久化,所以可能会造成消息丢失;由于消息无法持久化,所以,消费者无法收到在订阅 channel 之前发送的消息;发送者与客户端之间的 阅读全文
posted @ 2023-03-25 20:28 溪水静幽 阅读(81) 评论(0) 推荐(0) 编辑
基本数据类型与存储原理
摘要:String字符串 redis 是KV 的数据库,是通过hashtable 实现的。每个键值对都会有一个dictEntry,里面指向了key 和value 的指针。next 指向下一个dictEntry。set hello word 为例 typedef struct dictEntry { voi 阅读全文
posted @ 2021-08-08 11:18 溪水静幽 阅读(288) 评论(0) 推荐(0) 编辑
setbit命令
摘要:通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身。8个bit可以组成一个Byte,所以bitmap本身会极大的节省储存空间。 语法:setbit key offset value 描述: 对key所储存的字符串值,设置或清除指定偏移量上的位(bit)。 位的设置或清除取决 阅读全文
posted @ 2021-08-08 00:42 溪水静幽 阅读(1739) 评论(0) 推荐(0) 编辑
动态字符串(Simple Dynamic Stirng)
摘要:SDS基本结构如下: struct sdshdr { int len; // 记录buf数组中已使用字节的数量,等于SDS所保存字符串的长度 int free; // 记录buf数组中未使用字节的数量 char buf[];// 字节数组,用于保存字符串 }; SDS的优势 1、O(1)时间复杂度获 阅读全文
posted @ 2021-07-26 16:58 溪水静幽 阅读(162) 评论(0) 推荐(0) 编辑
Redlock
摘要:redlock算法大概是这样的:在Redis的分布式环境中,假设有N个Redis master。这些节点完全互相独立,不存在主从复制或者其他集群协调机制。我们确保将在N个实例上使用与在Redis单实例下相同方法获取和释放锁。现在假设有5个Redis master节点,同时我们需要在5台服务器上面运行 阅读全文
posted @ 2021-03-28 17:38 溪水静幽 阅读(621) 评论(0) 推荐(0) 编辑
scan命令
摘要:需要从 Redis 实例成千上万的 key 中找出特定前缀的 key 列表来手动处理数据,可能是修改它的值,也可能是删除 key。这里就有一个问题,如何从海量的 key 中找出满足特定前缀的 key 列表来? 命令 keys * 命令缺点:1、没有 offset、limit 参数,一次性吐出所有满足 阅读全文
posted @ 2020-08-04 07:59 溪水静幽 阅读(729) 评论(0) 推荐(0) 编辑
布隆过滤器
摘要:布隆过滤器可以用于检索一个元素是否在一个集合中。优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。解决网页 URL 去重、垃圾邮件识别、大集合中重复元素的判断和缓存穿透等问题。 当往简单数组或列表中插入新数据时,将不会根据插入项的值来确定该插入项的索引值。这意味着新插 阅读全文
posted @ 2020-07-12 12:39 溪水静幽 阅读(146) 评论(0) 推荐(0) 编辑
缓存穿透,缓存击穿,缓存雪崩解决方案
摘要:缓存穿透 访问一个不存在的key,缓存不起作用,请求会穿透到DB,流量大时DB会挂掉。缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1”的数据或id为特别大不存在的数据。这也是经常提的缓存命中率问题。 解决方案 采用布隆过滤器,使用一个足够大的bitmap,用于存储可 阅读全文
posted @ 2020-07-12 11:43 溪水静幽 阅读(144) 评论(0) 推荐(0) 编辑
redis 哨兵的多个核心底层原理的深入解析(包含 slave 选举算法)
摘要:sdown 和 odown 是两种失败状态 sdown 是主观宕机 一个哨兵如果自己觉得一个 master 宕机,那么就是主观宕机 odown 是客观宕机 如果 quorum 数量的哨兵都觉得一个 master 宕机,那么就是客观宕机 sdown 达成的条件很简单,如果一个哨兵 ping 一个 ma 阅读全文
posted @ 2020-07-11 11:41 溪水静幽 阅读(222) 评论(0) 推荐(0) 编辑
一致性hash算法
摘要:数据库分库分表或者是分布式缓存时,不可避免的都会遇到一个问题:如何将数据均匀的分散到各个节点中,并且尽量的在加减节点时能使受影响的数据最少 hash取模 将传入的 Key 按照 index = hash(key) % N 这样来计算出需要存放的节点。其中 hash 函数是一个将字符串转换为正整数的哈 阅读全文
posted @ 2020-07-10 08:09 溪水静幽 阅读(338) 评论(0) 推荐(0) 编辑
redis线程模型
摘要:文件事件处理器 Redis基于Reactor模式开发网络事件处理器,处理器被称为文件事件处理器。组成结构为4部分:多个套接字、IO多路复用程序、文件事件分派器、事件处理器。因为文件事件分派器队列的消费是单线程的,所以Redis才叫单线程模型。 消息处理流程 文件事件处理器使用I/O多路复用(mult 阅读全文
posted @ 2020-06-06 11:05 溪水静幽 阅读(127) 评论(0) 推荐(0) 编辑
Spring Session基于Redis存储的序列化问题
摘要:Spring redis SESSION 是如何进行反序列化? Spring session针对Web的Request请求有一个org.springframework.session.web.http.SessionRepositoryFilter过滤器,根据SESSION ID获取相应的SESSI 阅读全文
posted @ 2020-05-04 15:59 溪水静幽 阅读(4003) 评论(0) 推荐(0) 编辑
Redis Lua 脚本运行原理
摘要:用户可以向服务器发送 lua 脚本来执行自定义动作,获取脚本的响应数据。Redis 服务器会单线程原子性执行 lua 脚本,保证 lua 脚本在处理的过程中不会被任意其它请求打断。 将匹配 key 和删除 key 合并在一起原子性执行,Redis 原生没有提供这样功能的指令,它可以使用 lua 脚本 阅读全文
posted @ 2019-11-24 21:26 溪水静幽 阅读(1302) 评论(0) 推荐(0) 编辑
redis与mysql的数据一致性
摘要:1. MySQL持久化数据,Redis只读数据 redis在启动之后,从数据库加载数据。 读请求: 不要求强一致性的读请求,走redis,要求强一致性的直接从mysql读取 写请求: 数据首先都写到数据库,之后更新redis(先写redis再写mysql,如果写入失败事务回滚会造成redis中存在脏 阅读全文
posted @ 2019-08-24 12:01 溪水静幽 阅读(1651) 评论(0) 推荐(0) 编辑
使用乐观锁方式修复红包超发的bug
摘要:乐观锁 乐观锁是一种不会阻塞其他线程并发的机制,它不会使用数据库的锁进行实现,设计里面由于不阻塞其他线程,所以并不会引发线程频繁挂起和恢复,这样便能够提高并发能力,也称之为非阻塞锁。 乐观锁使用的是 CAS原理。 在 CAS 原理中,对于多个线程共同的资源,先保存一个旧(Old Value),比如进 阅读全文
posted @ 2019-06-26 21:29 溪水静幽 阅读(342) 评论(0) 推荐(0) 编辑
抢红包案例
摘要:抢红包案例 主要分以下几大部分: 环境搭建 模拟超量发送的场景-DataBase(MySql5.7) 悲观锁的实现版本-DataBase(MySql5.7) 乐观锁的实现版本-DataBase(MySql5.7) Redis实现抢红包 模拟 20 万元的红包,共分为 2 万个可抢的小红包,有 3 万 阅读全文
posted @ 2019-06-26 21:29 溪水静幽 阅读(203) 评论(0) 推荐(0) 编辑
SpringBoot通过RedisTemplate执行Lua脚本
摘要:Redis使用的是内存,内存的速度比磁盘速度肯定要快很多.。使用 Redis实现抢红包,需要知道的是Redis的功能不如数据库强大,事务也不是很完整.因此要保证数据的正确性,可以通过严格的验证得以保证。而 Redis的 Lua 语言是原子性的,且功能更为强大,所以优先选择使用Lua语言来实现抢红包。 阅读全文
posted @ 2019-06-26 21:11 溪水静幽 阅读(7104) 评论(0) 推荐(0) 编辑
redis全量复制与部分复制
摘要:全量复制:用于初次复制或其它无法进行部分复制的情况,将主节点中的所有数据都发送给从节点,是一个非常重型的操作,当数据量较大时,会对主从节点和网络造成很大的开销 部分复制:用于处理在主从复制中因网络闪断等原因造成的数据丢失场景,当从节点再次连上主节点后,如果条件允许,主节点会补发丢失数据给从节点。因为 阅读全文
posted @ 2019-06-22 09:19 溪水静幽 阅读(875) 评论(0) 推荐(0) 编辑
抢红包案例:使用悲观锁方式修复红包超发的bug
摘要:超发问题分析 针对这个案例,用户抢到红包后,红包总量应-1,当多个用户同时抢红包,多个线程同时读得库存为n,相应的逻辑执行后,最后将均执update T_RED_PACKET set stock = stock - 1 where id = #{id} 使用数据库锁的解决方案 使用悲观锁(排它锁 f 阅读全文
posted @ 2019-06-18 22:33 溪水静幽 阅读(194) 评论(0) 推荐(0) 编辑
fork操作
摘要:fork操作 同步操作 ,fork 是一个同步操作 当执行一个 bgsave 或 bgrewriteaof 首先会执行一个 fork 操作,它只是做一个内存页的拷贝,并不是拷贝所有内存,所以速度是非常快的。 当 fork操作比较慢或卡在某一个点,这时它会阻塞redis主线程 与内存量息息相关:内存越 阅读全文
posted @ 2019-06-09 10:27 溪水静幽 阅读(626) 评论(0) 推荐(0) 编辑

1 2 3 下一页
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示