
Redis
Rick1024
吾辈事业,方兴未艾!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Redis面试专题
什么是Redis?简述它的优缺点? Redis与memcached相比有哪些优势? Redis支持哪几种数据类型? Redis主要消耗什么物理资源? Redis有哪几种数据淘汰策略? Redis官方为什么不提供Windows版本? 一个字符串类型的值能存储最大容量是多少? 为什么Redis需要把所有数据放到内存中? 为什么Redis需要把所有数据放到内存中? Redis集群方案应该怎么做?都有哪些...原创 2020-03-16 23:05:26 · 135 阅读 · 0 评论 -
面试积累-Redis-什么是缓存穿透?如何避免?什么是缓存雪崩?何如避免?
缓存穿透 一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就应该去后端系统查找(比如 DB)。一些恶意的请求会故意查询不存在的key,请求量很大,就会对后端系统造成很大的压力。这就叫 做缓存穿透。 如何避免? 1:对查询结果为空的情况也进行缓存,缓存时间设置短一点,或者该key对应的数据insert了之后清理 缓存。 2:对一定不存在的key进行过滤。可以把所有的可能存在的...原创 2020-03-16 23:04:20 · 783 阅读 · 0 评论 -
面试积累-Redis-使用过Redis做异步队列么,你是怎么用的?有什么缺点?
一般使用list结构作为队列,rpush生产消息,lpop消费消息。当lpop没有消息的时候,要适当sleep 一会再重试。 缺点: 在消费者下线的情况下,生产的消息会丢失,得使用专业的消息队列如rabbitmq等。 能不能生产一次消费多次呢? 使用pub/sub主题订阅者模式,可以实现1:N的消息队列。 ...原创 2020-03-16 23:03:37 · 1053 阅读 · 0 评论 -
面试积累-Redis-使用过Redis分布式锁么,它是怎么实现的?
先拿setnx来争抢锁,抢到之后,再用expire给锁加一个过期时间防止锁忘记了释放。 如果在setnx之后执行expire之前进程意外crash或者要重启维护了,那会怎么样? set指令有非常复杂的参数,这个应该是可以同时把setnx和expire合成一条指令来用的! ...原创 2020-03-16 23:02:51 · 1493 阅读 · 1 评论 -
面试积累-Redis-上述Redis分布式锁的缺点
其实上面那种方案最大的问题,就是如果你对某个 redis master 实例,写入了 myLock 这种锁 key 的 value,此时会异步复制给对应的 master slave 实例。但是这个过程中一旦发生 redis m aster 宕机,主备切换,redis slave 变为了 redis master。 接着就会导致,客户端 2 来尝试加锁的时候,在新的 redis master 上完成...原创 2020-03-16 23:01:51 · 3750 阅读 · 2 评论 -
面试积累-Redis-释放锁机制
如果执行 lock.unlock(),就可以释放分布式锁,此时的业务逻辑也是非常简单的。其实说白 了,就是每次都对 myLock 数据结构中的那个加锁次数减 1。如果发现加锁次数是 0 了,说明 这个客户端已经不再持有锁了,此时就会用:“del myLock”命令,从 redis 里删除这个 key。 然后呢,另外的客户端 2 就可以尝试完成加锁了。这就是所谓的分布式锁的开源 Redisson 框...原创 2020-03-16 23:01:04 · 829 阅读 · 0 评论 -
面试积累-Redis-可重入加锁机制
那如果客户端 1 都已经持有了这把锁了,结果可重入的加锁会怎么样呢?比如下面这种代码: 这时我们来分析一下上面那段 lua 脚本。第一个 if 判断肯定不成立,“exists myLock”会显示锁 key 已经存在了。第二个 if 判断会成立,因为 myLock 的 hash 数据结构中包含的那个 ID,就 是客户端 1 的那个 ID,也就是“8743c9c0-0795-4907-87fd-6c...原创 2020-03-16 23:00:21 · 448 阅读 · 1 评论 -
面试积累-Redis-watch dog 自动延期机制
客户端 1 加锁的锁 key 默认生存时间才 30 秒,如果超过了 30 秒,客户端 1 还想一直持有这把 锁,怎么办呢? 简单!只要客户端 1 一旦加锁成功,就会启动一个 watch dog 看门狗,他是一个后台线程,会 每隔 10 秒检查一下,如果客户端 1 还持有锁 key,那么就会不断的延长锁 key 的生存时间。 ...原创 2020-03-16 22:58:05 · 2891 阅读 · 4 评论 -
面试积累-Redis-锁互斥机制
那么在这个时候,如果客户端 2 来尝试加锁,执行了同样的一段 lua 脚本,会咋样呢?很简 单,第一个 if 判断会执行“exists myLock”,发现 myLock 这个锁 key 已经存在了。接着第二 个 if 判断,判断一下,myLock 锁 key 的 hash 数据结构中,是否包含客户端 2 的 ID,但是明 显不是的,因为那里包含的是客户端 1 的 ID。 所以,客户端 2 会获取...原创 2020-03-16 22:56:57 · 491 阅读 · 0 评论 -
面试积累-Redis-加锁机制
咱们来看上面那张图,现在某个客户端要加锁。如果该客户端面对的是一个 redis cluster 集 群,他首先会根据 hash 节点选择一台机器。这里注意,仅仅只是选择一台机器!这点很关 键!紧接着,就会发送一段 lua 脚本到 redis 上,那段 lua 脚本如下所示: 为啥要用 lua 脚本呢?因为一大坨复杂的业务逻辑,可以通过封装在 lua 脚本中发送给 redis, 保证这段复杂业务逻辑...原创 2020-03-16 22:54:05 · 400 阅读 · 0 评论 -
面试积累-Redis-Redis回收进程如何工作的?
一个客户端运行了新的命令,添加了新的数据。 Redi检查内存使用情况,如果大于maxmemory的限制, 则根据设定好的策略进行回收。 一个新的命令被执行,等等。 所以我们不断地穿越内存限制的边界,通过不断达到边界然后不断地回收回到边界以下。 如果一个命令的结果导致大量内存被使用(例如很大的集合的交集保存到一个新的键),不用多久内存限 制就会被这个内存使用量超越。 ...原创 2020-03-16 22:52:42 · 1492 阅读 · 0 评论 -
面试积累-Redis-Redis如何做内存优化?
尽可能使用散列表(hashes),散列表(是说散列表里面存储的数少)使用的内存非常小,所以你应该 尽可能的将你的数据模型抽象到一个散列表里面。 比如你的web系统中有一个用户对象,不要为这个用户的名称,姓氏,邮箱,密码设置单独的key,而是 应该把这个用户的所有信息存储到一张散列表里面。 ...原创 2020-03-16 22:51:23 · 584 阅读 · 1 评论 -
面试积累-Redis-Redis事务相关的命令有哪几个?
MULTI、EXEC、DISCARD、WATCH原创 2020-03-16 22:45:08 · 567 阅读 · 0 评论 -
面试积累-Redis-怎么理解Redis事务?
事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行,事务在执行的过程中,不会 被其他客户端发送来的命令请求所打断。 事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。 ...原创 2020-03-16 17:42:17 · 158 阅读 · 0 评论 -
面试积累-Redis-Redis中的管道有什么用?
一次请求/响应服务器能实现处理新的请求即使旧的请求还未被响应,这样就可以将多个命令发送到服务 器,而不用等待回复,最后在一个步骤中读取该答复。 这就是管道(pipelining),是一种几十年来广泛使用的技术。例如许多POP3协议已经实现支持这个功 能,大大加快了从服务器下载新邮件的过程。 ...原创 2020-03-16 17:40:55 · 468 阅读 · 0 评论 -
面试积累-Redis-Redis集群的主从复制模型是怎样的?
为了使在部分节点失败或者大部分节点无法通信的情况下集群仍然可用,所以集群使用了主从复制模型, 每个节点都会有N-1个复制品.原创 2020-03-16 16:47:38 · 1107 阅读 · 0 评论 -
面试积累-Redis-说说Redis哈希槽的概念?
Redis集群没有使用一致性hash,而是引入了哈希槽的概念,Redis集群有16384个哈希槽,每个key通 过CRC16校验后对16384取模来决定放置哪个槽,集群的每个节点负责一部分hash槽。 ...原创 2020-03-16 16:43:35 · 1363 阅读 · 0 评论 -
面试积累-Redis-Jedis与Redisson对比有什么优缺点?
Jedis是Redis的Java实现的客户端,其API提供了比较全面的Redis命令的支持; Redisson实现了分布式和可扩展的Java数据结构,和Jedis相比,功能较为简单,不支持字符串操作, 不支持排序、事务、管道、分区等Redis特性。Redisson的宗旨是促进使用者对Redis的关注分离,从 而让使用者能够将精力更集中地放在处理业务逻辑上。 ...原创 2020-03-16 16:40:04 · 972 阅读 · 0 评论 -
面试积累-Redis-Redis和Redisson有什么关系?
Redisson是一个高级的分布式协调Redis客服端,能帮助用户在分布式环境中轻松实现一些Java的对 象 (Bloom filter, BitSet, Set, SetMultimap, ScoredSortedSet, SortedSet, Map, ConcurrentMap, List, ListMultimap, Queue, BlockingQueue, Deque, Blockin...原创 2020-03-16 16:29:38 · 1214 阅读 · 0 评论 -
面试积累-Redis-Redis支持的Java客户端都有哪些?官方推荐用哪个?
Redisson、Jedis、lettuce等等,官方推荐使用Redisson。原创 2020-03-16 16:22:05 · 1943 阅读 · 0 评论 -
面试积累-Redis-Redis有哪些适合的场景?
(1)会话缓存(Session Cache) 最常用的一种使用Redis的情景是会话缓存(sessioncache),用Redis缓存会话比其他存储(如 Memcached)的优势在于:Redis提供持久化。当维护一个不是严格要求一致性的缓存时,如果用户的 购物车信息全部丢失,大部分人都会不高兴的,现在,他们还会这样吗? 幸运的是,随着 Redis 这些年的改进,很容易找到怎么恰当的使用Redi...原创 2020-03-16 16:17:23 · 460 阅读 · 0 评论 -
面试积累-Redis-MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据?
redis内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。 其实面试除了考察Redis,不少公司都很重视高并发高可用的技术,特别是一线互联网公司,分布式、 JVM、spring源码分析、微服务等知识点已是面试的必考题。我自己整理收集了一套系统的架构技术体 系,针对当前互联网公司的技术需求以及结合主流技术,这些东西可能你们平时在工作中接触过,但是缺 少的全面系统的学习,加入后端开发群:94...原创 2020-03-16 16:16:20 · 1003 阅读 · 0 评论 -
面试积累-Redis-Redis集群方案什么情况下会导致整个集群不可用?
有A,B,C三个节点的集群,在没有复制模型的情况下,如果节点B失败了,那么整个集群就会以为缺少 5501-11000这个范围的槽而不可用。原创 2020-03-16 16:15:47 · 1391 阅读 · 0 评论 -
面试积累-Redis-Redis集群方案应该怎么做?都有哪些方案?
codis 目前用的最多的集群方案,基本和twemproxy一致的效果,但它支持在节点数量改变情况下,旧节点 数据可恢复到新hash节点。 redis cluster3.0自带的集群,特点在于他的分布式算法不是一致性hash,而是hash槽的概念,以及自 身支持节点设置从节点。具体看官方文档介绍。 在业务代码层实现,起几个毫无关联的redis实例,在代码层,对key进行hash计算,然后去对应的...原创 2020-03-16 16:12:07 · 502 阅读 · 0 评论 -
面试积累-Redis-为什么Redis需要把所有数据放到内存中?
Redis为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘。 所以redis具有快速和数据持久化的特征,如果不将数据放在内存中,磁盘I/O速度为严重影响redis的 性能。 在内存越来越便宜的今天,redis将会越来越受欢迎, 如果设置了最大使用的内存,则数据已有记录数达 到内存限值后不能继续插入新值。 ...原创 2020-03-16 16:09:09 · 754 阅读 · 0 评论 -
面试积累-Redis-数据的值能存储最大容量是多少?
512M原创 2020-03-16 16:02:58 · 4482 阅读 · 0 评论 -
面试积累-Redis-Redis官方为什么不提供Windows版本?
因为目前Linux版本已经相当稳定,而且用户量很大,无需开发windows版本,反而会带来兼容性等问 题。原创 2020-03-16 15:57:26 · 2715 阅读 · 2 评论 -
面试积累-Redis-Redis有哪几种数据淘汰策略?
noeviction:返回错误当内存限制达到,并且客户端尝试执行会让更多内存被使用的命令。 allkeys-lru: 尝试回收最少使用的键(LRU),使得新添加的数据有空间存放。 volatile-lru: 尝试回收最少使用的键(LRU),但仅限于在过期集合的键,使得新添加的数据有空间存 放。 allkeys-random: 回收随机的键使得新添加的数据有空间存放。 volatile-rando...原创 2020-03-16 15:53:30 · 861 阅读 · 0 评论 -
面试积累-Redis-Redis主要消耗什么物理资源?
内存。原创 2020-03-16 15:51:38 · 3884 阅读 · 0 评论 -
面试积累-Redis-Redis支持哪几种数据类型?
String、List、Set、Sorted Set、hashes原创 2020-03-16 12:31:22 · 439 阅读 · 0 评论 -
面试积累-Redis-Redis与memcached相比有哪些优势?
memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型 redis的速度比memcached快很多redis的速度比memcached快很多 redis可以持久化其数据redis可以持久化其数据 ...原创 2020-03-16 12:21:47 · 359 阅读 · 0 评论 -
面试积累-Redis-什么是Redis?简述它的优缺点?
Redis的全称是:Remote Dictionary.Server,本质上是一个Key-Value类型的内存数据库,很像 memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘 上进行保存。 因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的 Key-Value DB。 Redis的出色之处不仅仅是性能...原创 2020-03-16 12:20:48 · 920 阅读 · 0 评论