
redis
古笑来
愿今日之所作,可为君行一时方便!
展开
-
redis底层的数据类型
所有的的数据,在最底层要么是字符,要是数字,redis中的所有的key都是string类型的string在redis3.2之前,使用的上述结构,一个char数组,一个使用长度,一个还剩多长,但这样在string比较短时候,比较浪费空间。zhi这个数据结构我们称之为 简单动态字符串(simple dynamic string,SDS)。在3.2之后改成了这样:在string长度小于32的时候(图片右下角)使用sdshdr5,用一个8为位的flag存储类型(高三位)和长度(低五位)。在实际的应用.原创 2021-10-25 18:43:09 · 401 阅读 · 1 评论 -
redis相关面试题
原创 2021-10-24 15:05:48 · 77 阅读 · 0 评论 -
缓存技术选型
redis和memcached区别redis数据类型比memcache丰富memcache不支持集群模式,redis原生就支持原创 2021-10-24 15:04:54 · 1723 阅读 · 0 评论 -
redis持久化
rdb什么时候触发执行save和bgsave命令配置文件设置save 规则,自动间隔性执行bgsave命令主从复制时,从库全量复制同步主库数据,主库会执行bgsave执行flushall命令清空服务器数据执行shutdown命令关闭Redis时,会执行save命令触发的过程copyonwrite:主进程fork()子进程之后,内核把主进程中所有的内存页的权限都设为read-only,然后子进程的地址空间指向主进程。这也就是共享了主进程的内存,当其中某个进程写内存时(这里肯定是主进程写...原创 2021-10-24 15:04:20 · 2036 阅读 · 0 评论 -
cluster集群通信
https://baijiahao.baidu.com/s?id=1663270958212268352&wfr=spider&for=pc添加链接描述为什么使用hash一致性算法hash 算法,以及弊端(如果有一个master宕机了,大部分的数据都可能错位)。不推荐使用。hash一致性算法,落到那个区间,就顺时针找最近的节点最为落点,如果这个落点挂了,不会影像到其他的落点。会有一个热点问题,某一个落点上的数据过多,导致性能下降。使用虚拟节点,解决热落点的问题,使每个节点的数据都原创 2021-10-24 15:00:44 · 574 阅读 · 0 评论 -
redis集群架构
https://baijiahao.baidu.com/s?id=1663270958212268352&wfr=spider&for=pchttps://www.cnblogs.com/crazymakercircle/p/14282108.html主从复制的过程复制+哨兵模式的集群存在的问题master多大的内存,就只能存这个多的数据。master无法横向扩容。redis cluster > replication + sentinal缓存节点的扩展原创 2021-10-24 14:54:08 · 180 阅读 · 0 评论 -
数据库缓存一致性
什么情况下会出现数据库缓存双写不一致的情况?读数据库 计算 写回数据库 更新缓存,假设现在两个线程,会出现这种问题。有一个线程读取数据库,再更新缓存的是后卡顿,那么就会造成数据库与缓存不一致的问题。怎么解决?一般都是删除缓存而不是更新缓存,因为放到缓存中的数据是要经过计算后的数据,而且缓存很宝贵,不必每次更新操作都跟新数据库。我都是在数据库更新的时候删除缓存,在查询的时候把缓存放到数据库。我所说的更新也包括删除操作。不管是先更新数据库,再删除缓存先删除缓存,再更新数据库缓存双删都不能完全避免原创 2021-10-24 14:44:24 · 107 阅读 · 0 评论 -
redis淘汰策略
redis内存不足怎么办,淘汰策略no evictionredis中lru算法(Least recently used,最近最少使用),采用最久未使用策略最久未使用存在的问题,对A来说相当不公平lfu(Last Frequently Use 最不常(频繁)使用)最不常使用 ,针对的是频率总结:存储数(counter)的只有8位,所以采用逻辑计数器(他是一种基于概率的计数器,这个概率的大小受count值大小的影响),决定count是否增加。时间越久count可能越大,这不符合我们的要原创 2021-10-24 14:42:20 · 1377 阅读 · 0 评论 -
redis删除策略
redis三种删除策略定时删除:到期就删,节约内存,无占用。不分时段占用CPU资源,频度高。拿时间换空间惰性删除:内存占用严重,数据到期时不做删除,等下次访问时进行删除,CPU利用率高 拿空间换时间定期删除:内存定期随机删除 ,每秒花费固定的CPU资源维护内存,随机抽查,重点抽查一般都是使用惰性删除和定期删除混合删除;定时删除,在每一个key后面跑一个定时器,很费cpu...原创 2021-10-24 14:27:23 · 1376 阅读 · 0 评论 -
redis分布式锁
redisson 自带续命线程redis分布式锁setnx 没有拿到锁的服务需要轮询拿锁拿到锁需要守护线程续命如果执行业务的逻辑,由于某种不知名原因,执行时间变的非常长,那么其他线程就拿不到这个锁。实际生产环境是这样实现分布式可重入锁的:value中增加唯一id MAC地址 + jvm进程ID + 线程IDvalue中增加count 重入次数。拿出来在增加,无法保证原子性,怎么办?lum表达式设置这个key,执行事务逻辑后,看对应的key的value还是自己么?是则提交业务,不是则回原创 2021-10-23 15:40:08 · 76 阅读 · 0 评论 -
redis性能量化
高并发、高性能单机的redis,并发在万级(qps万级)是没有问题的,如果要十万、百万级的并发需要用redis的集群架构。原创 2021-10-23 15:38:08 · 149 阅读 · 0 评论 -
redis的应用场景
缓存数据,使访问变的速度更快减轻数据库压力,使应用支持更高的并发。单机数据库 每秒4k就不行了,但缓存每秒4w都没问题redis数据类型,各自的作用,用处zset使用场景我们这边有一个流量统计服务,里面有个服务流量排行榜的功能是我设计的。我这边使用的就是zset,服务名作为value,访问次数作为score,服务被访问后score++。排名的时候取topN即可...原创 2021-10-23 15:36:33 · 72 阅读 · 0 评论 -
redis快的原因
为甚redis单线程还这么快Redis 确实是单线程模型,指的是执行 Redis 命令的核心模块是单线程的,而不是整个 Redis 实例就一个线程。文件事件分派器队列的消费是单线程的,所以Redis才叫单线程模型。组成结构为4部分:多个套接字(socket)、IO多路复用程序、文件事件分派器、事件处理器(连接、请求、应答)纯内存操作io多路复用单线程避免的上下文切换...原创 2021-10-23 15:32:18 · 65 阅读 · 0 评论 -
缓存穿透、缓存击穿、缓存雪崩
缓存穿透:缓存没有 数据库也没有,发起查找id不存在的请求这时的用户很可能是攻击者,攻击会导致数据库压力过大。当我们从数据库找不到的时候,我们也将这个空对象设置到缓存里边去,下次再请求的时候,就可以从缓存里边获取了,这种情况我们一般会将空对象设置一个较短的过期时间。加强安全模块,减少这样的攻击缓存击穿:缓存中没有数据,数据库中有数据,统一时刻并发访问这一条数据。这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力。数据库连接池可以控制并发,原创 2021-10-23 15:30:01 · 104 阅读 · 0 评论 -
redis事务
https://redisbook.readthedocs.io/en/latest/feature/transaction.html直观操作实际开发中没人用原创 2021-10-23 15:22:09 · 66 阅读 · 0 评论 -
redis基本命令
http://kaito-kidd.com/2020/09/09/how-i-learned-redis/学会基础数据类型的用法。每种数据类型,适用于什么场景,客户端操作、redisTemplate操作、jedis操作string元素类型可以是string/int/float,适用于关系型数据库中的大部分场景。图片,字节流,等都可以被存储,取得时候进行但序列化选库,一共16个,不选为0select 15设置成功返回okset name lg总成功返回okmset user lg age 1原创 2021-07-21 10:42:22 · 72 阅读 · 0 评论