![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
redis
文章平均质量分 86
做时间的朋友。
注重知识的积累,以量变实现质变
展开
-
redis字典
本篇文章假设读者知道HashMap的实现原理。包括HashMap的底层数据结构:数组+链表HashMap如何解决哈希冲突。往HashMap放入一个键值对的时候,如何确定这个键在数组中的位置为什么HashMap要求数组的长度为2的幂次方?HashMap如何进行rehash如果对于上面几点你都清楚的话,那么Redis的字典结构就会很好理解。Redis字典Redis中的字典其实跟Java中的HashMap实现都差不多,如果你研究过HashMap的底层实现原理,那么你将会很容易理解Redis.原创 2021-04-05 20:30:56 · 406 阅读 · 0 评论 -
redis底层数据结构SDS
面试中我们经常会被问到redis有哪些数据类型,大部分人包括我自己可能只回答了最核心的五种数据结构:String,List,set,zset,hash。或许你还会加上HyperLogLog,bitMap,GeoHash,BloomFilter。但这可能还不是面试官想要的回答。面试官可能想要你回答的是Redis的底层数据结构。比如:String在Redis底层是怎么存储的?这些数据类型在Redis中是怎么存放的?Redis快的原因就只有单线程和基于内存么?这篇文章就来介绍一下Redis的底层数据结构.原创 2021-03-31 20:02:42 · 203 阅读 · 0 评论 -
redis开发规范
在开发中一定要遵守开发规范,那都是前辈总结的经验,可以帮助我们提前避免很多问题一、键值设计1. key名设计(1)【建议】: 可读性和可管理性以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如业务名:表名:idugc:video:1(2)【建议】:简洁性保证语义的前提下,控制key的长度,节省内存,当key较多时,内存占用也不容忽视,例如:user:{uid}:friends:messages:{mid}简化为u:{uid}:fr:m:{mid}。(3)【强制】:不要.原创 2021-03-30 10:50:24 · 189 阅读 · 0 评论 -
删除bigkey的正确姿势(使用jedis和redisTemplate实现)
对于bigkey来说,我们不能直接使用del删除,避免删除时间过长,导致阻塞其他客户端命令,正确的姿势应该是采用hsan、sscan、zscan渐进式删除,同时我们还要防止bigkey过期时间自动删除的问题(如一个200万的zset设置1小时过期,会触发del操作,造成阻塞,且该操作不会出现在慢查询中)基于Jedis客户端实现渐进式删除1、 Hash删除: hscan + hdelpublic static void delBigHash(String host , int port , Stri.原创 2021-03-29 10:34:43 · 840 阅读 · 0 评论 -
Redis缓存雪崩、缓存穿透、缓存击穿以及缓存一致性问题
今天我们来聊一聊Redis缓存雪崩、缓存穿透、缓存击穿以及缓存与数据库双写不一致问题,这应该是Redis比较常问的面试题,也是一个比较重要的知识点。缓存雪崩缓存雪崩指的是在某一个时间段,有大量的缓存同时失效,导致大量的请求同时访问了Mysql,导致Mysql不堪重负,最后挂了,Mysql挂了就会使整个服务瘫痪。导致大量缓存同时失效的情况有:redis服务器挂了缓存设置的过期时间相同,导致大量缓存同时过期知道了原因后,解决方法也就比较简单了:通过redis集群或哨兵实现redis的高可用。原创 2021-03-27 17:05:17 · 181 阅读 · 0 评论 -
布隆过滤器、自己实现布隆过滤器、Redisson实现布隆过滤器
基本概念布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。(摘自百度百科)布隆过滤器原理看完基本概念,你可能还有点懵,没关系,等看完布隆过滤器的原理后,你就能清楚它是一个什么东西了。我们先来看一个需求:假设给你一个10亿的黑名单email,如何来进行黑名单过滤?我们可以想到下面的几种方式拿到一个em原创 2021-03-27 17:03:55 · 714 阅读 · 2 评论 -
Redis集群水平扩展、集群中添加以及删除节点
是原创 2021-03-24 13:21:11 · 191 阅读 · 2 评论 -
redis集群的搭建、整合springboot以及其原理
在上一篇博客中,我们聊了主从和哨兵架构,在主从架构中,实际上只有一个master节点能对外提供写服务,且存在单点故障,不满足高可用,后来我们在主从架构的基础上,增加了哨兵,使得在master节点出现故障的时候,可以由哨兵自动选举出一个新的master,但是在主从切换的这段时间,redis是不能够向外提供服务的,此外哨兵模式只有一个主节点对外提供服务,没法支持很高的并发,单个节点的内存也不宜设置过大,否则会导致持久化文件过大,影响数据恢复或主从同步的效率。所以,今天我们将介绍redis集群。Redis集群原创 2021-03-23 11:36:28 · 435 阅读 · 3 评论 -
redis主从架构以及哨兵高可用架构
单节点的redis肯定不可靠,一旦出现单点故障就GG了,今天就介绍一下Redis主从架构以及哨兵结构。虽然实际开发中,用得更多的是集群架构,但他们是集群架构的基础,所以还是有必要了解一下。Redis主从架构什么是主从结构主从架构指的是一个master下可以有多个slave节点(master和slave都是一个redis实例)。slave更多的是对外提供读服务以及作为master的冗余备份。master和slave的职责:读操作: master和slave都可以执行写操作: 只能由master执原创 2021-03-21 16:17:36 · 160 阅读 · 0 评论 -
搭建redis哨兵集群时,哨兵无法感知到其他哨兵
我在搭建redis哨兵集群的时候,当我手动kill掉master,发现不能自动主从切换,后面就到哨兵节点中查看信息:~ redis-cli -p 26379127.0.0.1:26379> info Sentinel# Sentinelsentinel_masters:1sentinel_tilt:0sentinel_running_scripts:0sentinel_scripts_queue_length:0sentinel_simulate_failure_flags:0mas原创 2021-03-21 15:28:09 · 2213 阅读 · 4 评论 -
redis持久化
redis持久化我们知道redis是一个基于内存的高性能数据库,他的数据都是存储在内存中的,一旦redis宕机或者重启后,数据将全部丢失,这样肯定是不行的,所以redis一定有自己的持久化机制。RDB快照RDB快照指的是将当前时刻的内存数据快照保存在一个名为dump.rdb的二进制文件中,就跟拍照一样,他只能记录按下快门这一刻的数据。通过查看redis.conf配置文件可以查看redis的默认配置# save <seconds> <changes>save 900 1s原创 2021-03-17 09:50:53 · 112 阅读 · 0 评论 -
redis keys和scan命令的区别
redis keys和scan的区别redis的keys命令,通常在用来删除相关key时使用,但这个命令有一个弊端,在redis拥有数百万及以上的keys时,执行速度会比较慢,更致命的是,这个命令会阻塞redis多路复用的io主线程,如果这个线程阻塞,在此期间,其他发向redis服务端的命令,都会被阻塞,从而引发一系列级联反应,导致瞬间相应卡顿,从而引发超时等问题,所以应该在生产环境禁止用使用keys和类似的命令smembers,这种时间复杂度为O(N),且会阻塞主线程的命令,是非常危险的。如果在生产环原创 2021-03-15 11:01:22 · 664 阅读 · 0 评论