Redis
文章平均质量分 71
Redis
shangjg3
这个作者很懒,什么都没留下…
展开
-
SpringBoot Redis 注解 拦截器来实现接口幂等性校验
其实思路很简单, 就是每次请求保证唯一性, 从而保证幂等性, 通过拦截器+注解, 就不用每次请求都写重复代码, 其实也可以利用spring aop实现。原创 2024-01-08 09:19:22 · 1219 阅读 · 0 评论 -
Redis 做接口限流
如果是第一次访问,此时拿到的结果为 nil,否则拿到的结果应该是一个数字,所以接下来就判断,如果拿到的结果是一个数字,并且这个数字还大于 count,那就说明已经超过流量限制了,那么直接返回查询的结果即可。通过 redisTemplate.execute 方法取执行一个 Lua 脚本,第一个参数是脚本所封装的对象,第二个参数是 key,对应了脚本中的 KEYS,后面是可变长度的参数,对应了脚本中的 ARGV。如果拿到的结果为 nil,说明是第一次访问,此时就给当前 key 自增 1,然后设置一个过期时间。原创 2024-01-02 17:14:48 · 700 阅读 · 0 评论 -
Redis 生产环境查找无过期时间的 key
在测试环境中,可以使用 keys 命令,模糊查询到需要的 key,但这个操作只适合在测试环境中使用,不适合在生产环境中使用,原因是 Redis 是单线程运行的,当 Redis 中的数据量很大时,由于此操作会遍历所有数据,并将结果一次性全部返回,执行时间会比较长,从而导致后续操作等待,直接影响系统的正常运行。因为 ACL_USER_26a26b84-578d-40bf-ab15-aeb188a56393 的是否过期是通过程序中生成新版本的 uuid,存储新的用户权限数据后;最近在项目中,就遇到这样的情况。原创 2024-01-02 10:22:50 · 821 阅读 · 0 评论 -
Redis 分布式锁总结
当有线程释放了锁之后,其它加锁失败的线程就会来继续加锁,加锁之前会先判断一下set集合的头部的线程跟当前要加锁的线程是不是同一个,如果是的话,那就加锁成功,如果不是的话,那么就加锁失败,这样就实现了加锁的顺序性。指定和不指定超时时间的主要区别是,加锁成功之后的逻辑不一样,不指定超时时间时,会开启watchdog后台线程,不断的续约加锁时间,而指定超时时间,就不会去开启watchdog定时任务,这样就不会续约,加锁key到了过期时间就会自动删除,也就达到了释放锁的目的。原创 2023-12-28 11:07:18 · 1200 阅读 · 0 评论 -
Spring缓存注解@Cacheable、@CachePut、@CacheEvict
如果项目没有第三方缓存源依赖时,spring boot 会默认配置ConcurrentMapCacheManager缓存管理器,其内部由ConcurrentHashMap存储缓存数据,如果有第三方缓存依赖,例如:caffeine、redis时,就会相应的配置CaffeineCacheManager或RedisCacheManager做默认缓存管理器,但只配置一个,具体优先级,推测是按CacheType枚举顺序,没有细查。当查询DB不存在的数据时,而缓存也不保存空值,就会导致请求每次都会打到数据库上面去。原创 2023-12-23 10:39:24 · 786 阅读 · 0 评论 -
Lettuce操作redis
Lettuce是一个高性能基于Java编写的Redis驱动框架,底层集成了Project Reactor提供天然的反应式编程,通信框架集成了Netty使用了非阻塞IO,5.x版本之后融合了JDK1.8的异步编程特性,在保证高性能的同时提供了十分丰富易用的API。本文主要介绍使用lettuce操作redis,使用到的软件版本:Java 1.8.0_191、Redis 5.0.8、lettuce 5.3.1.RELEASE。原创 2023-12-21 18:05:38 · 322 阅读 · 0 评论 -
Redis内存淘汰策略
LFU算法能更好的表示一个key被访问的热度。假如你使用的是LRU算法,一个key很久没有被访问到,只刚刚是偶尔被访问了一次,那么它就被认为是热点数据,不会被淘汰,而有些key将来是很有可能被访问到的则被淘汰了。它的全称是Least Frequently Used,它的核心思想是根据key的最近被访问的频率进行淘汰,很少被访问的优先被淘汰,被访问的多的则被留下来。Redis是基于内存的key-value数据库,因为系统内存大小有限,所以我们在使用Redis的时候可以配置Redis能使用的最大的内存大小。原创 2023-12-18 11:44:15 · 73 阅读 · 0 评论 -
Redis查看当前连接情况client list
oll : 输出列表包含的对象数量(当输出缓冲区没有剩余空间时,命令回复会以字符串对象的形式被入队到这个队列里)qbuf-free : 查询缓冲区剩余空间的长度(字节为单位, 0 表示没有剩余空间)qbuf : 查询缓冲区的长度(字节为单位, 0 表示没有分配查询缓冲区)w : 客户端套接字(在事件 loop 中)是可写的(writeable)obl : 输出缓冲区的长度(字节为单位, 0 表示没有分配输出缓冲区)r : 客户端套接字(在事件 loop 中)是可读的(readable)原创 2023-12-18 11:30:35 · 205 阅读 · 0 评论 -
Redis配置参数大全
redis提供了可以让master停止写入的方式,如果配置了min-slaves-to-write,健康的slave的个数小于N,mater就禁止写入。这样在slave离线的时候,不需要完全复制master的数据,如果可以执行部分同步,只需要把缓冲区的部分数据复制给slave,就能恢复正常复制状态。#在进行故障转移的时候,全部slave都会请求申请为master,但是有些slave可能与master断开连接一段时间了,导致数据过于陈旧,这样的slave不应该被提升为master。只要有足够的内存就行。原创 2023-12-18 10:39:15 · 374 阅读 · 0 评论 -
Redis的持久化机制和配置
虽然是“压缩”AOF文件的过程,但并非采用“基于原AOF文件”来重写或压缩,而是采取了类似RDB快照的方式:基于Copy On Write,全量遍历内存中数据,然后逐个序列到AOF文件中。将 rdb 文件的内容和增量的 AOF 日志文件存在一起。这里的 AOF 日志不再是全量的日志,而是自持久化开始到持久化结束的这段时间发生的增量 AOF 日志,通常这部分 AOF 日志很小。Redis加载RDB文件的速度比AOF快很多,因为RDB文件中直接存储的时内存数据,而AOF文件中存储的是一条条命令,需要重演命令。原创 2023-11-08 22:24:10 · 314 阅读 · 0 评论 -
redis 6.2.12集群部署
该节点中默认生成的配置或历史存储数据不一致导致的,清除对应节点的dump.rdb、nodes.conf文件,重启之后即可。将编译好的redis文件目录修改目录名(为了方便,以端口号命名),并复制1份。在每台机器上分别进入到这2个节点的目录,启动这2个节点的redis-server。文件redis.conf并启动redis-server。4.启动redis-server并查看进程状态。6.5 redis-cli 连接集群查看。启动并查看redis-server信息。原因可能是防火墙没有关闭。原创 2023-09-27 16:02:52 · 304 阅读 · 0 评论 -
redis-6.2.12 源码编译安装
后台启动redis# 修改pid文件保存目录# 修改日志文件路径和名称# 修改密码# 允许远程登录。原创 2023-07-31 09:29:11 · 114 阅读 · 1 评论