
redis
文章平均质量分 88
wrr-cat
这个作者很懒,什么都没留下…
展开
-
京东二面,Redis 为什么这么快?
大彬:3、延时队列。Redis 有最大内存的限制,通过 maxmemory 参数可以设置最大内存,当使用的内存超过了设置的最大内存,就要进行内存释放, 在进行内存释放的时候,会按照配置的淘汰策略清理内存。 RDB 文件生成完毕后, 主节点会将 RDB 文件发送给从节点,从节点会先将 RDB 文件。:如果 Redis 选择多线程模型,需要考虑数据同步的问题,则必然会引入某些同步机制,会导致在操作数据过程中带来更多的开销,增加程序复杂度的同时还会降低性能。数据存在内存中,读写速度快。原创 2023-04-15 14:07:37 · 98 阅读 · 0 评论 -
Redis-结构-压缩列表
压缩列表 ziplist 在 redis 中的应用也非常广泛,它是我们常用的 zset ,list 和 hash 结构的底层实现之一。当我们的容器对象的元素个数小于一定条件时,redis 会使用 ziplist 的方式储存,来减少内存的使用。"ziplist"为什么要在元素较少的时候使用 ziplist?因为 redis 中的集合容器中,很多情况都用到了链表的实现,元素和元素之间通过储存的关联指针有序的串联起来,但是这样的指针往往是随机I/O,也就是指针地址是不连续的(分布不均匀)。原创 2023-04-01 10:12:45 · 233 阅读 · 0 评论 -
Redis面试题
37、假如 Redis 里面有 1 亿个 key,其中有 10w 个 key 是以某个固定的已知的前缀开头的,如果将它们全部找出来?35、MySQL 里有 2000w 数据,redis 中只存 20w 的数据,如何保证redis 中的数据都是热点数据?32、都有哪些办法可以降低 Redis 的内存使用情况呢?15、是否使用过 Redis 集群,集群的原理是什么?39、使用过 Redis 做异步队列么,你是怎么用的?8、Redis 的持久化机制是什么?21、Redis 集群的主从复制模型是怎样的?原创 2023-04-01 10:11:02 · 46 阅读 · 0 评论 -
延迟任务场景,该如何提高吞吐量和时效性!
不卷了,能用就行!哈哈哈,说好的不卷了,能凑活用就行了。但每次接到新需求时都手痒,想结合着上一次的架构设计和落地经验,在这一次需求上在迭代更新,或者找到完全颠覆之前的更优方案。卷完代码的那一刻总是神清气爽其实大部分喜欢写代码的一类纯粹码农,都是比较卷的,就比如一个需求在实现上是能用大概是P5、如果这个做出来的功能不只是能用还非常好用是P6、除了好用还凝练共性需求开发成通用的组件服务是P7。原创 2023-03-29 19:33:18 · 235 阅读 · 0 评论 -
低延迟的超时中心实现方式
在不少产品中都存在生命周期相关的设计,时间节点到了以后须要作对应的事情。超时中心(TimeOutCenter,TOC)负责存储和调度生命周期节点上面的超时任务,当超时任务设置的超时时间到期后,超时中心须要当即调度处理这些超时任务。对于一些须要低延迟的超时场景,超时中心调度延迟会给产品带来不可估量的影响。sql做者 | 默达来源 | 阿里技术公众号数据库。原创 2023-03-29 19:30:42 · 748 阅读 · 0 评论 -
Codis与RedisCluster的原理详解
背景介绍#我们先来看一下为什么要做集群,如果我们要部署一个单节点Redis,很明显会遇到单点故障的问题。首先能想到解决单点故障的方法,就是做主从,但是当有海量存储需求时,单一的主从结构就会出问题,说问题之前要先了解一下主从之间是如何复制的。我们把Redis分为三个部分,分别是客户端、主节点以及从节点,如果从节点要同步主节点的数据,它首先会发Sync指令给主节点,主节点收到指令之后会执行BGSAVE命令生成RDB文件,这个RDB文件指的是快照文件,它是Redis两种备份方式的其中一种,另一原创 2021-08-19 17:54:15 · 351 阅读 · 0 评论 -
Redis Cluster集群数据分片机制原理
Redis Cluster数据分片机制Redis 集群简介Redis Cluster 是 Redis 的分布式解决方案,在 3.0 版本正式推出,有效地解决了 Redis 分布式方面的需求。Redis Cluster 一般由多个节点组成,节点数量至少为 6 个才能保证组成完整高可用的集群,其中三个为主节点,三个为从节点。三个主节点会分配槽,处理客户端的命令请求,而从节点可用在主节点故障后,顶替主节点。如上图所示,该集群中包含 6 个 Redis 节点,3主3从,分别为M1,M2,M3,S原创 2021-05-13 16:28:07 · 529 阅读 · 0 评论 -
redis的bitmap在亿级项目中的应用
BitMap1.bitmap的原理、用法。2.bitmap的优势、限制。3.bitmap空间、时间粗略计算方式。4.bitmap的使用场景。5.使用bitmap过程中可能会遇到的坑。6.bitmap进阶用法(思考)。什么是 BitMapBitMap,即位图,其实也就是 byte 数组,用二进制表示,只有 0 和 1 两个数字。如图所示:重要 API命令 含义 getbit key offset 对key所存储的字符串值,获取指定偏移量上的位(bit.转载 2021-04-19 14:05:56 · 226 阅读 · 0 评论 -
Redis实现分布式锁与Zookeeper实现分布式锁区别
Redis实现分布式锁思路基于Redis实现分布式锁(setnx)setnx也可以存入key,如果存入key成功返回1,如果存入的key已经存在了,返回0.Zookeeper实现分布式锁思路基于Zookeeper实现分布式锁 Zookeeper是一个分布式协调工具,在分布式解决方案中。多个客户端(jvm),同时在zookeeper上创建相同的一个临时节点,因为临时节点路径是保证唯一,只要谁能够创建节点成功,谁就能够获取到锁,没有创建成功节点,就会进行等待,当释放锁的时候,采用事件通知给客户端重转载 2021-04-15 13:21:59 · 220 阅读 · 0 评论 -
Redis6.0 实际应用问题
1.Redis底层ZSet跳表是如何设计与实现的跳表【skipList】其实就是有层级的列表。比如我们想查找19,首先和6比较,大于6之后,在和9进行比较,然后在和12进行比较…最后比较到21的时候,发现21大于19,说明查找的点在17和21之间,从这个过程中,我们可以看出,查找的时候跳过了3、7、12等点。参考博客:https://blog.csdn.net/ict2014/article/details/173942592.Redis底层ZSet实现压缩列表和跳表如何选择压缩列表:ht转载 2021-04-15 10:57:51 · 156 阅读 · 0 评论 -
解决Redis分布式锁业务代码超时致使锁失效问题
一、redis分布式锁的基本实现redis加锁命令:redisSETNX resource_name my_random_value PX 30000 这个命令的做用是在只有这个key不存在的时候才会设置这个key的值(NX选项的做用),超时时间设为30000毫秒(PX选项的做用) 这个key的值设为“my_random_value”。这个值必须在全部获取锁请求的客户端里保持惟一。算法SETNX 值保持惟一的是为了确保安全的释放锁,避免误删其余客户端获得的锁。举个例子,一个客户端拿到了锁,原创 2021-04-14 17:46:55 · 2152 阅读 · 0 评论 -
redis有序集合zset的底层实现——跳跃表skiplist
何为跳表?跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。跳表详解有序链表考虑一个有序链表,我们要查找3、7、17这几个元素,我们只能从头开始遍历链表,直到查找到元素为止。上述这个链表是有序的,但是不能使用二分查找,是不是很捉急?(P.S.数组可以实现二分查找)那么,有没有什么方法可以实现有序链表的二分查找呢?答案是肯定的,那原创 2021-04-14 16:45:52 · 1693 阅读 · 0 评论 -
redis网络架构及单线程模型
一、网络基础架构这里解释下上图涉及的组件,Redis网络层基础组件主要包括四个部分:1)EventLoop事件轮询器,这部分实现在AE里面。2)提供Socket句柄事件的多路复用器,这部分分别对于不同平台提供了不同的实现,比如epoll和select可以用于Linux平台、kqueue可以用于苹果平台、evpoll可以用于Solaris平台,这里并没有看到iocp,也就是Redis对于Windows支持并不是很好。3)包括网络事件处理器实现的networking,这部分主要包括两个重要的转载 2021-04-09 17:05:14 · 194 阅读 · 0 评论 -
单进程单线程的Redis如何能够高并发
1、基本原理采用多路 I/O 复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络IO的时间消耗)(1)为什么不采用多进程或多线程处理? 多线程处理可能涉及到锁 多线程处理会涉及到线程切换而消耗CPU 无法发挥多核CPU性能,不过可以通过在单机开多个Redis实例来完善2、Redis不存在线程安全问题?Redis采用了线程封闭的方式,把任务封闭在一个线程,自然避免了线程安全问题,不过对于需要依赖多个redis操作的复合操作来说,依然需要锁,而且有可能是分布式原创 2021-03-01 11:14:18 · 403 阅读 · 0 评论 -
Redis系列八、Redis慢查询分析
慢查询日志帮助开发和运维人员定位系统存在的慢操作。慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阀值,就将这条命令的相关信息(慢查询ID,发生时间戳,耗时,命令的详细信息)记录下来。Redis客户端一条指令分为如下四部分执行:其中慢查询只统计第3个执行步骤的时间。1、慢查询的两个配置参数slowlog-log-slower-than:预设阀值,它的单位是微秒(1秒=1000毫秒,1毫秒=1000微秒),默认值是10000,假如执行了一个“很慢”的命令,如 “keys * ”;原创 2021-03-02 14:43:04 · 424 阅读 · 0 评论 -
Redis系列九、Redis运行文件详解
1、redis-cli 详解 ./redis-cli -r 3 -h 192.168.1.111 -a 12345678 ping //返回pong表示127.0.0.1:6379能通,r代表次数 ./redis-cli -r 100 -i 1 info |grep used_memory_human //i代表执行的时间间隔,每秒输出内存使用量,输100次 ./redis-cli -p 6379 -h 192.168.1.111 -a 12345678对于我们来说,这些常用指令以原创 2021-03-02 15:12:56 · 358 阅读 · 0 评论 -
分布式缓存Redis之Pipeline(管道)
Redis 的 pipeline(管道)功能在命令行中没有,但 redis 是支持 pipeline 的,而且在各个语言版的 client 中都有相应的实现。 由于网络开销延迟,就算 redis server 端有很强的处理能力,也会由于收到的 client 消息少,而造成吞吐量小。当 client 使用 pipelining 发送命令时,redis server 必须将部分请求放到队列中(使用内存),执行完毕后一次性发送结果;如果发送的命令很多的话,建议对返回的结果加标签,当然这也会增加使用的内存;转载 2021-03-02 16:10:21 · 395 阅读 · 0 评论 -
SpringBoot中使用redis事务
本文基于SpringBoot 2.X事务在关系型数据库的开发中经常用到,其实非关系型数据库,比如redis也有对事务的支持,本文主要探讨在SpringBoot中如何使用redis事务。事务的相关介绍可以参考:0、起因在一次线上事故中,我们定位到redis的使用存在大value,超过了dubbo的最大数据量限制,于是紧急将这个大的对象value拆分成单个的string value。为了保持数据库和redis双写一致,在对数据库进行更新,删除,插入操作时,要从redis删除指定的key。一切都是原创 2021-04-09 14:35:24 · 1247 阅读 · 0 评论 -
【二十六】redis之事务、事务特性、与pipeline比较,与Lua脚本比较
一、redis事务的特性1.原子性这里的原子性跟mysql的原子性不一样。redis事务的原子性是说的:一次事务提交的多个命令,要么都不执行(watch发现某个key的值变了则不开始执行),要么所有的命令都执行(一旦开始执行事务,事务中所有的命令都会执行,即使有命令报错了,后面的命令也会执行)报错不回滚!不回滚的原因:● Redis 命令只会因为错误的语法而失败,失败的命令是由编程错误造成的。而这些错误应该在开发的过程中被发现,而不应该出现在生产环境中。● 因为不需要对回滚进.原创 2021-03-02 16:16:36 · 657 阅读 · 0 评论 -
Redis系列十二:Redis高可用之持久化
一、Redis高可用概述在Redis语境中,高可用的含义:除了保证提供正常服务(如主从分离、快速容灾技术),还需要考虑数据容量的扩展、数据安全不会丢失等。在Redis中,实现高可用的技术主要包括持久化、复制、哨兵和集群,下面分别说明它们的作用,以及解决了什么样的问题。持久化:持久化是最简单的高可用方法(有时甚至不被归为高可用的手段),主要作用是数据备份,即将数据存储在硬盘,保证数据不会因进程退出而丢失。复制:复制是高可用Redis的基础,哨兵和集群都是在复制基础上实现高可用的。复制..原创 2021-03-02 17:45:48 · 267 阅读 · 1 评论 -
配置Redis作为缓存(六种淘汰策略)
将 Redis 用作缓存时, 如果内存空间用满, 就会自动驱逐老的数据。 默认情况下memcached就是这种方式, 大部分开发者都比较熟悉。LRU是Redis唯一支持的回收算法. 本文详细介绍用于限制最大内存使用量的maxmemory指令, 并深入讲解 Redis 所使用的近似LRU算法。maxmemory 配置指令maxmemory用于指定 Redis 能使用的最大内存。既可以在redis.conf文件中设置, 也可以在运行过程中通过CONFIG SET命令动态修改。例...原创 2021-03-03 18:00:14 · 207 阅读 · 1 评论 -
Redis怎么保持缓存与数据库一致性?
将不一致分为三种情况:1. 数据库有数据,缓存没有数据;2. 数据库有数据,缓存也有数据,数据不相等;3. 数据库没有数据,缓存有数据。在讨论这三种情况之前,先说明一下我使用缓存的策略,也是大多数人使用的策略,叫做 Cache Aside Pattern。简而言之,就是1. 首先尝试从缓存读取,读到数据则直接返回;如果读不到,就读数据库,并将数据会写到缓存,并返回。2. 需要更新数据时,先更新数据库,然后把缓存里对应的数据失效掉(删掉)。读的逻辑大家都很容易理解,谈谈更新。如果不原创 2021-03-03 21:42:50 · 530 阅读 · 4 评论 -
Redis系列十四:Redis高可用之哨兵
一、哨兵的作用和架构1、哨兵的作用在复制的基础上,哨兵实现了自动化的故障恢复。哨兵的核心功能是主节点的自动故障转移。下面是Redis官方文档对于哨兵功能的描述:监控(Monitoring):哨兵会不断地检查主节点和从节点是否运作正常。 自动故障转移(Automatic failover):当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其他从节点改为复制新的主节点。 配置提供者(Configuration provider):客户端在原创 2021-03-03 21:43:33 · 165 阅读 · 0 评论 -
Redis系列十三:Redis高可用之主从复制
一、主从复制概述主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。主从复制的作用二、如何使用主从复制数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写R原创 2021-03-03 21:43:48 · 92 阅读 · 0 评论 -
Redis 缓存穿透 + 缓存雪崩 + 缓存击穿的原因和解决方案
目录一、缓存穿透解决方案:二、缓存雪崩解决方案:三、缓存击穿解决方案:在生产环境中,会因为很多的原因造成访问请求绕过了缓存,都需要访问数据库持久层,虽然对Redsi缓存服务器不会造成影响,但是数据库的负载就会增大,使缓存的作用降低一、缓存穿透 缓存穿透是指查询一个根本不存在的数据,缓存层和持久层都不会命中。在日常工作中出于容错的考虑,如果从持久层查不到数据则不写入缓存层,缓存穿透将导致不存在的数据每次请求都要到持久层去查询,失去了缓存保护后端持久的意义缓存...原创 2021-03-03 22:10:55 · 296 阅读 · 1 评论 -
redis的三种集群模式原理
一、主从同步/复制通过持久化功能,Redis保证了即使在服务器重启的情况下也不会丢失(或少量丢失)数据,因为持久化会把内存中数据保存到硬盘上,重启会从硬盘上加载数据。 但是由于数据是存储在一台服务器上的,如果这台服务器出现硬盘故障等问题,也会导致数据丢失。为了避免单点故障,通常的做法是将数据库复制多个副本以部署在不同的服务器上,这样即使有一台服务器出现故障,其他服务器依然可以继续提供服务。为此, Redis 提供了复制(replication)功能,可以实现当一台数据库中的数据更新后,自动将更新的数原创 2021-03-30 14:06:38 · 907 阅读 · 0 评论