Redis-基础
文章平均质量分 80
OkidoGreen
这个作者很懒,什么都没留下…
展开
-
Redis集群之ASK错误、ASKING命令、REDIS_ASKING标识
一、ASK错误在进行重新分片期间,源节点向目标节点迁移一个槽的过程中,可能会出现这样一种情况:属于被迁移槽的一部分键值对保存在源节点里面,而另一部分键值对则保存在目标节点 里面 当客户端向源节点发送一个与数据库键有关的命令,并且命令要处理的数据库键恰好就属于正在被迁移的槽时: 源节点会先在自己的数据库里面查找指定的键,如果找到的话,就直接执行客户端发送的命令(底层实现:如果节点收到一个关于键key的命令请求,并且键key所属的槽i正好就指派给了这个节 点,那么节点会尝试在自己的数据库里查找键key,转载 2022-02-08 17:54:23 · 1196 阅读 · 0 评论 -
Springboot连接redis并动态切换database
springboot连接redis并动态切换database众所周知,redis多有个db,在jedis中可以使用select方法去动态的选择redis的database,但在springboot提供的StringRedisTemplate中确,没有该方法,好在StringRedisTemplate预留了一个setConnectionFactory方法,本文主为通过修改ConnectionFactory从而达到动态切换database的效果。springboot连接redispom.xml文转载 2022-01-13 16:52:41 · 1539 阅读 · 0 评论 -
Redis切换database及如何设置database个数
今天连公司数据库,发现db达到255个,不知道为什么,其实是256个从0开始的而我自己的只有16个我是windows的,linux是一样的,目录结构如图:编辑redis.conf配置文件,搜索database,可以找到:databases 16如图:通过看简单描述,我们大概知道: 最后一句话,意思是,初始的DB是0,(默认的是16),你能自己选择一个数字来作为数据库的大小,但是不能为0,大概就是这样…我们可以通过修改16,来达到你想要的=-=…注意:启动需要指定的转载 2022-01-13 13:40:51 · 4915 阅读 · 0 评论 -
缓存模式(Cache Aside、Read Through、Write Through、Write Behind)
概览缓存是一个有着更快的查询速度的存储技术,这里的更快是指比起从初始的数据源查询(比如数据库,以下都称作数据库)而言。我们经常会把频繁请求的或是耗时计算的数据缓存起来,在程序收到请求这些数据的时候可以直接从缓存中查询数据返回给客户端来提高系统的吞吐量,现在我们来看看有哪些缓存模式可以考虑。Cache-AsideCache-Aside是最广泛使用的缓存模式之一,如果能正确使用Cache-Aside的话,能极大的提升应用性能,Cache-Aside可用来读或写操作。读操作我们先来看下读操作的转载 2021-01-07 15:28:00 · 6016 阅读 · 0 评论 -
Cache Aside Pattern(读写缓存模式)
https://www.jianshu.com/p/fb3a41ea18echttps://www.cnblogs.com/findbetterme/p/11443168.html前言缓存是互联网高并发系统里常用的组件。由于多增加了一层,如果没有正确的使用效果可能适得其反,诸如“缓存是删除还是更新?”,“先操作数据库还是先操作缓存?”都是些老生常谈的话题,今天要介绍的是一个由 Facebo...转载 2020-02-06 10:16:37 · 1741 阅读 · 0 评论 -
redis key过期事件实现过期提醒
参考:https://blog.csdn.net/zhu_tianwei/article/details/80169900https://my.oschina.net/u/182501/blog/1927210https://www.cnblogs.com/sunsing123/p/10304184.htmlredis默认关闭,不建议开启。本文提供参考。键空间通知通常是不启用的,因为这个过程会产生额外消耗。1、开启redis配置## notify-keyspace-events E转载 2020-06-11 10:40:37 · 3795 阅读 · 1 评论 -
Springboot 监听redis key的过期事件
需求:处理订单过期自动取消,比如下单30分钟未支付自动更改订单状态解决方案1:可以利用redis天然的key自动过期机制,下单时将订单id写入redis,过期时间30分钟,30分钟后检查订单状态,如果未支付,则进行处理但是key过期了redis有通知吗?答案是肯定的。开启redis key过期提醒修改redis相关事件配置。找到redis配置文件redis.conf,查看“notify-keyspace-events”的配置项,如果没有,添加“notify-keyspace-events转载 2020-06-10 18:44:34 · 5036 阅读 · 0 评论 -
Redis事件通知(keyspace notification)
Keyspace 通知使得客户端可以通过订阅频道或模式,来接收那些以某种方式改动了 Redis 数据集的事件(触发某些事件后可以向指定的频道发送通知),该功能需要 Redis 版本大于 2.8。事件通过 Redis 的订阅与发布功能(pub/sub)来进行分发,因此所有支持订阅与发布功能的客户端都可以在无须做任何修改的情况下,直接使用此功能。因为 Redis 目前的订阅与发布功能采取的是发送即忘(fire and forget)策略,所以如果你的程序需要可靠事件通知(reliable notific转载 2020-06-10 18:39:56 · 1153 阅读 · 0 评论 -
Redis主从模式下从库过期的key仍然能够被读到的解决方案
大家在使用redis的时候,经常会用expire来设置key的过期时间,以为某个key到期就会马上清除。如果只是在单个redis(即一个主redis)下是没有问题的。但是如果为了实现读写分离,搭建了主从服务器,那么就会遇上从库Key不失效的问题了。(使用Redis3.2以后版本的同学请忽略,3.2之后的版本已不存在以下问题)场景重现:主: setex name 20 Johny 从: get name >> Johny ttl name >> 18 // 过转载 2020-06-10 18:34:39 · 1963 阅读 · 0 评论 -
Redis key过期策略
Redis所有的数据结构都可以设置过期时间,到期后,key会被自动删除。Redis key过期的方式有三种:被动删除:当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过期key 主动删除:由于惰性删除策略无法保证冷数据被及时删掉,所以Redis会定期主动淘汰一批已过期的key 当前已用内存超过maxmemory限定时,触发主动清理策略被动删除只有key被操作时(如GET),Redis才会被动检查该key是否过期,过期就删除,并返回NULL。这种删除策略对CPU友好,不转载 2020-06-10 18:29:01 · 2996 阅读 · 0 评论 -
redis cluster slots数量 为何是16384(2的14次方)
redis cluster集群通过分片的方式来保存数据库中键值对:集群的整个数据库被分为16384个槽(slot),数据库中的每个键都属于这16384个槽的其中一个,集群中的每个节点可以处理0个或者最多16384个槽 当数据库中的16384个槽都有节点在处理时,集群处于上线状态(ok);相反地,如果数据库中有任何一个槽没有得到处理,那么集群处于下线状态(fail). 为什么slots数量是16384(即2的14次方)? redis source code author antire转载 2020-06-10 18:05:12 · 1520 阅读 · 0 评论 -
Redis集群下过期key监听
背景基于Redis的主动事件的处理,比如:当用户购买了会员卡十分钟内没有付款,需要通过小程序或者APP向用户主动推送购买会员卡的优势,引导用户继续完成支付并购买等,类似的场景需要用户在指定的时间点后主动通知或者继续引导,使用 Redis过期键Event优雅、快捷的实现实战在Redis中有两种通知:类型:键空间通知:Keyspace@<db>_:mykey(针对mykey的所有的操作的通知) 键事件通知:Keyevent@<db>_:expired (键的过期转载 2020-06-10 16:25:19 · 5010 阅读 · 2 评论 -
Redis淘汰删除策略
6种淘汰Key策略Redis中通过maxmemory参数来设定内存的使用上限,当Redis使用内存达到设定的最大值的时候,会根据配置文件中的策略选取要删除的key来删除,从而给新的键值留出空间;目前Redis提供了6种的淘汰策略(默认的是noeviction): volatile-lru,在设置了过期时间的键空间中,移除最近最少使用的key; allkeys-lru,移除最近最少使用的key; volatile-random,在设置了过期时间的键空间中,随机移除一个k.转载 2020-06-10 12:22:36 · 515 阅读 · 0 评论 -
Redis淘汰删除策略
6种淘汰Key策略Redis中通过maxmemory参数来设定内存的使用上限,当Redis使用内存达到设定的最大值的时候,会根据配置文件中的策略选取要删除的key来删除,从而给新的键值留出空间;目前Redis提供了6种的淘汰策略(默认的是noeviction): volatile-lru,在设置了过期时间的键空间中,移除最近最少使用的key; allkeys-lru,移除最近最少使用的key; volatile-random,在设置了过期时间的键空间中,随机移除一个k.转载 2020-06-10 11:39:31 · 529 阅读 · 0 评论 -
Redis淘汰删除策略
6种淘汰Key策略Redis中通过maxmemory参数来设定内存的使用上限,当Redis使用内存达到设定的最大值的时候,会根据配置文件中的策略选取要删除的key来删除,从而给新的键值留出空间;目前Redis提供了6种的淘汰策略(默认的是noeviction): volatile-lru,在设置了过期时间的键空间中,移除最近最少使用的key; allkeys-lru,移除最近最少使用的key; volatile-random,在设置了过期时间的键空间中,随机移除一个k.转载 2020-06-10 11:38:40 · 562 阅读 · 0 评论 -
Redis SortedSet 中 score 的精度问题
一、问题发现通过 jedis 往 sortedset 中添加了个成员,并且设定了一个Double 类型的分数时,精度出现了问题测试代码如下:@Testpublic void zadd(){ jedis.zadd("test:cli", 13.36, "mb1");}如果用 jedis 的 api 来获取 score 的话一切正常@Testpublic void zscore(){ System.out.println(jedis.zscore("test:cli.转载 2020-05-18 12:16:42 · 2123 阅读 · 0 评论 -
揭开面纱,追着 redis 进行七连问
Hello Redis 有几个问题想请教你Hello,Redis! 我们相处已经很多年了,从模糊的认识到现在我们已经深入结合,你的好我一直都知道也一直都记住,能否在让我多问问你的几个问题,让我更加深入的去了解你。1. redis的通讯协议是什么redis的通讯协议是文本协议,是的,Redis服务器与客户端通过RESP(REdis Serialization Pro...转载 2020-04-28 19:14:21 · 1311 阅读 · 2 评论 -
Redis的基础事务与ABA问题
Redis的基础事务一,Redis的事务命令命令 说明 备注 multi 使用该命令开启事务 该命令后的操作指令会进入队列,并不会直接开始执行 watch key1 [key2……] 监听某些键 当被监听的键的事务执行前被修改,则事务发生回滚。使用乐观锁 unwatch key1 [key2……] 取消监听某些键 e...转载 2020-04-28 19:12:16 · 933 阅读 · 0 评论 -
分布式缓存Redis之Pipeline(管道)
Redis 的 pipeline(管道)功能在命令行中没有,但 redis 是支持 pipeline 的,而且在各个语言版的 client 中都有相应的实现。 由于网络开销延迟,就算 redis server 端有很强的处理能力,也会由于收到的 client 消息少,而造成吞吐量小。当 client 使用 pipelining 发送命令时,redis server 必须将部分请求放到队列中(使用...转载 2020-04-28 18:30:11 · 625 阅读 · 0 评论 -
使用setbit、bitcount实现用户上线次数统计
1.语法SETBIT key offset value对 key 所储存的字符串值,设置或清除指定偏移量offset上的位(bit)。位的设置或清除取决于 value 参数,value参数取值 0 或者 1。字符串会进行伸展(grown)以确保它可以将 value 保存在指定的偏移量上。当字符串值进行伸展时,空白位置以 0 填充。offset 参数必须大于或等于 0 ,小于 2^32 (...转载 2020-02-18 08:22:15 · 875 阅读 · 0 评论 -
Redis 命令 setbit、bitcount、getbit、bitop
注:setbit 是按照 bit 的位置来设置1的,从左开始,第一位offset为0,第二位为1,而bitcount 的start 和 end 是 基于byte的,即 bitcount xx 0 2 的话,计算的是bit offset从0到15的2个byte中bit为1的数量1.SETBIT key offset value 对 key 所储存的字符串值,设置或清除指定偏移量上的...转载 2020-02-15 22:04:41 · 1529 阅读 · 0 评论 -
缓存穿透、缓存击穿、缓存雪崩及其解决方案
前言:缓存的使用场景设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效应。1.缓存穿透 缓存穿透是指查询一个一定不存在的数据,因为缓存中也无该数据的信息,则会直接去数据库层进行查询,从系统层面来看像是穿透了缓存层直接达到db,从而称为缓存穿透,没有了缓存层的保护,这种查询一定不存在的数据对系统来说可能是一种危险,如果有人恶意用这种一定不存在的数据来频繁请求系统...转载 2019-11-22 12:06:18 · 615 阅读 · 0 评论 -
关于【缓存穿透、缓存击穿、缓存雪崩、热点数据失效】问题的解决方案
在我们的平常的项目中多多少少都会使用到缓存,因为一些数据我们没有必要每次查询的时候都去查询到数据库。特别是高 QPS 的系统,每次都去查询数据库,对于你的数据库来说将是灾难。今天我们不牵涉多级缓存的知识,就把系统使用到的缓存方案,不管是一级还是多级的都统称为缓存,主要是为了讲述使用缓存的时候可能会遇到的一些问题以及一些解决办法。我们使用缓存时,我们的业务系统大概的调用流程如下图:...转载 2019-11-22 12:04:41 · 548 阅读 · 0 评论 -
Redis的key和value大小限制
Redis的key和value大小限制今天研究了下将java bean序列化到redis中存储起来,突然脑袋灵光一闪,对象大小会不会超过redis限制?不管怎么着,还是搞清楚一下比较好,所以就去问了下百度,果然没多少人关心这个问题,没找到比较合适的答案,所以决定还是去官网找吧。找到两句比较关键的话,截图如下。https://redis.io/topics/data-types...转载 2019-11-19 12:06:43 · 8512 阅读 · 0 评论 -
Redis中PipeLine使用(一)
(一)简介 Redis客户端与Redis之间使用TCP协议进行连接,一个客户端可以通过一个socket连接发起多个请求命令。每个请求命令发出后client通常会阻塞并等待redis服务处理,redis处理完后请求命令后会将结果通过响应报文返回给client,因此当执行多条命令的时候都需要等待上一条命令执行完毕才能执行,如:get ‘0’,get ‘1’,get ‘2’其执行过程转载 2016-08-30 18:13:28 · 5383 阅读 · 0 评论 -
基于redis的分布式锁实现
https://segmentfault.com/a/1190000012919740随着业务越来越复杂,应用服务都会朝着分布式、集群方向部署,而分布式CAP原则告诉我们,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。很多场景中,需要使用分布式事务、分布式锁等技术来保证数据最终一致性。有的时候,我...转载 2018-08-05 21:05:46 · 709 阅读 · 0 评论 -
Redis实现分布式锁的几种方法总结
https://m.jb51.net/article/118312.htm 这篇文章主要介绍了Redis实现分布式锁的几种方法总结的相关资料, Redis实现与Zookeeper实现和数据库实现,需要的朋友可以参考下Redis实现分布式锁的几种方法总结分布式锁是控制分布式系统之间同步访问共享资源的一种方式。在分布式系统中,常常需要协调他们的动作。如果不同的系统或是同一个系统的不同主...转载 2018-08-05 12:36:57 · 1703 阅读 · 0 评论 -
redis分布式锁处理并发问题
https://blog.csdn.net/d1562901685/article/details/54881862 redis锁处理并发问题redis锁处理高并发问题十分常见,使用的时候常见有几种错误,和对应的解决办法,在此进行自己的总结和整理。set方式 setnx方式 setnx+getset方式set方式 作为redis小白,一开始能想到的使用redis加锁的方式就...转载 2018-08-05 12:30:36 · 1043 阅读 · 0 评论 -
redis+lua 实现分布式令牌桶,高并发限流
https://blog.csdn.net/sunlihuo/article/details/79700225 方案一、在提供给业务方的Controller层进行控制。 1、使用guava提供工具库里的RateLimiter类(内部采用令牌捅算法实现)进行限流 2、使用Java自带delayqueue的延迟队列实现(编码过程相对麻烦,此处省略代码) 3、使用Redis实现,存储两个k...转载 2018-08-09 11:20:55 · 4357 阅读 · 1 评论 -
挑战Kafka!Redis5.0重量级特性Stream尝鲜
https://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=2653549949&idx=1&sn=7f6c4cf8642478574718ed0f8cf61409&chksm=813a64e5b64dedf357cef4e2894e33a75e3ae51575a4e3211c1da23008ef79173962e9a...转载 2018-07-19 20:01:12 · 4378 阅读 · 0 评论 -
Redis、Memcache和MongoDB的区别
https://www.cnblogs.com/tuyile006/p/6382062.html >>MemcachedMemcached的优点:Memcached可以利用多核优势,单实例吞吐量极高,可以达到几十万QPS(取决于key、value的字节大小以及服务器硬件性能,日常环境中QPS高峰大约在4-6w左右)。适用于最大程度扛量。支持直接配置为session ha...转载 2018-07-18 18:49:25 · 614 阅读 · 0 评论 -
Redis配置文件详解
https://blog.csdn.net/neubuffer/article/details/17003909redis是一款开源的、高性能的键-值存储(key-value store),和memcached类似,redis常被称作是一款key-value内存存储系统或者内存数据库,同时由于它支持丰富的数据结构,又被称为一种数据结构服务器(data structure server)。编...转载 2018-07-16 18:05:46 · 580 阅读 · 0 评论 -
Redis持久化存储(AOF与RDB两种模式)
https://blog.csdn.net/canot/article/details/52886923Redis中数据存储模式有2种:cache-only,persistence;cache-only即只做为“缓存”服务,不持久数据,数据在服务终止后将消失,此模式下也将不存在“数据恢复”的手段,是一种安全性低/效率高/容易扩展的方式;persistence转载 2018-05-10 13:44:42 · 633 阅读 · 0 评论 -
基于Redis的限流系统的设计(LUA)
https://www.cnblogs.com/AndyAo/p/8144049.html本文讲述基于Redis的限流系统的设计,主要会谈及限流系统中限流策略这个功能的设计;在实现方面,算法使用的是令牌桶算法来,访问Redis使用lua脚本。 1、概念In computer networks, rate limiting is used to control the rate o...转载 2018-08-08 21:11:49 · 2265 阅读 · 1 评论 -
redis+lua与秒杀--lua入门
秒杀场景用户秒杀,后端服务接收到请求之后的操作步骤:校验请求参数 解析用户信息 解析所秒商品信息,及秒商品数量 校验用户在限定的时间内是否秒过 校验库存是否充足 扣库存 记录用户秒单记录 异步写订单记录 返回请求问题在上面所描述的步骤中 校验库存与扣库存,存在先后顺序,但是并没有原子性。在关系数据库中,可以通过事务来解决这个问题,但是关系数据库性能有瓶颈。当然在请求量...转载 2018-08-08 22:01:39 · 949 阅读 · 1 评论 -
redis 报错 Redis protected-mode 配置文件没有真正启动
文章来源:https://blog.csdn.net/Agly_Clarlie/article/details/52251746https://blog.csdn.net/Agly_Clarlie/article/details/52251746https://blog.csdn.net/fly43108622/article/details/52972433问题表象:(...转载 2019-08-29 20:10:46 · 1549 阅读 · 0 评论 -
浅谈Redis中的Rehash机制
https://blog.csdn.net/cqk0100/article/details/80400811众所周知,redis支持多种数据结构,其中dict是使用频率相当高,也是非常实用的一种结构。在redis的具体实现中,使用了一种叫做渐进式哈希(rehashing)的机制来提高dict的缩放效率,在看这一部分的源码的时候,真的是有实实在在被优雅到的。其实关于渐进式哈希的相关文章...转载 2019-07-05 19:07:49 · 2954 阅读 · 2 评论 -
Redis:rehash
https://www.jianshu.com/p/a2fb3b727879Redis解决键冲突:使用的是链地址法随着操作的不断执行, 哈希表保存的键值对会逐渐地增多或者减少, 为了让哈希表的负载因子(load factor)维持在一个合理的范围之内, 当哈希表保存的键值对数量太多或者太少时, 程序需要对哈希表的大小进行相应的扩展或者收缩。扩展和收缩哈希表的工作可以通过执行 rehas...转载 2019-07-05 19:03:17 · 616 阅读 · 0 评论 -
为什么说Redis是单线程的以及Redis为什么这么快!
https://blog.csdn.net/chenyao1994/article/details/79491337一、前言近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到什么是“二八定律”、什么是“热数据和冷数据”,复杂一点的会问到缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题,这些看似不常见的概念,都与我们的缓存服务器相关,一般常用的缓存服务器有Redis...转载 2019-05-17 16:44:17 · 630 阅读 · 0 评论 -
Redis Eval Script
https://www.cnblogs.com/bibi-feiniaoyuan/p/9448621.html简介从Redis 2.6 版本开始,内嵌支持 Lua 环境。通过使用EVAL或EVALSHA命令可以使用 Lua 解释器来执行脚本。 EVAL和EVALSHA的使用是差不多的(下面有讲区别)。EVAL命令语法:EVAL script numkeys key[key.....转载 2019-05-24 16:51:36 · 1013 阅读 · 0 评论