![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
redis
文章平均质量分 93
生病的毛毛虫
这个作者很懒,什么都没留下…
展开
-
Redis底层实现--字符串
Redis字符串存储实现原理Redis 中的字符串是可以修改的字符串,在内存中他是以字节数组的形式存在的。我们在入门语言C语言里面的字符串标准形式是以NULL(即0x\0)作为结束符,但是Redis里面,字符串表示方法不是这样,因为,要获取以null结尾的字符串需要遍历整个字符串,时间复杂度是O(n),对应单线程对外服务的Redis来说是无法承受的。Redis的字符串结构叫做SDS,Simple Dynamic String。他的结构是一个带上长度信息的字节数组,类似C语言中的结构体。struct原创 2020-12-01 15:17:44 · 192 阅读 · 0 评论 -
Redis服务信息--Info指令
Redis服务信息–Info指令在使用Redis时候,可能会遇到一些异常情况,我们排查完代码问题后,会需要对Redis进行排查,在对Redis错误进行排查之前,需要了解Redis运行状态,通过强大Info指令,可以清晰的知道Redis内部的一些运行参数。Info指令的信息是最全面的,分为如下9大块,每一块信息都有非常多的参数,如下:Server:服务器运行环境参数Clients:客户端相关信息Memory:服务器运行内存统计数据Persistence:持久化信息Stats:通用统计数据R原创 2020-11-25 17:20:41 · 259 阅读 · 0 评论 -
Redis高可用基石--主从同步
主从同步当我们将Redis用于线上环境,单机肯定是不行的,即使不做集群,我们也应该做主从,有了主从,当主节点(master)挂掉时候,让运维将从节点(slave)接管,服务可以继续,否则主节点宕机后重启恢复数据的一段时间很长,期间无法提供服务。讨论主从同步之前,我们必须先了解一下先到分布式系统理论的基础-------CAP理论CAP原理CAp原理好比分布式领域的基础定律,他分别制定如下三个方面C:Consistent,一致性A:Availability,可用性P:Partition t原创 2020-11-14 16:53:41 · 97 阅读 · 0 评论 -
Redis存储优化--小对象压缩
小对象压缩Redis是一种内存数据库,内存是计算机中一种比较宝贵的资源,如果我们不注意节约,Redis很可能出现内存不足,最终导致崩溃。Redis为了优化数据结构的内存占用,增加了非常多的优化点,这些优化也是牺牲代码的可读性为代价,但是对于解决的内存问题来说是非常值得的,尤其是对于Redis这种内存数据库32bit VS 64bitRedis如果使用32bit版本,内部存储所有数据结构使用的指针空间占用会少一半,如果Redis使用内存不会超过2^32 = 4GB,可以考虑32bit进行编译,能节原创 2020-11-14 13:30:06 · 370 阅读 · 0 评论 -
Redis--事务理解
事务一个成熟的数据库系统一般都会有事务的支持,Redis作为一个缓存数据库也不例外,Redis的事务比之关系型数据库mysql,oracle等算比较简单的,Redis中无需理解那么多事务模型,可以直接使用。不过也正是因为简单,redis的事务模型是不严谨的,不能像关系型数据库那么用Redis的事务。Redis事务的基本用法每个事务操作的基本过程都有如下begin, commit,和rollback,如下begin指令标识事务的开始commit指令标识事务的提交rollback指令标识事务原创 2020-11-14 12:15:22 · 158 阅读 · 0 评论 -
Redis高效性探索--管道
管道开始接触Redis时候,对应Redis管道有一个错误认识,任务是redis服务器提供的一种特别的技术,有了这种技术可以加速Redis的存取效率,但是实际上Redis的管道计算(Pipeline)本身是客户端提供的技术,与服务端无关。Redis消息交互当我们使用客户端对Redis服务器发送消息指令,客户端将请求发送给服务器,服务器处理完后响应信息返回给客户端,需要花费一个网络数据报的来回时间。如果联系执行多条指令,会花费多个网络数据报的来回时间,如下图多条指令的时候,客户端经历了写–原创 2020-11-12 16:51:26 · 165 阅读 · 0 评论 -
Redis持久化-深入理解AOF,RDB
持久化Redis数据全部在内存中,如果宕机,数据必然丢失,因此必须有一种机制保证Redis数据不会因为故障丢失,这就是Redis的持久化机制持久化方式两种:AOF,RDB,如下图RDB快照模式是一次全量备份,是内存数据的二进制序列化形式,存储紧凑AOF日志方式是连续增量的备份。是内存数据修改指令的记录文本。AOF日志长期运行下来会异常庞大,Redis重启后加载AOF日志会很慢需要定期重写AOF日志。RDB快照原理Redis单线程,需要同时负责N个客户端套接字读写,内存数据结构逻辑读原创 2020-11-12 15:14:12 · 129 阅读 · 0 评论 -
Redis高效性探索--线程IO模型,通信协议
Redis线程IO模型Redis是单线程,这个毋庸置疑Redis单线程能做到这么高的效率?不用怀疑,还有很多其他的服务都是单线程但是也有超高的效率,比如Node.js,Nginx也是单线程。Redis单线程高效原因:Redis所有数据都存储在内存中,所有运算都是内存级别的运算,正是因为Redis是单线程,所有要小心使用,我们业务中可能会有一些耗时的操作keys(死亡命令)时间复杂度O(n),这种一定要谨慎使用,会造成Redis卡顿Redis单线程如何处理这么多客户端的并发连接?多路复用原创 2020-11-11 17:54:39 · 133 阅读 · 0 评论 -
Redis遍历方式思考--字典扩容方式
全量遍历keys工作中线上Redis维护,有时候我们需要查询特定前缀的缓存key列表来手动处理数据。可能是修改值,删除key。那么怎么才能快速的从海量的key中查找到对应的前缀匹配项。Redis提供了一下简单的指令,例如keys用来满足特定正则下的key如下://查找nettyim前缀的keykeys nettyim*//查询所有keykeys *以上命令特别简单,只需要提供一个简单的正则字符串即可,但是缺点明显:没有offset,limit参数,一次查询所有满足条件的key,如果原创 2020-11-10 20:37:50 · 496 阅读 · 0 评论 -
Redis流量控制策略
/** * 有点像令牌桶的漏桶 * @author liaojiamin * @Date:Created in 16:57 2020/5/29 */public class FunnelRateLimiter { private Map<String, Funnel> funnels = new HashMap<>(); public boolean isActionAllowed(String userId, String actionKey, int原创 2020-06-03 22:25:46 · 2096 阅读 · 0 评论 -
LBS解决方案
LBS解决方案LBS(基于地理位置的服务)服务是现在移动互联网中比较常用的功能,例如外卖中我附近的店铺,通常是以客户位置坐标为中心,查询一定范围内的店铺信息,按照距离由近及原进行倒叙排序方案一,直接mysql经纬度范围计算就是弧度的计算,只要数学够好,算出来分分钟的事情,直接上mysql一个语句搞定:CREATE TABLE `places` ( `id` INT (11) NOT NULL AUTO_INCREMENT, `lat` DOUBLE NOT NULL DEFAULT '0原创 2020-06-04 11:40:02 · 804 阅读 · 0 评论 -
Redis分布式锁奥义
分布式锁分布式系统进行逻辑处理的时候,经常会遇到并发问题,例如直播场景中,用户需要连麦主播,当多个用户在同一个时刻一起连麦时候,应该保证只有一个用户能连麦成功,我们改怎么保证这种业务场景下保证数据的正确性。当我们连麦的时候,其实设计到两个步骤操作,首先读取房间座位信息,当发现座位没有被占用,修改作为状态,之后存储。但是这几个步骤并非原子操作,也就是可能存在两个线程同时读取,一起修改,这样肯定会造成数据错乱。怎样来保证读取,修改,存储,这三个步骤的原子操作就是分布式锁需要解决的问题。分布式锁的奥义原创 2020-06-04 10:47:21 · 179 阅读 · 0 评论 -
Redis高级数据结构原理解析-bitmap,hyperloglog
上一篇Redis基础数据结构内部实现简单介绍原创 2020-06-02 11:37:02 · 790 阅读 · 0 评论 -
Redis基础数据结构内部实现简单介绍
5种基础数据结构Redis有5种基础数据结构,分别是:String(字符串),list(列表),hash(字典),set(集合),zset(有序集合),这五种是我们开发种经常用的到的,是Redis种最基础,最重要的部分。string(字符串)字符串string是Redis最简单的一个数据结构,他的内部表示是一个字符数组,Redis所有的数据结构都以唯一的key字符串作为名称,然后通过这个唯一的key获取对应的value数据,不同类型数据结构差异其实就在value上而已。如下图对应String类型原创 2020-06-01 22:54:17 · 268 阅读 · 0 评论 -
Redis数据结构以及对应存储策略
redis数据结构:String 可以是字符串也可以是数字,以及浮点数List,一个链表,链表上每一个节点都包含一个字符串set 包含字符串的无序手机其,特点是每一个字符都是唯一的hash,包含键值对的无序散列,类似mapZSet,字符串成员,在set的基础上是顺序的,元素的顺序由分值来决定redis的发布与订阅的特性(重点):subscribe channel命令 订阅给定的一...原创 2019-06-25 13:44:56 · 741 阅读 · 0 评论 -
Redis和DB数据一致性解决方案
问题出现原因并发时候无法保证读写的先后顺序,如果删掉了缓存还没来得及写库,另外一个县城就多来读取,发现缓存为空就去读取数据库并且写入缓存,这时候缓存中就是脏数据如果先写库,在删除缓存前,写库的线程宕机,没有删除掉缓存,则也会出现不一致的情况如果redis集群,在注册模式中,写主库,读从库,也会出现redis复制存在的一些延迟操作,也可能导致数据不一致解决方案双删除+超时写库前后都...原创 2019-06-25 13:45:49 · 1870 阅读 · 0 评论