Redis
外观
文件:Redis-logo.svg | |
Developer(s) | Redis Ltd. |
---|---|
Initial release | May 10, 2009 |
Repository |
|
Written in | C |
Engine | |
Operating system | 跨平台 |
Type | 键值存储、NoSQL |
License | Redis Source Available License (RSALv2) |
Website | redis |
Redis(Remote Dictionary Server)是一个开源的、基于内存的键值存储系统,常被用作数据库、缓存和消息代理。它支持多种数据结构,如字符串、哈希、列表、集合、有序集合等,并提供丰富的操作命令。
历史[编辑 | 编辑源代码]
Redis由Salvatore Sanfilippo(网名antirez)于2009年开发并首次发布。最初是为了解决其公司LLOOGG.com的可扩展性问题而创建的。由于其高性能和灵活性,Redis迅速获得了广泛采用。
特性[编辑 | 编辑源代码]
Redis的主要特性包括:
- 内存存储:数据主要存储在内存中,提供极高的读写性能
- 持久化:支持RDB(快照)和AOF(追加日志)两种持久化方式
- 数据结构丰富:支持字符串、哈希、列表、集合、有序集合、位图等多种数据结构
- 原子操作:所有操作都是原子性的
- 发布/订阅:内置消息发布/订阅功能
- 事务:支持简单的事务功能
- Lua脚本:支持使用Lua脚本执行复杂操作
- 高可用:通过Redis Sentinel和Redis Cluster支持高可用和分布式部署
数据结构[编辑 | 编辑源代码]
Redis支持以下主要数据结构:
字符串(Strings)[编辑 | 编辑源代码]
最基本的键值类型,可以存储文本或二进制数据,最大512MB。
SET mykey "Hello"
GET mykey
哈希(Hashes)[编辑 | 编辑源代码]
键值对的集合,适合存储对象。
HSET user:1000 username antirez birthyear 1977
HGETALL user:1000
列表(Lists)[编辑 | 编辑源代码]
按插入顺序排序的字符串元素集合。
LPUSH mylist "world"
LPUSH mylist "hello"
LRANGE mylist 0 -1
集合(Sets)[编辑 | 编辑源代码]
无序的唯一字符串集合。
SADD myset "Hello"
SADD myset "World"
SMEMBERS myset
有序集合(Sorted Sets)[编辑 | 编辑源代码]
与集合类似,但每个元素关联一个分数,用于排序。
ZADD myzset 1 "one"
ZADD myzset 2 "two"
ZRANGE myzset 0 -1 WITHSCORES
持久化[编辑 | 编辑源代码]
Redis提供两种持久化方式:
RDB(Redis Database)[编辑 | 编辑源代码]
在指定时间间隔生成数据集的时间点快照。
AOF(Append Only File)[编辑 | 编辑源代码]
记录每个写操作到日志文件,重启时重新执行这些命令来恢复数据。
高可用与集群[编辑 | 编辑源代码]
Redis提供两种高可用解决方案:
Redis Sentinel[编辑 | 编辑源代码]
监控Redis主从实例,在主节点故障时自动进行故障转移。
Redis Cluster[编辑 | 编辑源代码]
提供数据自动分片和故障转移功能的分布式Redis实现。
性能[编辑 | 编辑源代码]
Redis因其内存存储和单线程架构而具有极高的性能:
- 读操作:约100,000次/秒
- 写操作:约80,000次/秒
使用场景[编辑 | 编辑源代码]
Redis适用于多种场景:
- 缓存:加速应用响应
- 会话存储:存储用户会话数据
- 排行榜:利用有序集合实现
- 消息队列:使用列表或发布/订阅功能
- 实时分析:处理高频率数据
- 地理空间索引:支持地理空间数据存储和查询
客户端支持[编辑 | 编辑源代码]
Redis支持几乎所有主流编程语言的客户端,包括:
- Python - redis-py
- Java - Jedis, Lettuce
- JavaScript - ioredis, node_redis
- Go - go-redis
- C# - StackExchange.Redis
示例应用[编辑 | 编辑源代码]
以下是一个使用Python操作Redis的简单示例:
import redis
# 连接Redis
r = redis.Redis(host='localhost', port=6379, db=0)
# 设置键值
r.set('foo', 'bar')
# 获取值
value = r.get('foo')
print(value) # 输出: b'bar'
版本历史[编辑 | 编辑源代码]
Redis的主要版本发布历史:
- 1.0 (2009年8月) - 初始稳定版本
- 2.0 (2010年12月) - 引入虚拟内存、位操作
- 3.0 (2015年4月) - 引入Redis Cluster
- 4.0 (2017年7月) - 模块系统、混合持久化
- 5.0 (2018年10月) - 引入Stream数据类型
- 6.0 (2020年4月) - 多线程I/O、ACL
- 7.0 (2022年4月) - Redis Functions、Sharded Pub/Sub
许可变更[编辑 | 编辑源代码]
自2023年起,Redis采用Redis Source Available License (RSALv2)许可,不再使用BSD许可证。
相关技术[编辑 | 编辑源代码]
参考资料[编辑 | 编辑源代码]
- 模块:Citation/CS1/Configuration第2123行Lua错误:attempt to index field '?' (a nil value)
- 模板:Cite book