![](https://img-blog.csdnimg.cn/20190918140158853.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Redis
Redis学习记录
点点行星
这个作者很懒,什么都没留下…
展开
-
Redis学习_14_企业级解决方案_缓存穿透
文章目录现象原因解决方法现象系统平稳运行过程中, 应用服务器流量随时间增大,redis内存平稳,redis服务器CPU占用激增,数据库压力激增。原因redis中出现大面积未命中。出现非正常URL访问。如csdn某一篇博客的地址如下:https://blog.csdn.net/qq_33954947/article/details/107796253如果我们把最后的参数改一下,这个地址变成:https://blog.csdn.net/qq_33954947/article/details/10原创 2020-08-04 20:27:34 · 138 阅读 · 0 评论 -
Redis学习_14_企业级解决方案_缓存击穿
文章目录现象原因解决方法现象系统平稳运行过程中,数据库连接量瞬间激增,但是没有大量key过期,redis内存平稳,redis服务器CPU正常。原因某一个热点key过期了,这个key访问量巨大,导致大量请求在redis没拿到数据,直接从数据库拿,导致数据库崩溃。解决方法预先设定。对于一些可以预测到的热点数据,延长过期时间。现场调整。监控访问量,对访问量激增的数据延长过期时间 或 设置永久key。后台刷新数据。启动定时任务,在高峰期来之前,刷新数据有效期。设置二级缓存,且失效时间不同,保障不原创 2020-08-04 20:11:11 · 86 阅读 · 0 评论 -
Redis学习_14_企业级解决方案_缓存雪崩
文章目录现象原因解决方案理论层面实践方面现象系统运行过程中,突然数据库连接量暴增,数据库崩溃,应用服务器崩溃,重启应用服务器无效,redis服务器和集群崩溃,数据库重启后再次被瞬间流量放倒。原因在一个较短的时间内,缓存中较多的key集中过期。key过期后,开始直接请求数据库,数据库无法及时处理。redis请求开始积压,出现请求超时。请求积累到一定量后,服务器开始崩溃。解决方案理论层面更多的页面做静态化处理。构建多级缓存。Nginx + redis + ehcache优化耗时较长的SQL原创 2020-08-04 20:03:56 · 93 阅读 · 0 评论 -
Redis学习_14_企业级解决方案_缓存预热
文章目录现象问题排查原因解决方案前期准备准备工作实施现象服务器启动后,很快就宕机。问题排查请求的数据较多。主从之间的数据吞吐量比较大,一直在加载数据、同步数据。原因服务器刚启动后,redis缓存中没有数据,会需要加载数据到缓存中,这时候外部请求会对服务器造成压力,请求较多时,服务器就挂了。解决方案前期准备日常统计访问较多的数据。利用LRU数据删除策略,构建数据留存队列。准备工作根据统计数据的结果,对数据分类,先把访问较多的数据加载到redis中。利用分布式多服务器同时读原创 2020-08-04 19:41:44 · 96 阅读 · 0 评论 -
Redis学习_13_集群_相关配置与命令
cluster配置设置加入cluster,成为其中节点cluster-enabled yes|nocluster配置文件名,该文件自动生成,仅用于快速查找文件并查询文件内容cluster-config-file <filename>节点服务响应超时时间,用于判定该节点是否下线或切换为从节点cluster-node-timeout <milliseconds>master连接的slave最小数量cluster-migration-barrier <count&g原创 2020-08-01 20:10:28 · 79 阅读 · 0 评论 -
Redis学习_13_集群
文章目录单一服务器存在的问题什么是集群集群的作用集群结构的设计数据存储设计集群内部通信设计单一服务器存在的问题单机的redis服务器存在瓶颈,当业务的体量增大的时候,可能会无法支撑。什么是集群集群就是使用网络将若干计算机连通起来,并提供统一的管理方式,使其对外呈现单机的服务效果。集群的作用分散单台服务器的访问压力,实现负载均衡。分散单台服务器的存储压力,实现可扩展性。降低单台服务器宕机带来的业务灾难。集群结构的设计数据存储设计集群中的redis存储空间,一共会划分成16384个小原创 2020-08-01 19:46:18 · 95 阅读 · 0 评论 -
Redis学习_12_哨兵_工作原理<二>
文章目录故障转移发现问题投票选择sentinel,来处理问题处理故障故障转移发现问题在通知阶段,sentinel会不断给master发送hello命令,如果某一时刻,master没有回复sentinel了,sentinel就会重复发送hello,如果master一直没有回复,那么sentinel就会判定这个master挂了,于是给master一个标记:flags:SRI_S_DOWN。同时, sentinel会在他们的网络内发命令通知其他sentinel,这个master挂了,以及这个master的原创 2020-07-28 21:16:29 · 80 阅读 · 0 评论 -
Redis学习_12_哨兵_工作原理<一>
哨兵的主要作用就是进行主从切换,在这个过程中,有3个阶段:监控通知故障转移下面学习各个阶段的内容。监控阶段第一个sentinel启动的时候:sentinel连接master,通过info命令获取master的信息。拿到master的信息后,建立一个和master之间的cmd连接,方便传输命令。之后在自身和master中都存一份关于sentinel、master、slave的信息。通过master中的信息,取连接slave,获取slave的info。第二个sentinel启动的时原创 2020-07-27 20:42:55 · 96 阅读 · 0 评论 -
Redis学习_12_哨兵_搭建一个简易的哨兵结构
文章目录哨兵的配置主从结构的搭建(1个master对应2个slave)启动主从与哨兵验证哨兵的功能哨兵的配置在redis的目录里,有一个哨兵的配置文件:sentinel.conf,先看看这个里面是什么内容:下面解释一下其中一些内容:端口号容易理解,一般就是redis服务器的端口前面加一个2。sentinel monitor mymaster 127.0.0.1 6379 2,这一行是指定这个哨兵要监视哪一个master服务器,其中“mymaster”只是对这个master取的别名,可以自定义;原创 2020-07-25 12:34:33 · 302 阅读 · 0 评论 -
Redis学习_12_哨兵_基本介绍
文章目录概念作用概念哨兵(sentinel) 是分布式系统中,用于对主从结构中每台服务器进行监控,当出现故障时,通过投票机制选择新的master并将所有slave连接到新的master。作用监控不断的检查master和slave是否正常运行。master存活检测、master与slave运行情况检测。通知(提醒)当被监控的服务器出现问题时,向其他哨兵、客户端发送通知。自动故障转移断开master与slave的连接,选取一个master作为slave,将其他slave连接到新的maste原创 2020-07-22 20:49:15 · 86 阅读 · 0 评论 -
Redis学习_11_主从复制_常见问题
文章目录频繁的全量复制问题一问题二频繁的网络中断问题一问题二数据不一致频繁的全量复制问题一伴随着系统运行,master的数据会越来越多,一旦master重启,runid发生变化,会导致所有的slave都进行全量复制。redis内部的调优:master内部创建master_replid变量,使用runid相同的策略生成,长度41位,并发送给所有slave。在master关闭时执行命令 shutdown save,进行RDB持久化,将runid与offset保存到RDB文件中。master中存r原创 2020-07-20 21:15:43 · 135 阅读 · 0 评论 -
Redis学习_11_主从复制_心跳机制与命令传播
文章目录心跳机制心跳阶段注意事项命令传播流程心跳机制概念:进入命令传播阶段后,master与slave与要进行信息交换,使用心跳机制来进行维护,实现双方保持在线。master心跳:指令:PING周期:通过repl-ping-slave-period配置,默认时10秒。作用:判断slave是否在线查询:可以通过info replication查看,获取slave最后一次的连接间隔,lag是0或者1是正常的,超过1就可能是超时了。slave心跳:指令:replconf ack [原创 2020-07-18 13:44:05 · 618 阅读 · 0 评论 -
Redis学习_11_主从复制_数据同步+命令传播工作流程
原创 2020-07-18 13:27:36 · 213 阅读 · 0 评论 -
Redis学习_11_主从复制_部分复制的3要素(run_id,缓冲区,偏移量)
文章目录服务器的运行id(run id)复制积压缓冲区主从服务器复制偏移量服务器的运行id(run id)概念:服务器每次运行时生成的id,用于身份识别,一台服务器每次启动时生成的运行id都是不同的。组成:运行id由40位随机的16进制字符组成。作用:用于服务器之前传输,做身份识别。实现方式:运行id在服务器启动时自动生成,master在首次连接一个slave时,会把运行id发给slave,slave会保存这个id,通过info server命令可以查看服务器的运行id。复制积压缓冲区概念:复原创 2020-07-16 20:27:48 · 1106 阅读 · 0 评论 -
Redis学习_11_主从复制_数据同步
文章目录数据同步的过程数据同步注意事项masterslave数据同步的过程主从复制的数据同步阶段大概有5步:slave创建同步请求。master创建RDB同步数据。slave恢复RDB同步数据。slave请求部分同步数据。slave恢复部分同步数据。至此,同步完成,稍微详细一些的内容可以看下图。数据同步注意事项master如果master数据量巨大,数据同步应该避开高峰期,避免造成master阻塞,影响正常业务。复制缓冲区大小设置不合理,会导致数据溢出。如果全量复制时间太长,原创 2020-07-15 20:55:46 · 101 阅读 · 0 评论 -
Redis学习_11_主从复制_建立连接
文章目录主从复制整体流程建立连接阶段的流程建立主从连接通过客户端发送命令建立连接启动服务器时通过参数建立连接通过服务器配置文件建立连接补充内容主从复制整体流程主从复制的整体流程可以分为3个阶段:建立连接阶段:由slave向master发起,建立与master之间的连接,master保存slave的端口号。数据同步阶段:master与slave建立连接后,master需要把目前已有的数据同步到slave机器上。命令传播阶段:数据同步之后,master后续的写数据的命令同样也要同步给slave。原创 2020-07-14 21:47:21 · 298 阅读 · 0 评论 -
Redis学习_11_主从复制_基本介绍
文章目录什么是高可用?高可用与Redismaster与slave什么是高可用?高可用简单点来说就是服务器可以对外提供服务的能力,计算公式为:(全年时间-全年服务器宕机时间)/全年时间高可用与Redisredis在单机的情况下,存在几个问题:机器发生故障时,容易造成数据丢失。redis的数据菜内存中,容易内存不足,内存的成本也比较大,企业不会无限制的加内存。基于这两个问题,如果redis出现问题,势必会影响服务器,从而有可能导致服务器不可用。为了解决redis的这个劣势点,redis提供了原创 2020-07-13 17:38:17 · 77 阅读 · 0 评论 -
Redis学习_10_高级数据类型
文章目录Bitmaps简介操作HyperLogLog简介操作GEO简介操作Bitmaps简介Bitmaps是用bit(位)来存储数据的一种结构,由于是用bit来存储数据,一个位置上只能是0或1,所以其操作也十分简单,特点是节省空间。操作getbit key offset:获取指定key对应偏移量上的bit值。setbit key offset value:设置指定key对应偏移量上的bit值,value只能是0或1。HyperLogLog简介HyperLogLog是专门用来统计不重复数据数原创 2020-06-29 22:11:34 · 78 阅读 · 0 评论 -
Redis学习_9_服务器配置
文章目录服务器基本配置服务器端配置客户端配置多服务器快捷配置服务器基本配置服务器端配置设置服务器以守护线程的方式运行:daemonize yes|no绑定主机地址:bind 127.0.0.1设置服务器端口:port 6379设置数据库数量:databases 16服务器日志级别:loglevel debug|verbose|notice|warning,默认为verbose日志文件:logfile 端口号.log客户端配置同一时间最大客户端连接数,默认不限制。当连接达到上限时,r原创 2020-06-28 14:59:38 · 64 阅读 · 0 评论 -
Redis学习_8_逐出策略
文章目录删除策略 与 逐出策略 的对比影响数据逐出的相关配置删除策略 与 逐出策略 的对比删除策略是针对具有有效期的数据,如果所有数据都是永久的,但是内存又满了,新的数据不能存进来时,就需要用到逐出策略。逐出策略是指,在redis用内存储存操作前,先检查内存是否足够,不够的话临时删除一些数据来清理空间。注意:逐出算法不一定能成功,当所有数据都逐出失败时,会报OOM异常。影响数据逐出的相关配置最大可使用内存:maxmemory占用物理内存的比例,默认为0,表示全部占用。生产环境根据需求确认,一原创 2020-06-28 14:47:12 · 148 阅读 · 0 评论 -
Redis学习_7_删除策略
文章目录redis中的数据特征过期数据的底层结构定时删除惰性删除定期删除删除策略对比redis中的数据特征redis作为一个内存级数据库,数据都在内存中,我们可以通过TTL指令来查看数据的状态:非负整数:具有时效性的数据(剩余有效时间)-1:永久数据-2:已过期数据、被删除数据、未定义数据注意: redis中,执行完删除操作后,并不会马上把数据给删除,这要看具体的删除策略。过期数据的底层结构对于我们使用expire、expireat、setex这些操作添加的数据,除了在内存中给他们存储数原创 2020-06-20 17:32:04 · 188 阅读 · 0 评论 -
Redis学习_6_事务_锁
文章目录watch / unwatchsetnx(分布式锁)watch / unwatch当多个客户端需要操作同一个key时,就涉及到锁的问题了,在redis中,提供一个可以监视所需要操作的key的方法:watch key1 [key2 ...],这个方法表示监视某一个key,在事务开启前使用,如果在执行事务时,这个key发生了变化,事务将取消。unwatch,对应的,这个就是取消监视,注意,这个命令不能用在事务中。setnx(分布式锁)对于watch来说,重点是修改key,一旦key被修改原创 2020-06-06 14:31:35 · 110 阅读 · 0 评论 -
Redis学习_6_事务_基本操作
文章目录事务的基本操作事务的工作流程事务的注意事项事务的基本操作开启事务:multi,这个指令之后的命令,都会加入事务队列中,不会立即执行。执行事务:exec,将事务队列种的命令依次执行,与multi成对出现。multiset name Jamset age 22exec取消事务:discard,用法与exec一样,只能在multi之后使用。事务的工作流程事务的工作流程图如下:事务的注意事项事务中,如果命令出现语法错误(拼写错误等),整个事务队列将会被销毁。事务中,如原创 2020-05-31 16:29:03 · 76 阅读 · 0 评论 -
Redis学习_5_数据持久化_AOF
文章目录AOF简介RDB的弊端AOF概念AOF持久化策略开启AOF具体配置AOF的重写概念AOF重写的作用AOF重写规则AOF重写操作手动执行自动AOF重写AOF工作原理alwayseveryseceverysec + 重写AOFRDB对比AOF选择RDB还是AOF?AOF简介RDB的弊端对于前篇介绍的RDB持久化,他也并不是完美的,它存在有他的弊端,主要如下:数据量大时,存储效率低。大数据量时IO性能低。bgsave会通过fork创建子进程,产生额外的内存消耗。宕机时,会存在数据丢失。原创 2020-05-22 23:09:32 · 288 阅读 · 0 评论 -
Redis学习_5_数据持久化_RDB
文章目录redis数据持久化介绍save指令RDB相关配置redis数据恢复save指令工作原理bgsave指令与工作原理save配置与工作原理三种save方式对比rdb优点rdb缺点redis数据持久化介绍在实际生活中,不可能完全避免断电这种突发事件,如果发生断电,生产环境中redis里面的数据怎么办?redis提供了两种数据持久化的操作:RDB:将当前数据状态进行保存,快照形式,存储数据结果,存储格式简单,关注点在数据。AOF:将数据的操作过程进行保存,日志形式,存储操作过程,存储格式复杂,关原创 2020-05-18 23:44:37 · 163 阅读 · 0 评论 -
Redis学习_5_Linux环境安装redis
文章目录redis的下载与安装redis启动时自定义端口通过指定配置文件启动redis的下载与安装将redis下载后解压到自定义目录,想放哪里放哪里,解压后的目录结构如下。编译安装:make install。可能会遇到这个错误,看了一下好像是与分配器有关,可以执行这个命令make MALLOC=libc来指定分配器。测试是否安装成功,在任意目录执行命令:redis-server如果可以正常启动redis就可以了,同时可以新建终端用redis-cli起一个客户端连接测试一下。redis启动时原创 2020-05-17 17:19:03 · 65 阅读 · 0 评论 -
Redis学习_4_jedis(Java连接redis数据库)
文章目录什么是jedis怎么使用使用redis来做一个小练习做一个jedis工具类附录jedis基本操作jedis小练习jedis工具类什么是jedisjedis就是Java用来连接redis数据库的工具。怎么使用直接下载jar包,这里提供网易的maven镜像仓库的jar,jedis-2.9.0.jar。通过maven依赖:<dependency> <groupId>redis.clients</groupId> <a原创 2020-05-13 20:27:39 · 182 阅读 · 0 评论 -
Redis学习_3_通用操作_db
redis中,key大多是由程序员自己定义,随着使用时间增加,数据增加,容易造成key重复的问题,为了解决这个问题,redis给数据库划分了16个区域,下标为0-15。下面看一下几个相关的命令。基本命令切换数据库:select index,如select 3,平常使用redis我们默认在0库。退出:quit。测试与服务器的连接:ping message,如ping success,后面的message是在联通服务器后返回的信息,可以不填,不填的话默认返回 “PONG”。控制台回显:echo me原创 2020-05-10 10:29:29 · 121 阅读 · 0 评论 -
Redis学习_3_通用操作_key
文章目录基本操作时效性操作扩展操作基本操作删除指定key:del key,如del str。判断key是否存在:exists key,如exists str。获取key的类型:type key,如type str。时效性操作为指定key设置有效期(秒):expire key seconds,如expire str 5,str这个key的有效时间只有5s。为指定key设置有效期(毫秒):pexpire key milliseconds,如pexpire str 5000为指定key设置有原创 2020-05-08 21:38:50 · 90 阅读 · 0 评论 -
Redis学习_2_数据类型_5_sorted_set
文章目录sorted_set介绍与基本操作关于sorted_set基本操作sorted_set扩展操作sorted_set注意事项sorted_set的应用sorted_set介绍与基本操作关于sorted_setsorted_set产生的原因:需要一种新的存储结构,来保存可以按一定规则排序的数据。sorted_set的实现:在set的基础上,加一个用于排序的字段,这个字段可以是整数也可以...原创 2020-05-06 23:43:27 · 124 阅读 · 0 评论 -
Redis学习_2_数据类型_4_set
文章目录set介绍与基本操作set介绍基本操作set操作随机数据set数据交并差操作set的相关应用场景随机信息推荐关联信息搜索用户的权限校验网站访问量统计黑白名单set介绍与基本操作set介绍前面已经学过了string、hash、list三个数据类型,string是一个基本的数据类型,hash是底层是hash表的一个数据类型,list是双向链表结构,他们都有各自的优点,但也有不足的地方,比...原创 2020-04-30 23:29:23 · 100 阅读 · 0 评论 -
Redis学习_2_数据类型_3_list
文章目录list基本介绍list基本操作list扩展操作list操作注意事项list相关应用朋友圈点赞日志消息队列list基本介绍list可以存储多个数据,并记录数据进入存储空间的顺序,其底层通过双向链表实现。list基本操作添加/修改数据:lpush key value1 [value2] ...,rpush key value1 [value2] ...,如lpush list0 a...原创 2020-04-28 23:55:28 · 109 阅读 · 0 评论 -
Redis学习_2_数据类型_2_hash
文章目录关于hashhash基本操作介绍hash扩展操作介绍hash注意事项hash的应用_1_购物车hash的应用_2_抢购关于hash上一节我们有提到string的一个命名规范:“表名:主键名:主键值:字段名”,用这样一个命名,我们可以较为清晰的知道这个key对应的value是一个什么东西,但是对于实际的应用场景中,我们肯定有多个对象,不同的对象都有不同的的属性,如果全部都采用string...原创 2020-04-25 17:47:48 · 134 阅读 · 0 评论 -
Redis学习_2_数据类型_1_string
文章目录关于string类型string基本操作关于使用set还是mset的思考数值增减操作数值时效性设置key的命名规范关于set命令的扩展关于string类型众所周知,redis是一个存key-value的数据库,可以通过set命令存入数据,如set name Jam、set age 22,对于这种set命令,虽然我们明面上没有指定数据类型,但是所有的key都是以string存储,我们所说...原创 2020-04-23 21:31:30 · 180 阅读 · 0 评论 -
Redis学习_1_Redis入门_2_Redis下载与基础操作
Redis下载Redis有Linux和Windows版本,不过Redis的作者说他做这个就没准备在Windows环境下用,所以Windows版本跟不上Linux的版本,不过为了方便学习,我们还是下载的Windows版,Linux版可以直接在官网下,Windows的点这里下载。下面以Windows为例。下载的Redis压缩包解压就可以用。这里的文件可以看这两类,第一类是.conf文件,里...原创 2020-04-23 12:33:48 · 144 阅读 · 0 评论 -
Redis学习_1_Redis入门_1_NoSQL与Redis介绍
关于NoSQLRedis不同于之前学习的MySQL、Oracle这些关系型数据库,Redis是一种非关系型数据库,即我们常说的NoSQL(Not-Only SQL),NoSQL主要解决海量用户和海量数据下的数据处理问题,是关系型数据库的一个补充。NoSQL有以下几个特征:可扩容,可伸缩大数据量下高性能灵活的数据模型高可用常见的NoSQL数据库有:Redismemcache...原创 2020-04-23 11:46:14 · 146 阅读 · 0 评论