首页 > 数据库 >关于Redis

关于Redis

时间:2024-09-22 10:49:50浏览次数:3  
标签:缓存 删除 过期 Redis 关于 数据 内存

1.列举一些项目中redis的使用场景,这些场景用到了什么类型

缓存 将经常访问的数据存储到redis中;String或Hash,用于存储键值对。

会话存储 用户的登录状态、购物车;存储会话数据。

消息队列 实现异步处理,比如发送邮件或处理日志;List

分布式锁 在分布式系统中实现互斥访问共享资源;String或bitmap,setnx命令来实现

限流 限制用户的的请求频率,防止系统被滥用;zset或List

缓存一致性 在缓存失效时,避免缓存穿透和缓存雪崩;String或bitmap,结合Expire命名设置过期时间,使用bitfield实现原子性的计数

2.redis中有哪些数据类型

String、List、Hash、Set、Zset、HyperLogLog、bitmap、

3.Redis的哪些命令可以实现分布式锁机制

SET 命令 使用带有 NX 和 EX 选项的 SET 命令可以实现一个简单的分布式锁:

NX: Only set the key if it does not already exist.

EX: Set an expire time on the key

Lua 脚本在 Redis 服务器端执行,可以确保一系列操作的原子性。

首先检查锁是否存在,如果不存在,则设置锁并设置过期时间;如果锁已存在,则返回 false。

Redlock 是一种分布式锁算法,它通过多个 Redis 实例来实现锁的获取和释放,从而提供更高的可用性和一致性。Redlock 算法不是通过单一的 Redis 命令实现的,而是需要客户端实现一定的逻辑。

锁的超时时间:为了避免死锁,锁应当设置一个合理的超时时间。

锁的唯一性:每次请求锁时,应该使用一个唯一的值作为锁的值,以防止锁的混淆。

锁的重试机制:如果获取锁失败,应该有一个合理的重试机制。

锁的释放:确保在不再需要锁时能够正确释放锁。

4.RedLock红锁的实现原理

是一种分布式锁算法,它通过多个 Redis 实例来实现锁的获取和释放,从而提供更高的可用性和一致性。Redlock 算法不是通过单一的 Redis 命令实现的,而是需要客户端实现一定的逻辑。

锁的超时时间:为了避免死锁,锁应当设置一个合理的超时时间。

锁的唯一性:每次请求锁时,应该使用一个唯一的值作为锁的值,以防止锁的混淆。

锁的重试机制:如果获取锁失败,应该有一个合理的重试机制。

锁的释放:确保在不再需要锁时能够正确释放锁。

5.你们在项目中如何保证数据库和redis缓存的一致性

延时双删:先删除缓存,为了避免更新数据库的时候,其他线程从缓存中读取不到数据,就在更新完数据库之后,再Sleep 一段时间,然后再次删除缓存

消息队列:先更新数据库,成功后往消息队列发消息,消费到消息后再删除缓存,借助消息队列的重试机制来实现,达到最终一致性的效果。

6.Redis除了常被用作应用程序的‌缓存层‌以提高数据访问速度外,‌还包括以下几个方面:‌

  • ‌数据库‌:‌Redis可以用作轻量级的数据库,‌实现会话管理、‌用户信息存储、‌排行榜、‌计数器等功能。‌
  • ‌消息代理‌:‌Redis提供了发布/订阅模式以及List数据结构,‌可以实现消息的发布和订阅功能,‌用作消息队列、‌实时通知等。‌
  • ‌分布式锁‌:‌Redis的setnx命令可以实现分布式锁的功能,‌确保在分布式系统中对共享资源的访问是安全的。‌
  • ‌实时系统‌:‌Redis的快速读写性能使其成为实时系统的理想选择,‌如实时分析、‌在线游戏、‌实时推荐等场景。‌
  • ‌限流‌:‌Redis可以通过Lua脚本结合其数据结构实现限流功能,‌防止系统在高并发场景下因流量过大而崩溃。‌‌

7、Redis 是一个开源的内存数据存储系统,因其高性能和快速响应而被广泛使用。其速度快的原因主要包括以下几个方面:

1. 内存存储

Redis 将数据存储在内存中,而不是传统的磁盘存储。内存访问速度比磁盘快得多,减少了数据的读写延迟。虽然 Redis 也可以将数据持久化到磁盘,但其主要的读写操作都是在内存中完成的。

2. 单线程模型

Redis 使用单线程事件循环模型处理所有请求。单线程模型的优点包括:

  • 避免了上下文切换:多线程模型中线程上下文切换会带来额外的开销。Redis 的单线程模型通过避免这种切换来减少延迟。
  • 简化了并发编程:单线程避免了多线程编程中的复杂性,如竞态条件和锁问题,从而减少了调试和性能调优的难度。

3. 高效的数据结构

Redis 提供了多种高效的数据结构,如字符串、列表、集合、有序集合和哈希等。每种数据结构都有经过优化的操作方法,使得常见的数据操作(如插入、删除、查找)可以在常量时间(O(1))或对数时间(O(log n))内完成。

4. 事件驱动和非阻塞I/O

Redis 使用了事件驱动的非阻塞 I/O 模型,通过 epoll(在 Linux 上)或 kqueue(在 BSD 系统上)等机制,能够处理大量并发连接而不会阻塞。这种方式允许 Redis 在高并发环境中高效地处理大量请求。

8.redis是单线程的,为什么还那么快

避免了上下文切换

高效的数据结构

内存访问速度比磁盘快得多

事件驱动和非阻塞I/O

9.Redis底层使用的高效的数据结构有哪些

字符串、列表、集合、有序集合和哈希

10.redis的数据持久化方式有哪些?持久化文件中存储的是什么样的数据?

RDB,存储的所有键值对数据,比如字符串、列表、集合、有序集合和哈希等

AOF,存储的Redis执行过的所有写入命令,如set,hset,Lpush等

RDB 更适合需要快速恢复数据的场景,而 AOF 更适合需要更高数据完整性的场景

11.什么是缓存穿透、缓存击穿、缓存雪崩?如何解决

缓存穿透:查询一个不存在的数据,由于缓存中没有该数据,导致每次请求都会去数据库查询,数据库压力增大;

解决方案:采用布隆过滤器进行判断数据是否存在

缓存击穿:本来缓存中有对应的数据,但是缓存的数据 因为到期,需要去数据库中再次查询数据;

解决方案:可以使用分布式锁(如 Redis 的 SETNX 命令)来保证只有一个线程去加载数据并更新缓存,其他线程等待数据加载完成后再从缓存中读取。

或缓存预热:在系统启动时或数据更新时,预先加载一些热点数据到缓存中,避免缓存刚启动时突然出现大量数据库请求。

缓存雪崩:当大量缓存数据同时过期或被删除时,大量请求会直接访问数据库,导致数据库压力骤增;

解决方案:对缓存数据设置随机的过期时间,避免所有缓存数据同时过期

12.Redis的key过期处理策略

①惰性删除:当一个键过期后,Redis 并不立即删除它,而是等到真正访问该键时才进行删除。

②定期删除:为了防止惰性删除导致大量过期键积累,Redis 还会在后台定期检查并删除过期的键。

13.Redis的内存淘汰策略

noeviction(不淘汰)

这是默认的内存淘汰策略。如果 Redis 达到了最大内存限制,它不会自动删除任何键,而是直接返回客户端一个错误(OOM command),拒绝执行会导致内存增长的操作。

allkeys-lru(所有键的 LRU 淘汰)

根据最近最少使用(Least Recently Used, LRU)原则来删除键,直到内存释放到最大内存限制之下

allkeys-random(随机删除所有键)

Redis 会随机删除键,直到内存释放到最大内存限制之下。

volatile-lru(易失键的 LRU 淘汰)

只会删除设置了过期时间(TTL)的键,并根据 LRU 原则来删除

volatile-random(随机删除易失键)

会随机删除设置了过期时间的键,直到内存释放到最大内存限制之下。

volatile-ttl(删除 TTL 最短的易失键)

会删除设置了过期时间的键,并优先删除 TTL(Time To Live)最短的键。

14.Redis的集群策略

数据分片(Data Sharding)

Redis 集群通过哈希槽(Hash Slot)来实现数据分片。集群中的数据被分割成 16384 个哈希槽,每个键都会被映射到一个哈希槽上,进而分配到一个节点上。

复制(Replication)

Redis 集群支持主从复制(Master-Slave Replication),每个主节点可以有一个或多个从节点。从节点用于读取操作,可以提高读取性能和可用性。

故障检测与自动故障转移(Fault Detection and Automatic Failover)

Redis 集群内置了故障检测机制,可以自动检测节点的故障,并进行故障转移

客户端分区感知(Client Partition Awareness)

客户端需要知道集群的拓扑结构,以便能够正确地将请求发送到相应的节点。

数据一致性(Data Consistency)

尽管 Redis 集群通过数据分片和复制来提高可用性和扩展性,但由于数据分布在多个节点上,因此需要解决数据一致性问题。

方案:读取一致性,写入一致性,分区容忍性

配置与管理

Redis 集群的配置和管理涉及到多个方面,包括节点配置、分片策略、复制配置等

标签:缓存,删除,过期,Redis,关于,数据,内存
From: https://blog.csdn.net/m0_53369973/article/details/142371337

相关文章

  • Redis典型应用 - 缓存
    1.什么是缓存?简单来说,核心思路就是把一些常用的数据放到触手可及(访问速度更快)的地方,方便随时读取。对于计算机硬件来说,往往访问速度越快的设备,成本越高,存储空间越小。缓存是更快,但是空间上往往是不足的。因此大部分的时候,缓存只放一些热点数据(访问频繁的数据),就非常有用了。......
  • Redis:内存数据结构存储终极指南
    redis是不断发展的数据管理和存储领域中广泛使用的技术。redis被公认为内存中数据结构存储,它提供了广泛的功能,使其成为从缓存到实时分析等各种应用程序的标准基础。这个综合教程将介绍redis是什么、它的核心功能、用例以及如何开始。什么是redis?redis代表远程字典服务......
  • Redis基础
    Redis基础一、认识RedisNoSQL(NotOnlySQL):意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型的数据库。Redis(RemoteDictionaryService):远程词典服务器,基于内存的键值型NoSQL数据库。特征:键值(Key-value)型,value支持多种不同数据结构,功能丰富单线程,每个命令具备原子......
  • 二,MyBatis -Plus 关于映射 Java Bean 对象的注意事项和细节(详细说明)
    二,MyBatis-Plus关于映射JavaBean对象的注意事项和细节(详细说明)文章目录二,MyBatis-Plus关于映射JavaBean对象的注意事项和细节(详细说明)1.映射2.表的映射3.字段映射4.字段失效5.视图属性6.总结:7.最后:1.映射这里的映射:是指将从数据库查询到的信......
  • Redis——redispluspls库list及set类型相关接口使用
    文章目录list类型相关接口lpush和lrangerpushlpop和rpopblpop和brpopllenset类型相关接口sadd和smemberssismemberscardspopsinstersinterstorelist类型相关接口lpush和lrangevoidlrange_lpush(sw::redis::Redis&redis){std::cout<<"lpush和lrange"<......
  • [Redis]过期操作与过期策略
    如果在Redis中没有过期这个概念,这就意味着我们所有写入的键只要不主动删除就会一直保存在Redis中,而Redis又是一个基于内存的数据库,内存空间是非常有限的。过期操作过期设置Redis中设置过期时间主要通过以下四种方式:expirekeyseconds:设置key在n秒后过期。pexpire......
  • Redis基础
    Redis基础一、认识RedisNoSQL(NotOnlySQL):意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型的数据库。Redis(RemoteDictionaryService):远程词典服务器,基于内存的键值型NoSQL数据库。特征:键值(Key-value)型,value支持多种不同数据结构,功能丰富单线程,每个命令具备原子......
  • Redis面试题-如何保持缓存一致性
    1、延迟双删延迟双删策略是一种用于解决缓存与数据库之间数据一致性问题的方法。其基本思想是在更新数据库时,通过两次删除缓存的操作来尽可能地保证数据的一致性。具体步骤包括:首先,在更新数据库之前删除缓存;然后,执行数据库更新操作;最后,在延迟一段时间后再次删除缓存。优点:减......
  • 关于IT行业
    关于IT行业的一些浅见在当今的互联网时代,IT行业无疑是一个高速发展的领域。无论是人工智能、大数据、云计算,还是区块链、物联网,这些新兴技术的背后都离不开IT行业的推动力。今天我想简单谈一下自己对IT行业的一些看法和理解。1.IT行业的快速发展随着科技的进步,IT行业几......
  • 我整理了一些关于【软考备考】的学习资料和大家一起分享、学习一下
    最新版本电子书-----信息系统项目管理师教程-第四版(电子版),刚改的教材与老版的差异很大,一定用最新电子书。链接:https://pan.baidu.com/s/1ZSOwPKrwBM-6wl4mRpQWgQ?pwd=j6n7 提取码:j6n7软考资料电子书是许多软件行业从业者备考软考时必不可少的学习资源。随着网络技术的快速......