当前位置:网站首页>Redis入门完整教程:初识Redis
Redis入门完整教程:初识Redis
2022-07-04 22:29:00 【谷哥学术】
Redis [1] 是一种基于键值对(key-value)的NoSQL数据库,与很多键值对
数据库不同的是,Redis中的值可以是由string(字符串)、hash(哈希)、
list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、
HyperLogLog、GEO(地理信息定位)等多种数据结构和算法组成,因此
Redis可以满足很多的应用场景,而且因为Redis会将所有数据都存放在内存
中,所以它的读写性能非常惊人。不仅如此,Redis还可以将内存的数据利
用快照和日志的形式保存到硬盘上,这样在发生类似断电或者机器故障的时
候,内存中的数据不会“丢失”。除了上述功能以外,Redis还提供了键过
期、发布订阅、事务、流水线、Lua脚本等附加功能。总之,如果在合适的
场景使用好Redis,它就会像一把瑞士军刀一样所向披靡。
2008年,Redis的作者Salvatore Sanfilippo [2] 在开发一个叫LLOOGG的网
站时,需要实现一个高性能的队列功能,最开始是使用MySQL来实现的,
但后来发现无论怎么优化SQL语句都不能使网站的性能提高上去,再加上自
己囊中羞涩,于是他决定自己做一个专属于LLOOGG的数据库,这个就是
Redis的前身。后来,Salvatore Sanfilippo将Redis1.0的源码开放到GitHub [3]
上,可能连他自己都没想到,Redis后来如此受欢迎。
假如现在有人问Redis的作者都有谁在使用Redis,我想他可以开句玩笑
的回答:还有谁不使用Redis,当然这只是开玩笑,但是从Redis的官方公司
统计来看,有很多重量级的公司都在使用Redis,如国外的Twitter、
Instagram、Stack Overflow、GitHub等,国内就更多了,如果单单从体量来统
计,新浪微博可以说是全球最大的Redis使用者,除了新浪微博,还有像阿
里巴巴、腾讯、百度、搜狐、优酷土豆、美团、小米、唯品会等公司都是
Redis的使用者。除此之外,许多开源技术像ELK等已经把Redis作为它们组
件中的重要一环,而且Redis会在未来的版本中提供模块系统让第三方人员
实现功能扩展,让Redis发挥出更大的威力。所以,可以这么说,熟练使用
和运维Redis已经成为开发运维人员的一个必备技能。
[1] http://redis.io
[2] http://antirez.com
[3] https://github.com/antirez/redis
1.2 Redis特性
Redis之所以受到如此多公司的青睐,必然有之过人之处,下面是关于
Redis的8个重要特性。
1.速度快
正常情况下,Redis执行命令的速度非常快,官方给出的数字是读写性
能可以达到10万/秒,当然这也取决于机器的性能,但这里先不讨论机器性
能上的差异,只分析一下是什么造就了Redis除此之快的速度,可以大致归
纳为以下四点:
·Redis的所有数据都是存放在内存中的,表1-1是谷歌公司2009年给出的
各层级硬件执行速度,所以把数据放在内存中是Redis速度快的最主要原
因。
·Redis是用C语言实现的,一般来说C语言实现的程序“距离”操作系统更
近,执行速度相对会更快。
·Redis使用了单线程架构,预防了多线程可能产生的竞争问题。
·作者对于Redis源代码可以说是精打细磨,曾经有人评价Redis是少有的
集性能和优雅于一身的开源代码
2.基于键值对的数据结构服务器
几乎所有的编程语言都提供了类似字典的功能,例如Java里的map、
Python里的dict,类似于这种组织数据的方式叫作基于键值的方式,与很多
键值对数据库不同的是,Redis中的值不仅可以是字符串,而且还可以是具
体的数据结构,这样不仅能便于在许多应用场景的开发,同时也能够提高开
发效率。Redis的全称是REmote Dictionary Server,它主要提供了5种数据结
构:字符串、哈希、列表、集合、有序集合,同时在字符串的基础之上演变
出了位图(Bitmaps)和HyperLogLog两种神奇的“数据结构”,并且随着
LBS(Location Based Service,基于位置服务)的不断发展,Redis3.2版本中
加入有关GEO(地理信息定位)的功能,总之在这些数据结构的帮助下,开
发者可以开发出各种“有意思”的应用。
3.丰富的功能
除了5种数据结构,Redis还提供了许多额外的功能:
·提供了键过期功能,可以用来实现缓存。
·提供了发布订阅功能,可以用来实现消息系统。
·支持Lua脚本功能,可以利用Lua创造出新的Redis命令。
·提供了简单的事务功能,能在一定程度上保证事务特性。
·提供了流水线(Pipeline)功能,这样客户端能将一批命令一次性传到
Redis,减少了网络的开销。
4.简单稳定
Redis的简单主要表现在三个方面。首先,Redis的源码很少,早期版本
的代码只有2万行左右,3.0版本以后由于添加了集群特性,代码增至5万行
左右,相对于很多NoSQL数据库来说代码量相对要少很多,也就意味着普通
的开发和运维人员完全可以“吃透”它。其次,Redis使用单线程模型,这样
不仅使得Redis服务端处理模型变得简单,而且也使得客户端开发变得简
单。最后,Redis不需要依赖于操作系统中的类库(例如Memcache需要依赖
libevent这样的系统类库),Redis自己实现了事件处理的相关功能。
Redis虽然很简单,但是不代表它不稳定。以笔者维护的上千个Redis为
例,没有出现过因为Redis自身bug而宕掉的情况。
5.客户端语言多
Redis提供了简单的TCP通信协议,很多编程语言可以很方便地接入到
Redis,并且由于Redis受到社区和各大公司的广泛认可,所以支持Redis的客
户端语言也非常多,几乎涵盖了主流的编程语言,例如Java、PHP、
Python、C、C++、Nodejs等 [1] ,第4章我们将对Redis的客户端进行详细说 明。
6.持久化
通常看,将数据放在内存中是不安全的,一旦发生断电或者机器故障,
重要的数据可能就会丢失,因此Redis提供了两种持久化方式:RDB和
AOF,即可以用两种策略将内存的数据保存到硬盘中(如图1-1所示),这
样就保证了数据的可持久性,第5章我们将对Redis的持久化进行详细说明。
7.主从复制
Redis提供了复制功能,实现了多个相同数据的Redis副本(如图1-2所
示),复制功能是分布式Redis的基础。第6章我们将对Redis的复制进行详
细说明。
8.高可用和分布式
Redis从2.8版本正式提供了高可用实现Redis Sentinel,它能够保证Redis
节点的故障发现和故障自动转移。Redis从3.0版本正式提供了分布式实现
Redis Cluster,它是Redis真正的分布式实现,提供了高可用、读写和容量的
扩展性。
边栏推荐
- Tla+ introductory tutorial (1): introduction to formal methods
- 安装人大金仓数据库
- Unity Xiuxian mobile game | Lua dynamic sliding function (specific implementation of three source codes)
- NFT Insider #64:电商巨头eBay提交NFT相关商标申请,毕马威将在Web3和元宇宙中投入3000万美元
- LOGO special training camp section I identification logo and Logo Design Ideas
- How diff are the contents of the same configuration item in different environments?
- POM in idea XML dependency cannot be imported
- Solana chain application crema was shut down due to hacker attacks
- Attack and defense world misc advanced area ditf
- 页面关闭前,如何发送一个可靠请求
猜你喜欢
[the 2023 autumn recruitment of MIHA tour] open [the only exclusive internal push code of school recruitment eytuc]
Business is too busy. Is there really no reason to have time for automation?
Challenges faced by virtual human industry
Google Earth engine (GEE) - tasks upgrade enables run all to download all images in task types with one click
Attack and defense world misc advanced area ditf
攻防世界 misc 高手进阶区 a_good_idea
集群的概述与定义,一看就会
【OpenGL】笔记二十九、抗锯齿(MSAA)
LOGO special training camp section I identification logo and Logo Design Ideas
Redis入门完整教程:发布订阅
随机推荐
The difference between Max and greatest in SQL
Sword finger offer 67 Convert a string to an integer
繁華落盡、物是人非:個人站長該何去何從
[Yugong series] go teaching course 003-ide installation and basic use in July 2022
Redis入门完整教程:GEO
The Sandbox 和数字好莱坞达成合作,通过人力资源开发加速创作者经济的发展
Serial port data frame
Google Earth engine (GEE) -- take modis/006/mcd19a2 as an example to batch download the daily mean, maximum, minimum, standard deviation, statistical analysis of variance and CSV download of daily AOD
The table is backed up in ODPs. Why check m in the metabase_ Table, the logical sizes of the two tables are inconsistent, but the number of
How to send a reliable request before closing the page
页面关闭前,如何发送一个可靠请求
Sword finger offer 68 - I. nearest common ancestor of binary search tree
How to reset the password of MySQL root account
共创软硬件协同生态:Graphcore IPU与百度飞桨的“联合提交”亮相MLPerf
Breakpoint debugging under vs2019 c release
剑指 Offer 65. 不用加减乘除做加法
Attack and defense world misc advanced area ditf
[machine learning] handwritten digit recognition
【烹饪记录】--- 青椒炒千张
攻防世界 MISC 进阶区 hit-the-core