Redis
文章平均质量分 91
Seapp
成功之前我们要做应该做的事情,成功之后我们才可以做喜欢做的事情。
展开
-
Redis高性能设计之epoll和IO多路复用深度解析
I/O:网络I/O多路:多个客户端连接(连接就是套接字描述符,即socket或者channel),指的是多条TCP连接复用:用一个进程来处理多条的连接,使用单进程就能够实现同时处理多个客户端的连接。总结:实现了用一个进程处理大量的用户连接,IO多路复用类似一个规范和接口落地实现。可以分select->poll->epoll三个阶段来描述。同步阻塞同步非阻塞异步阻塞异步非阻塞。原创 2023-06-07 17:22:32 · 1837 阅读 · 0 评论 -
Redis经典五大数据类型源码及底层实现
int:保存long型(长整型)的64位(8个字节)有符号整数。只有整数才会使用int,如果是浮点数,Redis内部其实先将浮点数转化为字符串值,然后再保存。- embstr:代表embstr格式的SDS(Simple Dynamic String简单动态字符串),保存长度小于44字节的字符串。EMBSTR顾名思义即:embedded String,表示嵌入式的字符串。raw:保存长度大于44字节的字符串。原创 2023-06-06 11:26:21 · 723 阅读 · 0 评论 -
Redis的缓存过期淘汰策略
对CPU不友好,用处理器性能换取存储空间(拿时间换空间)。原创 2023-06-02 10:36:56 · 744 阅读 · 1 评论 -
Redis-- 缓存预热+缓存雪崩+缓存击穿+缓存穿透
请求去查询一条记录,先查redis无,后查mysql无,都查询不到该条记录。但是请求每次都会达到数据库上面去。导致后台数据库压力暴增。这种现象我们称为缓存穿透,这个redis变成了一个摆设。大量的请求同时查询一个key时,此时这个key正好失效了,就会导致大量的请求都达到数据库上面去。简单说就是热点key突然失效了,暴打mysql。穿透和击穿,截然不同。原创 2023-05-30 11:00:26 · 895 阅读 · 0 评论 -
Redis之bitmap/hyperloglog/GEO
Redis Hyperloglog是用来做基数统计的算法,hyperloglog的优点是,在输入元素的数量或者体积非常大时,计算基数所需的空间总是固定的,并且是很小的。在Redis里面,每个HyperLogLog键只需要花费12KB内存,就可以计算接近2^64个不同元素的基数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。但是,因为HyperLogLog只会根据输入元素来计算基数,而不会储存输入元素本身,所以HyperLogLog不能像集合那样,返回输入的各个元素。原创 2023-05-24 09:40:42 · 899 阅读 · 0 评论 -
Redis缓存双写一致性之更新策略
先删除缓存值再更新数据库,有可能导致请求因缓存缺失而访问数据库,给数据库带来压力导致打满mysql。如果业务应用中读取数据库和写缓存的时间不好估算,那么延迟双删中的等待时间就不好设置。原创 2023-05-18 14:21:05 · 1133 阅读 · 1 评论 -
Redis BigKey
这个指令没有offset、limit参数,是要一次性吐出所有满足条件的key,由于redis是单线程的,其所有操作都是原子的,而keys算法是遍历算法,复杂度是O(n),如果实例中有千万级以上的key,这个指令就会导致Redis服务卡顿,所有读写Redis的其它的指令都会被延后甚至会超时报错,可能会引起缓存雪崩甚至数据库宕机。基于游标的迭代器,需要基于上一次的游标延续之前的迭代过程以0作为游标开始一次新的迭代,直到命令返回游标0完成一次遍历,不保证每次执行都返回某个给定数量的元素,支持模糊查询。原创 2023-05-16 16:39:14 · 985 阅读 · 0 评论 -
Redis单线程 Vs 多线程
一个服务端进行可以同时处理多个套接字描述符,实现IO多路复用的模型有3种,可以分select->poll->epoll三个阶段来描述。原创 2023-05-16 10:45:11 · 280 阅读 · 0 评论 -
Spring Boot 集成 Redis
SpringBoot 2.X 版本,Redis默认的连接池采用Lettuce,当Redis集群节点发生变化后,Letture默认是不会刷新节点拓扑。Jedis Client是Redis官网推荐的一个面向Java客户端,库文件实现了对各类API进行封装调用。RedisTemplate默认使用的是JdkSerializationRedisSerializer。键(key)和 值(value)都是通过Spring提供的Serializer序列化到数据库的。是一个Redis的java驱动包。原创 2023-05-12 15:35:50 · 699 阅读 · 0 评论 -
Redis集群(cluster)
由于数据量过大,单个Master复制集难以承担,因此需要对多个复制集进行集群,形成水平扩展每个复制集只负责存储整个数据集的一部分,这就是Redis的集群,其作用是提供在多个Redis节点间共享数据的程序集。Redis集群是一个提供在多个Redis节点间共享数据的程序集,Redis集群可以支持多个Master。Redis集群没有使用一致性hash,而是引入了哈希槽的概念。Redis集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽,集群的每个节点负责一部分hash槽。原创 2023-05-12 09:50:20 · 8204 阅读 · 0 评论 -
Redis哨兵(sentinel)
哨兵巡查监控后台master主机是否故障,如果故障了根据投票数自动将某一个从库转换为新主库,继续对外服务。监控redis的运行状态,包括master和slave。当master down机后,能自动将slave切换成新的master。原创 2023-05-10 15:08:09 · 214 阅读 · 0 评论 -
Redis复制(replica)
就是主从复制,master以写为主,Slave以读为主。当master数据变化的时候,自动将新的数据异步同步到其它slave数据库。原创 2023-05-08 17:44:57 · 170 阅读 · 0 评论 -
Redis发布订阅
Redis pub/sub 是一种消息通讯模式,发送者(PUBLISH)发送消息,订阅者(SUBSCRIBE)接收消息,可以实现进程间的消息传递。Redis可以实现消息中间件MQ的功能,通过发布订阅实现消息的引导和分流。Redis可以实现消息中间件MQ的功能,通过发布订阅实现消息的引导和分流。仅代表个人观点:不推荐使用该功能,专业的事情交给专业的中间件处理,Redis就做好分布式缓存功能。发布的消息在redis系统中不能持久化,因此,必须先执行订阅,再等待消息发布。原创 2023-05-08 15:18:07 · 260 阅读 · 0 评论 -
Redis管道
Pipline是为了解决PTT往返耗时,仅仅是将命令打包一次性发送,对整个Redis的执行不造成其他任何影响。批处理命令变种优化措施,类似Redis的原生批命令(mget和mset)。原创 2023-05-08 14:55:00 · 87 阅读 · 0 评论 -
Redis事务
开启:以MULTI开始一个事务。入队:将多个命令入队到事务中,接到这些命令并不会立即执行,而是放到等待执行的事务队列里面。执行:由EXEC命令触发事务。原创 2023-04-17 17:20:32 · 118 阅读 · 0 评论 -
Redis持久化技术
RDB(Redis数据库):RDB持久性以指定的时间间隔执行数据集的时间点快照。实现类似找记录效果的方式,就是把某一时刻的数据和状态以文件的形式写到磁盘上,也就是快照。这样一来即使故障宕机,快照文件也不会丢失,数据库的可靠性也就得到了保证。这个快照文件就称为RDB文件(dump.rdb),其中,RDB就是Redis DataBase的缩写。AOP是以以日志的形式来记录每个写操作。原创 2023-04-17 16:26:20 · 109 阅读 · 0 评论