编辑“︁
Redis
”︁
跳转到导航
跳转到搜索
Template:Editnotice load/content
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
{{Expand language|1=en|time=2023-04-13T08:40:52+00:00}} {{noteTA|G1=IT}} {{bettertranslation}} {{Infobox_Software | name = Redis | logo = Redis_logo.svg | caption = | developer = {{link-en|Salvatore Sanfilippo}} | released = {{Start date and age|2009|05|10}} | latest release version = {{LSR/wikidata}} | programming language = [[ANSI C]] | operating_system = [[跨平台]] | language = [[英语]] | genre = [[非关系型数据库]] | license = Redis Source Available License 或 {{link-en|伺服器端公眾授權條款|Server Side Public License}}雙重授權 }} '''Redis'''(Remote Dictionary Server)是一个使用[[ANSI C]]编写的支持[[电脑网络|网络]]、基于[[随机存储器|内存]]、[[分布式缓存|分布式]]、可选[[持久性]]的[[键值-值数据库|键值对存储数据库]]。根据月度排行网站DB-Engines.com的数据,Redis是最流行的键值对存储数据库。<ref>{{Cite web |url=http://db-engines.com/en/ranking/key-value+store |title=DB-Engines Ranking of Key-value Stores |accessdate=2013-06-29 |archive-date=2013-07-07 |archive-url=https://web.archive.org/web/20130707010933/http://db-engines.com/en/ranking/key-value+store |dead-url=yes }}</ref> == 历史 == Redis始于2009年,最初的开发者是Salvatore Sanfilippo。 Sanfilippo于2010年3月被[[VMware]]聘用。<ref>{{cite web|last=Shapira|first=Gwen|date=March 17, 2010|title=VMware Hires Redis Key Developer – But Why?|url=https://prodlife.wordpress.com/2010/03/17/vmware-hires-redis-key-developer-but-why/|access-date=September 25, 2016|website=Blog|archive-date=2023-03-14|archive-url=https://web.archive.org/web/20230314204152/https://prodlife.wordpress.com/2010/03/17/vmware-hires-redis-key-developer-but-why/|dead-url=no}}</ref> 2013年5月,Redis由VMware子公司[[Pivotal|毕威拓]]赞助。<ref>{{cite web|last=Sanfilippo|first=Salvatore|title=Redis Sponsors|url=https://redis.io/topics/sponsors|access-date=April 11, 2019|website=Redis.io|publisher=Redis Labs|archive-date=2023-03-14|archive-url=https://web.archive.org/web/20230314204158/https://redis.io/topics/sponsors/|dead-url=no}}</ref> 2015年6月至,Redis的开发在{{tsl|en|Redis Labs}}赞助下由Sanfilippo团队维护。<ref>{{cite web|last=Sanfilippo|first=Salvatore|date=July 15, 2015|title=Thanks Pivotal, Hello Redis Labs|url=http://antirez.com/news/91|access-date=2019-04-03|website=<antirez>|archive-date=2015-07-18|archive-url=https://web.archive.org/web/20150718063241/http://antirez.com/news/91|dead-url=no}}</ref> 2019年11月,RedisLabs发布了全新的[[图形用户界面|可视化图形用户界面]]Redis工具RedisInsight。 2020年6月,Sanfilippo辞去Redis维护者职务,退居二线担任“谋士”。Redis转为社区自治模式。<ref>{{Cite web|title=Redis之父退出开源项目维护:人生苦短不想上班_工作|url=https://www.sohu.com/a/405539289_355140|access-date=2023-11-20|website=www.sohu.com}}</ref> 2024年3月,Redis更改主程式碼授權條款,從[[开源软件|開源]]的[[BSD许可证]]轉為 Redis Source Available License 或 {{link-en|伺服器端公眾授權條款|Server Side Public License}}雙重授權,不再属于开源软件。 == 支持语言 == 许多语言都包含Redis支持,包括:<ref>{{Cite web |url=http://redis.io/clients |title=Redis language bindings |access-date=2013-07-01 |archive-url=https://web.archive.org/web/20140208020400/http://redis.io/clients |archive-date=2014-02-08 |dead-url=yes }}</ref> {{Multicol}} * [[ActionScript]] * [[C语言|C]] * [[C++]] * [[C Sharp|C#]] * [[Clojure]] {{Multicol-break}} * [[Common Lisp]] * [[Dart]] * [[Erlang语言|Erlang]] * [[Go语言|Go]] * [[Haskell语言|Haskell]] {{Multicol-break}} * [[Haxe]] * [[Io语言|Io]] * [[Java语言|Java]] * [[Fibjs]] * [[Node.js]] * [[Lua语言|Lua]] {{Multicol-break}} * [[Objective-C]] * [[Perl]] * [[PHP]] * [[Pure Data]] * [[Python]] {{Multicol-break}} * [[R语言|R]]<ref>{{Cite web |url=http://cran.r-project.org/web/packages/rredis/index.html |title=CRAN - Package rredis |accessdate=2013-07-01 |archive-date=2013-06-20 |archive-url=https://web.archive.org/web/20130620135831/http://cran.r-project.org/web/packages/rredis/index.html |dead-url=no }}</ref> * [[Ruby语言|Ruby]] * [[Rust (编程语言)|Rust]] * [[Scala语言|Scala]] * [[Smalltalk]] * [[Tcl]] {{Multicol-end}} [[File:Salvatore_Sanfilippo.png|right|thumb|Salvatore Sanfilippo在Redis开发者大会(拍摄于2015年)]] === Python簡單範例 === <syntaxhighlight lang="Python"> # coding:utf-8 import redis # lredis-server保持開啓狀態,如果在客戶端設定了密碼 添加password=密碼即可 pool = redis.ConnectionPool(host='127.0.0.1', port=6379, db=0) r = redis.StrictRedis(connection_pool=pool) # 字符串 r.set('test', 'aaa') print r.get('test') # 列表 # 注意python、lrange兩個range的範圍 x = 0 for x in range(0, 11): r.lpush('list', x) x = x + 1 print r.lrange('list', '0', '10') # 雜湊 dict_hash = {'name': 'tang', 'password': 'tang_passwd'} r.hmset('hash_test', dict_hash) print r.hgetall('hash_test') # 集合 r.sadd('set_test', 'aaa', 'bbb') r.sadd('set_test', 'ccc') r.sadd('set_test', 'ddd') print r.smembers('set_test') # 有序集 r.zadd('zset_test', {'aaa': 1, 'bbb': 1}) r.zadd('zset_test', {'ccc': 1}) r.zadd('zset_test', {'ddd': 1}) print r.zrange('zset_test', 0, 10) </syntaxhighlight> == 数据模型 == Redis的外围由一个键、值映射的[[关联数组|字典]]构成。与其他[[非关系型数据库]]主要不同在于:Redis中值的类型不仅限于[[字符串]],还支持如下抽象数据类型: * [[字符串]][[串列 (抽象資料型別)|列表]] * 无序不重复的[[字符串]][[集合 (抽象資料型別)|集合]] * 有序不重复的[[字符串]][[集合 (抽象資料型別)|集合]] * 键、值都为[[字符串]]的[[哈希表]] 值的类型决定了值本身支持的操作。Redis支持不同无序、有序的[[串列 (抽象資料型別)|列表]],无序、有序的[[集合 (抽象資料型別)|集合]]间的交集、并集等高级服务器端原子操作。 == 持久化 == Redis通常将全部的数据存储在内存中。2.4版本后可配置为使用[[虚拟内存]],<ref>Redis documentation [http://redis.io/topics/virtual-memory "Virtual Memory"] {{Wayback|url=http://redis.io/topics/virtual-memory |date=20101224092847 }}, ''redis.io'', accessed January 18, 2011.</ref>一部分数据集存储在硬盘上,但这个特性废弃了。 目前通过两种方式实现[[持久化]]: * 使用[[快照]],一种半持久耐用模式。不时的将数据集以异步方式从内存以RDB格式写入硬盘。 * 1.1版本开始使用更安全的AOF格式替代,一种只能追加的日志类型。将数据集修改操作记录起来。Redis能够在后台对只可追加的记录进行修改,从而避免日志的無限增长。 == 同步 == Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。从盘可以有意无意的对数据进行写操作。由于完全实现了[[发布/订阅]]机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。<ref>{{Cite web |url=http://code.google.com/p/redis/wiki/ReplicationHowto |title=ReplicationHowto - redis - A persistent key-value database with built-in net interface written in ANSI-C for Posix systems - Google Project Hosting |accessdate=2013-07-01 |archive-date=2013-05-29 |archive-url=https://web.archive.org/web/20130529024706/http://code.google.com/p/redis/wiki/ReplicationHowto |dead-url=no }}</ref> == 性能 == 当数据依赖不再需要,Redis这种基于内存的性质,与在执行一个事务时将每个变化都写入硬盘的数据库系统相比就显得执行效率非常高。<ref>{{cite web|title=FAQ|url=http://redis.io/topics/faq|accessdate=2013-07-01|archive-date=2013-07-16|archive-url=https://www.webcitation.org/6I9bg3Y3O?url=http://redis.io/topics/faq|dead-url=no}}</ref>写与读操作速度没有明显差别。 ==安全性== Redis 7.0.0到7.2.6版本及7.4.0到7.4.1版本存在[[拒绝服务攻击]]漏洞({{CVE|2024-51741}}),当拥有权限的认证用户创建一个畸形的访问控制列表(ACL)选择器后,访问这个畸形选择器会造成服务器崩溃,并进入拒绝服务状态,通过升级到7.2.7或7.4.2版本可修复这个问题<ref name="cybersecuritynews2025">{{cite news |last1=Baran |first1=Guru |title=Redis Server Vulnerabilities Let Attackers Execute Remote Code |url=https://cybersecuritynews.com/redis-server-vulnerabilities/ |accessdate=2025-12-24 |work=Cyber Security News |date=2025-01-07}}</ref>。 2024年发现所有开启[[Lua]]脚本功能的Redis版本,如果认证过的攻击者编写恶意的Lua脚本来操纵垃圾收集器,可能在服务器上执行任意代码({{CVE|2024-46981}})<ref>{{cite web |title=Lua library commands may lead to remote code execution |url=https://github.com/redis/redis/security/advisories/GHSA-39h2-x6c4-6w4c |website=GitHub |accessdate=2025-12-24 |language=en}}</ref>,需要升级到7.2.7或7.4.2以后的版本并限制Lua脚本以修复这个漏洞<ref name="cybersecuritynews2025" />。2025年发现Redis8.2.1之前的版本({{CVE|2025-49844}}),攻击者可通过构造恶意Lua脚本并提交执行码,触发远程代码执行<ref>{{cite news |last1=Zorz |first1=Zeljka |title=Redis patches critical "RediShell" RCE vulnerability, update ASAP! (CVE-2025-49844) |url=https://www.helpnetsecurity.com/2025/10/07/redis-patches-critical-redishell-rce-vulnerability-update-asap-cve-2025-49844/ |accessdate=2025-12-26 |work=Help Net Security |date=2025-10-07}}</ref>。 == 参见 == {{Portal|自由软件}} * [[Cassandra]] * [[Berkeley DB]] * [[memcached]] * [[MongoDB]] * [[Solr]] * [[内存数据库]] * [[非关系型数据库]] == 参考资料 == * Jeremy Zawodny, ''[http://www.linux-mag.com/cache/7496/1.html Redis: Lightweight key/value Store That Goes the Extra Mile]{{Wayback|url=http://www.linux-mag.com/cache/7496/1.html |date=20100628173505 }}'', [[Linux Magazine]], August 31, 2009 * Isabel Drost and Jan Lehnard(29 October 2009),[http://www.h-online.com/open/features/Happenings-NoSQL-Conference-Berlin-843597.html Happenings: NoSQL Conference, Berlin]{{Wayback|url=http://www.h-online.com/open/features/Happenings-NoSQL-Conference-Berlin-843597.html |date=20110722110855 }}, [[The H]]. [http://nosqlberlin.de/slides/NoSQLBerlin-Redis.pdf Slides]{{Wayback|url=http://nosqlberlin.de/slides/NoSQLBerlin-Redis.pdf |date=20110719065756 }} for the Redis presentation. [http://www.paperplanes.de/2009/10/27/theres_something_about_redis.html Summary]{{Wayback|url=http://www.paperplanes.de/2009/10/27/theres_something_about_redis.html |date=20110707143601 }}. * Billy Newport(IBM):"[http://www.infoq.com/presentations/newport-evolving-key-value-programming-model Evolving the Key/Value Programming Model to a Higher Level]{{Wayback|url=http://www.infoq.com/presentations/newport-evolving-key-value-programming-model |date=20110210120258 }}" Qcon Conference 2009 San Francisco. <references/> == 外部链接 == * {{官网|http://redis.io/|Redis项目官网}}{{En}} * [https://web.archive.org/web/20110221132131/http://thechangelog.com/post/2801342864/episode-0-4-5-redis-with-salvatore-sanfilippo 对Salvatore Sanfillipo的播客采访]{{En}} * [https://web.archive.org/web/20121225104309/http://simonwillison.net/static/2010/redis-tutorial/ 由Simon Willison讲解的Redis真实应用场景教程]{{En}} * [https://web.archive.org/web/20111113064925/http://redis4you.com/code.php 使用PHP进行Redis开发的实例]{{En}} * [http://www.pagedegeek.com/2012/05/30/Ruby-Redis-scalabilite.html 使用Ruby进行Redis开发的实例]{{Wayback|url=http://www.pagedegeek.com/2012/05/30/Ruby-Redis-scalabilite.html |date=20130517010859 }}{{En}} {{NoSQL}} {{Authority control}} [[Category:資料庫快取]] [[Category:跨平台软件]] [[Category:键-值数据库]]
摘要:
请注意,所有对Local Chinese Wikipedia的贡献均可能会被其他贡献者编辑、修改或删除。如果您不希望您的文字作品被随意编辑,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源(详情请见
Project:著作权
)。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
导航菜单
个人工具
未登录
讨论
贡献
创建账号
登录
命名空间
页面
讨论
大陆简体
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
臺灣正體
查看
阅读
编辑
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息