Redis巩固加强

Redis究竟是什么

Redis是一个开源的高性能键值存储系统,也被称为数据结构服务器。它不仅仅是一个传统意义上的数据库,而是一个功能强大且多用途的存储系统。

虽然Redis可以像数据库那样存储和检索数据,但它与传统关系型数据库(如MySQL)有很多区别:

  1. 数据模型:Redis主要使用键值对来存储数据,其中键是唯一标识符,值可以是字符串、哈希、列表、集合、有序集合等不同的数据结构。这使得Redis更加灵活,可以以不同的方式组织和访问数据。

  2. 内存数据库:Redis将数据存储在内存中,这使得它能够提供非常快速的读写性能。与之相比,许多关系型数据库使用磁盘进行持久化存储。尽管Redis支持将数据持久化到磁盘上,但其主要优势在于内存存储。

  3. 单线程架构:Redis采用单线程的事件驱动模型,这使得它能够处理高并发请求。它通过异步I/O和非阻塞操作来实现高性能。

  4. 数据库功能的扩展:除了基本的存储和检索操作,Redis还提供了许多附加功能,如发布/订阅、事务、Lua脚本、过期键管理等。这些功能使得Redis不仅可以用于缓存和临时数据存储,还可以用作消息队列、计数器、实时排行榜等应用场景。

我们可以将Redis看作是一个多用途的、高效的数据结构服务器,广泛应用于缓存、会话存储、实时分析、消息传递等领域。

Redis为什么能够做到这么快

(1)完全基于内存操作

(2)数据结构简单,对数据操作也相对简单

(3)Redis执行命令是单线程的,避免了上下文切换所带来的性能开销,也不用考虑锁的问题

(4)采用了非阻塞的IO多路复用技术,使用单线程来处理并发的连接;内部采用的epoll+自己实现的事件分离器

其实Redis并不是完全多线程的,在核心的网络模型中采用多线程用于处理并发连接,但是数据的操作都是单线程的。

Redis坚持单线程是因为Redis的性能瓶颈是网络延迟而不是CPU,因此多线程不会带来明显的性能提升。

Redis持久化机制

(1)快照持久化RDB

Redis默认的持久化机制,通过父进程fork一个子进程,子进程将Redis的数据快照写入一个临时文件,等待持久化完毕之后替换上一次的rdb文件。整个过程主进程不进行任何的IO操作。持久化策略可以通过save配置单位时间内执行多少次操作触发持久化。所以RDB的优点是保证Redis性能最大化,恢复数据速度较快,缺点是可能丢失两次快照之间的数据

(2)追加持久化AOF

以日志的形式记录每一次的写入和删除操作,策略有每秒同步、每次操作同步、不同步,优点是数据完整性高,缺点是运行效率低、恢复时间长

Redis如何实现过期的key的删除

采用了定期过期+惰性过期

定期删除:Redis每隔一段时间从那些设置了过期时间的key的集合里面,随机抽取一些key,查看是否过期,如果过期就将其删除。

惰性删除:Redis在key被访问的时候检查key是否过期(先返回此次的结果,然后立即删除),如果过期则删除

Redis数据类型及应用场景

String:可以用来缓存JSON信息,可以用incr命令实现自增或自减的计数器。

Hash:与String一样可以保存json信息

List:可以用来做消息队列,list的pop是原子性操作能一定程度上保证线程安全

Set:可以实现去重,比如一个用户只能参加一次活动

ZSet:有序的,可以实现排行榜

相关推荐
运维行者_7 小时前
企业无线网络监控的挑战与智能化演进趋势
大数据·运维·服务器·网络·数据库
国强_dev7 小时前
技术探讨:使用 stunnel 加密转发数据库连接时,如何获取客户端真实 IP?
数据库·网络协议·tcp/ip
@insist1237 小时前
系统规划与管理师-信息系统规划核心工作要点解析
数据库·软考·系统规划与管理师·软件水平考试·系统规划与管理工程师
超级数据查看器8 小时前
超级数据查看器 v10.0 发布
java·大数据·数据库·sqlite·安卓
数安3000天8 小时前
增量数据如何自动分类分级,避免目录“过期“?
大数据·数据库
桌面运维家8 小时前
如何用半缓存云桌面将服务器硬盘容量扩展至本地终端?
运维·服务器·缓存
南墙上的石头9 小时前
麒麟 V10 重装人大金仓 V8R6 踩坑实录(含 MySQL 兼容模式)
数据库·mysql
画中有画10 小时前
论向量数据库在项目中的应用
数据库
spider_xcxc10 小时前
Redis 数据库高质量实践指南(一)
运维·数据库·redis·oracle·云计算
l1t11 小时前
在linux和windows中解决duckdb 1.6dev版本输出执行计划报错问题
linux·运维·数据库·windows·duckdb