![](https://img-blog.csdnimg.cn/20190927151101105.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
redis7
文章平均质量分 72
redis7
鸭鸭老板
偏执只会左右你的思考
展开
-
Java17 --- redis7缓存双写一致性
读写缓存:①、同步直写策略:写数据库后也同步写redis缓存,缓存和数据库中的数据一致,对于读写缓存来说,要想保证缓存和数据库中的数据一致,就要采用同步直写策略。①、在业务程序运行的时候,统计下线程读数据和写缓存的操作时间,评估出项目的读数据业务逻辑的耗时,以此为基础,然后写数据的休眠时间则在读数据业务的耗时上加百毫秒就行。就是如果数据库写入成功,缓存更新失败,那么只要到达过期时间,则后面的读请求自然会从数据库中读取新值然后回填缓存,达到一致性,要以mysql的数据库写入库为准。4、业务cache刷新。原创 2024-06-18 13:24:54 · 1162 阅读 · 0 评论 -
Java --- redis7的缓存淘汰策略
1、在所有的key都是最近使用,那么就需要选择allkeys-lru进行置换最近最不经常使用的key,如果不确定使用哪种策略,推荐使用allkeys-lru。最近最少使用页面置换算法,淘汰最长时间未被使用的页面,看页面最后一次被使用到发生调度的时间长短,首先淘汰最长未被使用的页面。3、allkeys-lru:对所有key使用LRU算法进行删除,优先删除掉最近最不常用的key,用以保存新数据。4、volatile-lru:对所有设置了过期时间的key使用LRU算法进行删除。原创 2023-05-18 09:06:57 · 504 阅读 · 0 评论 -
Java --- redis7之redisson的使用
加锁成功就会启动一个watch dog看门狗,他是一个后台线程,会每隔10秒检查一下,如果客户端A还持有锁key,那么就会不断地延长锁key的生存时间,默认每次续命又从30秒新开始。如:加入在集群环境中,redis失败1台,可以接受,2 * 1 + 1 = 3,部署3台,宕机1台剩2台可以正常工作,就部署3台。redisson里主要使用“看门狗”定期检查(每1/3的锁时间检查1次),如果线程还持有锁,则刷新过期时间。②、通过hexists判断,如果锁已存在,并且锁的是当前线程,则证明是重入锁,加锁成功。原创 2023-05-17 21:29:52 · 1519 阅读 · 0 评论 -
Java --- redis7实现分布式锁
在分布式系统中,因为竞争的线程可能不在同一个节点上(即同一个jvm中)所以锁就失效了,就需要利用第三方的一个组件,来获取锁,未获取到锁,则阻塞当前想要运行的线程。当执行monitorenter时,如果目标锁对象的计数器为0,那么它没有被其他线程所持有,Java虚拟机会将该锁对象的持有线程设置为当前线程,并且将计数器加1。在目标锁对象的计数器不为零的情况下,如果锁对象的持有线程是当前线程,那么Java虚拟机可以将其计数器加1,否则需要等待,直到持有线程释放该锁。原创 2023-05-16 23:00:21 · 680 阅读 · 0 评论 -
Java --- redis7之缓存预热+雪崩+穿透+击穿
1、MySQL做数据新增 ,redis利用回写机制,让它逐步实现100条新增记录的同步,部署发布版本的时候,自己人提前做一次redis同步。②、redis集群。查询一条或N条数据,redis中没有,mysql中也没有,但请求每次都会去查询数据库,导致后台数据库压力暴增,就是缓存穿透。第一次访问到MySQL,空对象缓存后第二次就返回defaultNull缺省值,避免MySQL被攻击,不用到数据库中去走一圈了。大量的请求同时查询一个key时,而这个热点key正好失效,就会导致大量的请求都打到数据库上面去。原创 2023-05-13 06:47:14 · 613 阅读 · 2 评论 -
Java --- redis7之布隆过滤器BloomFilter
由一个初值都为零的bit数组和多个哈希函数构成,用来快速判断集合中存在某个元素。原创 2023-05-12 22:24:13 · 1158 阅读 · 0 评论 -
Java --- redis7之大数据统计之Bitmap
方法可行,但很难实际使用。当签到用户的体量小可以,一旦用户数过大,数据量也会暴增。2、一个月31天,int类型是32位,那么一个int类型就相当一个月。3、一条数据直接存储一个月的签到记录,不在存储一天的签到记录。1、一条签到记录对应一条记录,会占据越来越大的空间。签到统计时,用户一天的签到用1个bit位就能表示。一个月的签到天数,连续签到数。案例实现参考布隆过滤器!3、最近一周的活跃用户等。原创 2023-05-12 22:26:16 · 331 阅读 · 0 评论 -
Java --- redis7之GEO实现地图地址推送
移动互联网时代LBS应用越来越多,交友软件中附近的妹子,外卖软件中附近的美食店铺,打车软件中附近的车辆,这些软件中是如何实现的?2、一般MySQL查询的是一个平面矩形访问,而叫车服务要以自己为中心N公里半径的圆形覆盖。1、查询性能问题,当在并发高,数据量访问大的情况下查询会搞垮MySQL数据库。3、矩形计算在长距离计算时会有很大误差,MySQL不合适。GEOHASH返回坐标的geohash表示。某app上搜索附近的酒店距离自己多远。某地图软件上附近的人,景区、酒店等。相亲app上小姐姐的距离。原创 2023-05-11 05:27:38 · 769 阅读 · 2 评论 -
Java --- redis7使用hyperloglog实现淘宝网站首页亿级UV的redis统计方案
一、使用hyperloglog实现淘宝网站首页亿级UV的redis统计方案。原创 2023-05-11 02:00:23 · 134 阅读 · 0 评论 -
redis --- 集成lettuce
【代码】redis --- 集成lettuce。原创 2023-04-09 10:09:17 · 66 阅读 · 0 评论 -
redis --- 事务
一旦执行了exec之前加的监控锁都会被取消掉,当客户端连接丢失的时候(如退出连接),所有东西都会被取消监视。与传统数据库事务区别在于不一定要么一起成功要么一起失败。redis使用Watch来提供乐观锁定,类似于CAS.。MULTI与discard的使用。MULTI与exec的使用。原创 2023-04-05 20:21:39 · 461 阅读 · 0 评论 -
redis --- AOF(Append Only File)
aof文件重写并不是对原文件进行重新整理,而是直接读取服务器现有的键值对,然后用一条命令去代替之前记录这个键值对的多条命令,生成一个新的文件后去替换原来的aof文件。redis7.0以后aof文件有三个:base基本文件,incr增量文件,manifest清单文件。3、使用异常修复命令:redis-check-aof --fix进行修复。1、将正常的AOF文件进行乱写,模拟网络闪断文件写error。2、重启redis服务进入AOF文件载入,服务启动失败。重启服务,查看aof文件是否正常。原创 2023-04-05 11:22:21 · 705 阅读 · 0 评论 -
redis --- RDB(Redis Data Base)
2、bgsave:redis会在后台异步进行快照操作,不阻塞快照同时还可以响应客户端请求,该触发方式会fork一个子进程由子进程复制持久化过程。1、save:在主程序中执行会阻塞当前redis服务器,直到持久化工作完成,执行save命令期间,redis不能处理其他命令,结论:执行flushdb/flushall命令会产生dump.rdb文件,但里面是空的,没有意义。物理恢复,一定服务和备份分机隔离,防止生产机物理损坏后备份文件也挂掉!将备份成功后使用flushdb清空redis,测试是否可以恢复数据。原创 2023-04-04 16:09:13 · 458 阅读 · 0 评论 -
redis --- bitfield类型使用
②、sat:使用饱和计算(saturation arithmetic)方法处理溢出,下溢计算结果为最小的整数值,而上溢计算的结果为最大的整数值。③、fail:命令将拒绝执行那些会导致上溢或下溢情况出现的计算,并向用户返回空值表示计算未被执行。①、wrap:使用回绕(wrap around)方法处理有符号整数和无符号整数的溢出情况。这里默认incrby使用wrap参数。原创 2023-04-04 10:55:03 · 1049 阅读 · 0 评论 -
redis --- Stream类型的使用
milisecondsTime指redis节点服务器的本地时间,如果存在当前的毫秒时间戳比以前已经存在的数据的时间戳小的话(本地时间钟后跳),那么系统将会采用以前相同的毫秒创建新的id,即redis在增加消息条目时会检查当前id与上一条目的id,自动纠错的情况,一定要保证后面的id比前面大,一个流中信息条目的id必须是单调增的,这是流的基础。消费组的目的:让组内的多个消费者共同分担读取信息,所以,通常会让每个消费者读取部分消息,从而实现消息读取负载在多个消费者间是均衡分布的。原创 2023-04-04 09:50:00 · 896 阅读 · 0 评论 -
redis --- GEO类型使用
1、geoadd :多个经度(longitude)、维度(latitude)、位置名称(member)添加到指定的key中。4、georadius:以给定的经纬度为中心,返回与中心的距离不超过给定最大距离的所有位置元素。127.0.0.1:6379> geodist city 秦始皇 代王中学 km。127.0.0.1:6379> geohash city 秦始皇 代王中学。127.0.0.1:6379> geopos city 秦始皇 代王中学。3、feodist:返回两个给定位置之间的距离。原创 2023-04-03 15:23:53 · 529 阅读 · 0 评论 -
redis --- bitmap类型的使用
setbit key offset value :setbit键 偏移位 只能是0或者1,bitmap的偏移量是从零开始的。原创 2023-04-03 05:58:24 · 165 阅读 · 0 评论 -
redis --- ZSet类型的使用
获取指定分数范围的元素 :①、withscores ②、( 不包含 ③、limit作用是限制返回。按照元素分数从小到大的顺序返回索引从start到stop之间的所有元素。从键名列表中的第一个非空排序集中弹出一个或多个元素,它们是成员分数对。某个score下对应的value值,作用是删除元素。获取指定分数范围内的元素个数。获取集合中元素的数量。原创 2023-04-03 05:01:48 · 412 阅读 · 0 评论 -
redis --- Set类型使用
redis7新命令,它不返回结果集,而只返回结果的基数。返回由所有给定集合的交集产生的集合的基数。从集合中随机展现设置的数字个数元素,元素不删除。将key1里已存在的某个值赋给key2。从集合中随机弹出一个元素,出一个删一个。获取集合里面的元素个数。判断元素是否在集合中。遍历集合中的所有元素。原创 2023-04-03 03:54:16 · 445 阅读 · 0 评论 -
redis --- Hash类型的使用
127.0.0.1:6379> hsetnx user:1 sax 男。127.0.0.1:6379> hsetnx user:1 sax 男。在key里面的某个值的key。获取某个key内的全部数量。不存在赋值,存在无效。原创 2023-04-03 01:46:45 · 379 阅读 · 0 评论 -
redis --- List类型使用
开始index结束index,截取指定范围的值后再赋值给key。数字N给定值2,相当于删除N个值等于2的元素。按照索引下标获取元素(从上到下)获取列表中元素的个数。原创 2023-04-03 01:09:47 · 343 阅读 · 0 评论 -
redis --- string类型的使用
GET—返回存储在key处的旧字符串,如果key不存在,则返回nil。PXAT unix-time-milliseconds --设置密钥将过期的指定Unix时间,以毫秒为单位。EXAT timestamp seconds --设置密钥将过期的指定Unix时间,以秒为单位。2、增加指定的整数:INCRBY key increment。PX毫秒--设置指定的过期时间,以毫秒为单位。EX秒--设置指定的过期时间,以秒为单位。XX——仅在密钥已存在的情况下设置密钥。参数:nx与xx使用。参数: exat使用。原创 2023-04-03 00:12:45 · 558 阅读 · 0 评论 -
redis --- 常用key命令
非阻塞删除,仅仅将keys从keyspace元数据中删除,真正的删除会在后续异步中操作。查看还有多少秒过期,-1表示永不过期,-2表示已过期。将当前数据库的key移动到给定的数据库db当中。切换数据库【0-15】,默认为0。查看当前数据库key的数量。给定的key设置过期时间。判断某个key是否存在。查看当前库所有key。查看key是什么类型。删除指定的key数据。原创 2023-04-02 22:15:24 · 3425 阅读 · 0 评论 -
Java --- redis7安装
redis-benchmark:性能测试工具,服务启动后运行该命令,看看自己本子性能如何。redis-check-dump:修复有问题的dump.rdb文件。redis-check-aof:修复有问题的AOF文件。redis-sentinel:redis集群使用。redis-server:Redis服务器启动命令。修改拷贝的redis.conf配置文件做初始化设置。将redis的默认配置文件拷贝到自定义目录。redis-cli:客户端,操作入口。使用tar -zxvf 压缩包名:解压。原创 2023-04-02 04:18:01 · 454 阅读 · 0 评论