从键值数据库到Redis

从键值数据库到Redis

一、键值数据库

键值数据库(Key-Value Database,简称KV数据库)是NoSQL(非关系型)数据库的重要分支。

以"键(Key)-值(Value)"对为核心存储单元,凭借简单的结构、极高的读写性能,成为高并发场景下的基础存储方案。

而Redis(Remote Dictionary Server)作为键值数据库的"集大成者",并非简单的KV存储,而是在传统键值数据库的基础上,优化了访问、索引、操作、存储四大核心模块,实现了从"单一存储"到"多功能数据处理平台"的跨越。

二、访问框架

访问框架是应用程序与数据库交互的"桥梁",核心作用是接收请求、解析指令、返回结果。

与SimpleKV采用动态库 访问不同,Redis主要通过网络框架 进行访问,这使其能够作为基础性的网络服务被广泛访问,极大地扩大了应用范围.

标准化通信协议:采用自定义的RESP(Redis Serialization Protocol)协议,兼具简单性与通用性,支持文本和二进制两种编码方式,既能快速解析基础指令,也能适配复杂命令的传输;

三、索引模块

索引是数据库快速定位数据的核心,键值数据库的索引本质是"键到值的映射"。

Redis以"哈希表索引 "为基础,针对传统键值索引的局限,进行了两大核心升级:优化哈希索引性能、引入多数据结构索引,实现了"键索引+值结构索引"的双重保障。

  • 优化哈希索引性能 :Redis采用"渐进式哈希 "机制,解决了传统哈希表扩容时的性能瓶颈。当哈希表需要扩容时,Redis不会一次性完成所有键的重新哈希,而是分多次、逐步将旧哈希表的键迁移到新哈希表中,在此过程中,读写操作可正常进行,不会出现卡顿;同时,Redis还优化了哈希冲突的处理方式,通过更高效的链表+跳表组合,减少冲突带来的查询损耗。
  • 引入多数据结构索引 :Redis Value支持字符串(String)、列表(List)、哈希(Hash)、集合(Set)、有序集合(Sorted Set)等多种数据结构,且为每种数据结构设计了专属的索引机制 ,实现了"键索引+结构内索引"的双重索引能力

四、操作模块

Redis,针对每种数据结构,Redis都提供了专属的操作指令,实现对数据的精细化控制:

  • 字符串:支持append(追加内容)、incr/decr(自增自减)、getset(设置并返回旧值)、bitop(位运算)等操作,可对字符串进行部分修改和数值运算;

  • 列表:支持lpush/rpush(头部/尾部插入)、lpop/rpop(头部/尾部删除)、lrange(范围查询)、ltrim(修剪列表)等操作,实现列表的灵活管理;

  • 哈希:支持hset/hget(设置/获取字段值)、hmset/hmget(批量设置/获取字段)、hdel(删除字段)、hkeys/hvals(获取所有字段/值)等操作,可单独操作哈希中的某个字段;

  • 集合:支持sadd/srem(添加/删除元素)、smembers(获取所有元素)、sinter/sunion(交集/并集)、sismember(判断元素是否存在)等操作,实现集合的去重与关联操作;

  • 有序集合:支持zadd(添加元素并设置分数)、zrange/zrevrange(按分数范围查询)、zincrby(分数自增)、zrank(获取元素排名)等操作,实现按分数排序和范围筛选。

五、存储模块

Redis的存储模块核心是"内存优先 ",将所有数据存储在内存中,实现毫秒级读写。同时通过两种持久化机制保障数据安全。

  • RDB (Redis Database):即快照模式 ,定时将内存中的数据快照(Snapshot)写入磁盘,生成RDB文件,宕机后可通过RDB文件快速恢复数据。RDB的优点是恢复速度快 ,占用磁盘空间小;缺点是可能会丢失两次快照之间的数据。
  • AOF (Append Only File):即日志模式 ,将所有写操作指令(如set、delete)追加到AOF文件 中,宕机后通过重新执行AOF文件中的指令,恢复数据。AOF的优点是数据一致性高 (可配置每秒刷盘或每次操作刷盘),丢失数据少;缺点是AOF文件体积大恢复速度比RDB慢

Redis还支持RDB与AOF结合使用,既保证了数据恢复速度,又保障了数据一致性,满足不同场景下的数据安全需求。

相关推荐
有想法的py工程师10 分钟前
PostgreSQL 深入heap_update() 与 HOT 机制(附源码级解析)
数据库·postgresql
亚空间仓鼠1 小时前
NoSQL数据库Redis(三):主从复制
redis·bootstrap·nosql
qq_342295821 小时前
如何为容器内多个列表实现统一滚动条.txt
jvm·数据库·python
qq_206901392 小时前
CSS如何引入自适应图标_利用svg外链配合css控制颜色
jvm·数据库·python
weixin_408717772 小时前
Go语言怎么编译Linux程序_Go语言编译Linux可执行文件教程【避坑】
jvm·数据库·python
weisian1512 小时前
Java并发编程--33-Redis分布式缓存三大核心架构:主从、哨兵、分片,落地实战与选型
java·redis·缓存·主从架构·哨兵架构·分片架构
APIshop2 小时前
Python 爬虫获取京东商品详情 API 接口实战指南
java·服务器·数据库
XmasWu12252 小时前
【Hermes Agent进阶】开发自定义技能
网络·数据库
刘~浪地球2 小时前
数据库性能优化实战
数据库·性能优化