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:有序的,可以实现排行榜

相关推荐
月空MoonSky17 分钟前
Oracle中TRUNC()函数详解
数据库·sql·oracle
momo小菜pa18 分钟前
【MySQL 06】表的增删查改
数据库·mysql
向上的车轮1 小时前
Django学习笔记二:数据库操作详解
数据库·django
编程老船长1 小时前
第26章 Java操作Mongodb实现数据持久化
数据库·后端·mongodb
全栈师2 小时前
SQL Server中关于个性化需求批量删除表的做法
数据库·oracle
Data 3172 小时前
Hive数仓操作(十七)
大数据·数据库·数据仓库·hive·hadoop
BergerLee3 小时前
对不经常变动的数据集合添加Redis缓存
数据库·redis·缓存
gorgor在码农3 小时前
Mysql 索引底层数据结构和算法
数据结构·数据库·mysql
Dylanioucn3 小时前
【分布式微服务云原生】掌握分布式缓存:Redis与Memcached的深入解析与实战指南
分布式·缓存·云原生
huapiaoy3 小时前
Redis中数据类型的使用(hash和list)
redis·算法·哈希算法