Redis 基础

Redis 是一款高性能的内存数据库,支持多种数据结构如 String、Hash、List、Set 和 Zset,适用于缓存、统计、分布式锁和消息队列等场景。其高性能源于内存存储、高效数据结构设计、合理的数据编码和线程模型,Redis 6.0 引入了多线程以进一步提升性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Redis 是什么

Redis,英文全称是 Remote Dictionary Server(远程字典服务),是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

与 MySQL 数据库不同的是,Redis 的数据是存在内存中的。它的读写速度非常快,每秒可以处理超过10万次读写操作。因此 Redis 被 广泛应用于缓存,另外,Redis 也经常用来做分布式锁。除此之外,Redis支持事务、持久化、LUA 脚本、LRU 驱动事件、多种集群方案。

Redis 数据结构

Redis 作为常见数据结构类型有:

  • String 字符串:Redis 中最基础的数据结构类型,它是二进制安全的,可以存储图片或者序列化的对象,值最大存储为 512M。
  • Hash 哈希:在 Redis中,哈希类型是指v(值)本身又是一个键值对(k-v)结构。
  • List 列表:用来存储多个有序的字符串,一个列表最多可以存储 2^32-1 个元素。
  • Set 集合:集合(set)类型也是用来保存多个的字符串元素,但是不允许重复元素。
  • Zset 有序集合:已排序的字符串集合,同时元素不能重复。

此外,Redis还有三种特殊的数据结构类型:

  • Geo:地理位置定位,用于存储地理位置信息,并对存储的信息进行操作。
  • HyperLogLog:用来做基数统计算法的数据结构,如统计网站的 UV。
  • Bitmaps :用一个比特位来映射某个元素的状态,在 Redis 中,它的底层是基于字符串类型实现的,可以把 bitmaps 成作一个以比特位为单位的数组。

高性能的 Redis

  • 基于内存存储实现:Redis基于内存存储实现的数据库,相对于数据存在磁盘的 MySQL 数据库,省去磁盘I/O的消耗。
  • 高效的数据结构:Redis 每种数据结构都是经过精心设计,力求高效的。例如 String 底层使用 SDS 简单动态字符串。
  • 合理的数据编码:每种基本类型可能对多种数据结构。什么时候使用什么样数据结构使用什么样编码,是设计者总结优化的结果。
  • 合理的线程模型:而Redis使用用 epoll 作为 I/O 多路复用技术的实现。并且,Redis 自身的事件处理模型将 epoll 中的连接、读写、关闭都转换为事件,不在网络I/O上浪费过多的时间。Redis 是单线程模型的,而单线程避免了 CPU 不必要的上下文切换和竞争锁的消耗。Redis 6.0 引入了多线程提速,它的执行命令操作内存的仍然是个单线程。
  • 虚拟内存机制:Redis直接自己构建了VM机制 ,不会像一般的系统会调用系统函数处理,会浪费一定的时间去移动和请求。

Redis 使用场景

  • 缓存:Redis 常常被用来缓存热点数据,不仅可以提升网站的访问速度,还可以降低数据库 DB 的压力。
  • 统计:Redis 可以实现排行榜,统计网站流量,做计数器,使用 Bitmaps 实现上亿数据量场景下的用户登录统计。
  • 分布式锁:在并发量高的场合中,利用数据库锁来控制资源的并发访问,会影响数据库的性能,可以使用setnx来实现分布式的锁。
  • 消息队列:Redis提供了发布/订阅及阻塞队列功能,能实现一个简单的消息队列系统。另外,这个不能和专业的消息中间件相比。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值