![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据库-Redis
文章平均质量分 72
数据库-Redis
@Autowire
这个作者很懒,什么都没留下…
展开
-
redis深度历险 1 - Redis基础数据结构-001
Redis有5种基础数据结构,分别为: string (字符串)、list(列表)、set (集合)、hash (哈希)和zset (有序集合)。熟练掌握这5种基本数据结构的使用是Redis 知识最基础也最重要的部分,它也是在 Redis面试题中问到最多的内容。原创 2023-09-14 11:47:31 · 182 阅读 · 0 评论 -
redis深度历险 1 - Redis安装 && Redis基础数据结构-002
1概述官网:https://redis.io/中文网 :http://www.redis.cn/1.1redis是什么?Redis(Remote Dictionary Server) 远程服务字典,是一个开源的使用C语言编写、支持网络、可基于内存也可以持久化的日志型、key-value数据库,并提供多种语言的API。免费和开源!是当下最热门的nosql技术。redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。1.2re原创 2021-02-02 11:16:40 · 615 阅读 · 0 评论 -
redis深度历险 2 - Redis的基本数据类型以及使用场景
Redis的基本数据类型包括五种:String(字符串)、Hash(哈希)、List(列表)、Set(集合)及ZSet(有序集合)。原创 2023-09-14 16:14:00 · 318 阅读 · 0 评论 -
redis深度历险 3 Jedis、springboot整合
1Jedis我们要用java来操作Redis1.1导入Jedis的包 <!-- https://mvnrepository.com/artifact/redis.clients/jedis --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId>原创 2021-02-20 18:04:16 · 349 阅读 · 0 评论 -
redis深度历险 千帆竞发 —— 分布式锁
分布式应用进行逻辑处理时经常会遇到并发问题。比如一个操作要修改用户的状态,修改状态需要先读出用户的状态,在内存里进行修改,改完了再存回去。如果这样的操作同时进行了,就会出现并发问题,因为读取和保存状态这两个操作不是原子的。(Wiki 解释:所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch 线程切换。这个时候就要使用到分布式锁来限制程序的并发执行。原创 2023-09-14 18:58:25 · 289 阅读 · 0 评论 -
请你谈谈对布隆过滤器的理解?
布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询效率都远远超过一般的算法,缺点是有一定的误识别率和删除困难。布隆过滤器的原理是:当一个元素被加入集合时,通过K个散列函数将这个元素映射成一个位数组中的K个点,把它们置为1。检索时,我们只要看看这些点是不是都是1就(大约)知道集合中有没有它了:如果这些点有任何一个0,则被检元素一定不在;如果都是1,则被检元素很可能在。这就是布隆过滤器的基本思想。bloom filter之所以能做到在时间和空间上的效率比较高,是因为牺牲了判断的准确率原创 2021-07-30 17:51:47 · 322 阅读 · 0 评论 -
请你谈谈Redisson分布式锁的理解?
/** * @email 930312043@qq.com * @author: zhaoshuai * @date: 2021/7/30 8:13 */@RestControllerpublic class IndexController { @Autowired private Redisson redisson; @Autowired private StringRedisTemplate stringRedisTemplate; @RequestM原创 2021-07-30 10:27:36 · 133 阅读 · 0 评论 -
请你谈谈Redis数据不一致问题?
1为什么会出现不一致?主从同步有延时,延时期间读从库,可能读到不一致的数据。1)服务发起了一个写请求;2)服务又发起了一个读请求,此时同步未完成,读到一个不一致的脏数据;3)数据库主从同步最后才完成。2如何避免这种主从延时导致的不一致?方案一:忽略任何脱离业务的架构设计都是耍流氓,绝大部分业务,例如:百度搜索,淘宝订单,QQ消息,58帖子都允许短时间不一致。画外音:如果业务能接受,最推崇此法。如果业务能够接受,别把系统架构搞得太复杂。方案二:强制读主1)使用一个高可用主库提供数据库服务原创 2021-04-19 17:06:27 · 1036 阅读 · 1 评论 -
请你谈谈Redis的过期策略?
1 Redis的过期策略都有哪些?1 设置过期时间我们set key的时候,都可以给一个expire time,指定这个key只能存活1个小时?10分钟?这个很有用,我们自己可以指定缓存到期就失效。Redis是怎么对这批key进行删除的?答案是:定期删除+惰性删除。策略解释定期删除redis默认是每隔100ms就随机抽取一些设置了过期时间的key,检查其是否过期,如果过期就删除惰性删除在你获取某个key的时候,redis会检查一下 ,这个key如果设置了过期时间那么是否过转载 2021-04-19 08:29:00 · 77 阅读 · 0 评论 -
请你谈谈Redis为什么最开始被设计成单线程的?
1Redis为什么最开始被设计成单线程的?Redis作为一个成熟的分布式缓存框架,它由很多个模块组成,如网络请求模块、索引模块、存储模块、高可用集群支撑模块、数据操作模块等。很多人说Redis是单线程的,就认为Redis中所有模块的操作都是单线程的,其实这是不对的。Redis中只有网络请求模块和数据操作模块是单线程的。而其他的如持久化存储模块、集群支撑模块等是多线程的。单线程指的是网络请求模块使用了一个线程(所以不需考虑并发安全性),即一个线程处理所有网络请求,其他模块仍用了多个线程。那么,为什么网络转载 2021-04-16 11:31:39 · 154 阅读 · 0 评论 -
请你谈谈Redis事务的理解?
Redis事务本质:一组命令的集合,一个事务中的所有命令都会被序列化,在事务执行过程中,会按照顺序执行 。事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行——Redis没有原子性,Redis单条命令保证原子性,但是事务不保证原子性。Redis事务没有隔离级别的概念。所有的命令在事务中,并没有被直接被执行,只有发起执行命令的时候才会被执行——Exec。Redis事务的三个阶段:1开启事务(multi) 2命令入队(……) 3执行事务(exec);0Redis事务相关命令Redis事原创 2021-04-16 11:03:08 · 318 阅读 · 0 评论 -
请你谈谈Redis的哨兵模式的理解?
1 哨兵模式1概述主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可荐的方式,更多时候,我们优先考虑哨兵模式。Redis从2.8开始正式提供了Sentinel(哨兵) 架构来解决这个问题。谋朝篡位的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库。哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应转载 2021-04-16 10:16:45 · 158 阅读 · 0 评论 -
请你谈谈Redis的基本数据类型以及使用场景?
1Redis的基本数据类型?字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets)2Redis各种基本数据类型的使用场景?1String存储内容:通常使用字符串,如果字符串以整数的形式展示,可以作为数字操作使用(但是仍是字符串)常用的命令:添加数据、修改数据 set key value 获取数据get key 删除数据 del key mset mget应用场景1:String类型作为数值时的增减;大型企业级应用中,分表操原创 2021-04-16 09:24:21 · 105 阅读 · 0 评论 -
请你谈谈Redis缓存数据满时,如何处理?
1、加内存:这是最简单粗暴的办法, 不过成本相对较高2、内存淘汰策略策略特点noeviction当内存不足以容纳新写入的数据时, 新写入操作会报错allkeys-lru当内存不足以容纳新写入数据时, 在键空间中, 移除最近最少使用的keyallkeys-random当内存不足以容纳新写入数据时, 在键空间中, 随机移除某个keyvolatile-ttl当内存不足以容纳新写入数据时, 在设置了过期时间的键空间中, 有更早过期时间的key优先移除3、集群搭原创 2021-04-15 14:19:20 · 286 阅读 · 1 评论 -
请你谈谈Redis的底层数据结构?
1[54. 螺旋矩阵]class Solution { public List<Integer> spiralOrder(int[][] matrix) { List<Integer> res = new ArrayList<>(); if(matrix == null || matrix.length == 0 || matrix[0] == null || matrix[0].length == 0) ret原创 2021-03-20 15:04:39 · 194 阅读 · 1 评论 -
请你谈谈redis中的hash扩容渐进式rehash过程?
1redis中的hash扩容渐进式rehash过程背景: redis字典(hash表)当数据越来越多的时候,就会发生扩容,也就是rehash对比:java中的hashmap,当数据数量达到阈值的时候(0.75),就会发生rehash,hash表长度变为原来的二倍,将原hash表数据全部重新计算hash地址,重新分配位置,达到rehash目的。redis中的hash表采用的是渐进式hash的方式1、redis字典(hash表)底层有两个数组,还有一个rehashidx用来控制rehash2、初始默原创 2021-03-16 07:56:15 · 1142 阅读 · 0 评论 -
请你谈谈Redis持久化?
1Redis持久化面试和工作,持久化都是重点! Redis 是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中的数据库状态也会消失。所以 Redis 提供了持久化功能!1RDB(Redis DataBase)在指定的时间间隔内将内存中的数据集体快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里。Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久原创 2021-02-20 19:48:02 · 157 阅读 · 0 评论 -
请你谈谈Redis缓存穿透和雪崩?
1Redis缓存穿透和雪崩服务的高可用问题!在这里我们不会详细的区分析解决方案的底层!Redis缓存的使用,极大的提升了应用程序的性能和效率,特别是数据查询方面。但同时,它也带来了一 些问题。其中,最要害的问题,就是数据的一致性问题,从严格意义上讲,这个问题无解。如果对数据 的一致性要求很高,那么就不能使用缓存。另外的一些典型问题就是,缓存穿透、缓存雪崩和缓存击穿。目前,业界也都有比较流行的解决方案。1 缓存穿透(查不到)缓存穿透的概念很简单,用户想要查询一个数据,发现redis内存数据库没有原创 2021-02-21 09:46:44 · 151 阅读 · 0 评论 -
请你谈谈Redis发布订阅的理解?
1Redis发布订阅Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。微信、 微博、关注系统!Redis 客户端可以订阅任意数量的频道。订阅/发布消息图命令这些命令被广泛用于构建即时通信应用,比如网络聊天室(chatroom)和实时广播、实时提醒等。测试订阅端127.0.0.1:6379> SUBSCRIBE kuangshenshuo # 订阅一个频道 kuangshenshuo Reading messages转载 2021-02-21 07:19:07 · 125 阅读 · 0 评论 -
请你谈谈Redis主从复制的理解?
1Redis主从复制概念 主从复制:指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master/Leader),后者称为从节点(Slave/Follower), 数据的复制是单向的!只能由主节点复制到从节点(主节点以写为主、从节点以读为主)。默认情况下,每台Redis服务器都是主节点一个主节点可以有0个或者多个从节点,但每个从节点只能由一个主节点。主从复制的作用主要包括:数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余的方式。故障恢复:当主节点原创 2021-02-21 08:32:12 · 2543 阅读 · 1 评论 -
Redis(3)——Redis.conf详解
1Redis.conf详解启动的时候,就通过配置文件来启动! 工作中,一些小小的配置,可以让你脱颖而出! 行家有没有,出手就知道1单位配置文件 unit单位 对大小写不敏感!就是好比我们学习Spring、Improt, include2网络bind 127.0.0.1 # 绑定的ipprotected-mode yes # 保护模式port 6379 # 端口设置3通用 GENERALdaemonize yes # 以守护进程的方式运行,默认是 no,我们需要自己开启为yes!p原创 2021-02-20 18:52:25 · 89 阅读 · 2 评论