跳转到内容

Redis

来自代码酷
Redis
Developer(s)Redis Ltd.
Initial releaseMay 10, 2009; 16 years ago (2009-05-10)
模板:Infobox software/simple
Repository
  • {{URL|example.com|optional display text}}
Written inC
Engine
    Operating system跨平台
    Type键值存储NoSQL
    LicenseRedis Source Available License (RSALv2)
    Websiteredis.io

    Redis(Remote Dictionary Server)是一个开源的、基于内存的键值存储系统,常被用作数据库缓存消息代理。它支持多种数据结构,如字符串哈希列表集合有序集合等,并提供丰富的操作命令。

    历史[编辑 | 编辑源代码]

    Redis由Salvatore Sanfilippo(网名antirez)于2009年开发并首次发布。最初是为了解决其公司LLOOGG.com的可扩展性问题而创建的。由于其高性能和灵活性,Redis迅速获得了广泛采用。

    特性[编辑 | 编辑源代码]

    Redis的主要特性包括:

    • 内存存储:数据主要存储在内存中,提供极高的读写性能
    • 持久化:支持RDB(快照)和AOF(追加日志)两种持久化方式
    • 数据结构丰富:支持字符串、哈希、列表、集合、有序集合、位图等多种数据结构
    • 原子操作:所有操作都是原子性的
    • 发布/订阅:内置消息发布/订阅功能
    • 事务:支持简单的事务功能
    • Lua脚本:支持使用Lua脚本执行复杂操作
    • 高可用:通过Redis SentinelRedis 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的简单示例:

    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许可证

    相关技术[编辑 | 编辑源代码]

    • Memcached - 另一个流行的内存键值存储系统
    • MongoDB - 文档型NoSQL数据库
    • Kafka - 分布式消息系统
    • MySQL - 关系型数据库

    参考资料[编辑 | 编辑源代码]

    • 模块:Citation/CS1/Configuration第2123行Lua错误:attempt to index field '?' (a nil value)
    • 模板:Cite book