赞
踩
Redis是一种基于键值对(key-value)的NoSQL数据库,与很多键值对数据库不同的是,Redis中的值可以是由string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、HyperLogLog、GEO(地理信息定位)等多种数据结构和算法组成。
Redis会将所有数据都存放在内存 中,所以它的读写性能非常惊人。
Redis还可以将内存的数据利 用快照和日志的形式保存到硬盘上,这样在发生类似断电或者机器故障的时候,内存中的数据不会丢失。
层级 | 速度 |
---|---|
Ll cache reference | 0.5ns |
Branch mispredict | 5ns |
L2 cache reference | 7ns |
Mutex lock/unlock | 25ns |
Main memory reference | 100ns |
Compress 1K bytes with Zippy | 3 000ns |
Send 2K bytes over 1 Gbps network | 20 000ns |
Read 1 MB sequentially from Memory | 250 000ns |
Round trip within same datacenter | 500 000ns |
Disk seek | 10 000 000ns |
Read 1 MB sequentially from disk | 20 000 000ns |
Send packet CA->Netherlands->CA | 150 000 000ns |
基于键值对的数据结构服务器:
1、Redis的全称是: Remote Dictionary Server
2、Redis主要提供了5种数据结构:字符串、哈希、列表、集合、有序集合,同时在字符串的基础之上演变出了位图(Bitmaps)和HyperLogLog两种神奇的“数据结构”,并且随着LBS(Location Based Service,基于位置服务)的不断发展,Redis3.2版本中加入有关GEO(地理信息定位)的功能,总之在这些数据结构的帮助下,开发者可以开发出各种“有意思”的应用。
丰富的功能
1、提供了键过期功能,可以用来实现缓存。
2、提供了发布订阅功能,可以用来实现消息系统。
3、支持Lua脚本功能,可以利用Lua创造出新的Redis命令。
4、提供了简单的事务功能,能在一定程度上保证事务特性。
5、提供了流水线(Pipeline)功能,这样客户端能将一批命令一次性传到Redis,减少了网络的开销。
简单稳定
1、Redis的源码很少,早期版本的代码只有2万行左右,3.0版本以后由于添加了集群特性,代码增至5万行左右,相对于很多NoSQL数据库来说代码量相对要少很多,也就意味着普通的开发和运维人员完全可以“吃透”它。
2、Redis使用单线程模型,这样 不仅使得Redis服务端处理模型变得简单,而且也使得客户端开发变得简单。
客户端语言多
1、Redis提供了简单的TCP通信协议,很多编程语言可以很方便地接入到Redis,例如Java、PHP、Python、C、C++、Nodejs等
持久化
1、Redis提供了两种持久化方式:RDB和 AOF,即可以用两种策略将内存的数据保存到硬盘中。
主从复制
1、Redis提供了复制功能,实现了多个相同数据的Redis副本,复制功能是分布式Redis的基础。
高可用和分布式
1、Redis从2.8版本正式提供了高可用实现 Redis Sentinel,它能够保证Redis 节点的故障发现和故障自动转移。
2、Redis从3.0版本正式提供了分布式实现 Redis Cluster,它是Redis真正的分布式实现,提供了高可用、读写和容量的扩展性。
缓存:缓存机制几乎在所有的大型网站都有使用,合理地使用缓存不仅可以加快数据的访问速度,而且能够有效地降低后端数据源的压力。Redis提供了键值过期时间设置,并且也提供了灵活控制最大内存和内存溢出后的淘汰策略。
排行榜系统:排行榜系统几乎存在于所有的网站,例如按照热度排名的排行榜,按照 发布时间的排行榜,按照各种复杂维度计算出的排行榜,Redis提供了列表 和有序集合数据结构,合理地使用这些数据结构可以很方便地构建各种排行 榜系统。
计数器应用:Redis天然支持计数 功能而且计数的性能也非常好,可以说是计数器系统的重要选择。
社交网络:由于社交网站访问量通常比较大,而且传统的关系型数据不太适合保存这种类型的数据,Redis提供的数据结构可以相对比较容易地实现这些功能。
消息队列系统:消息队列系统可以说是一个大型网站的必备基础组件,因为其具有业务解耦、非实时业务削峰等特性。Redis提供了发布订阅功能和阻塞队列的功能,虽然和专业的消息队列比还不够足够强大,但是对于一般的消息队列功能基本可以满足。
很多使用Redis的开发者认为只要会用API开发相应的功能就可以,更有 甚者认为Redis就是get、set、del,不需要知道Redis的原理。
如果不了解Redis的单线程模型,有些开发者会在有 上千万个键的Redis上执行keys*操作,如果不了解持久化的相关原理,会在一个写操作量很大的Redis上配置自动保存RDB。
源码方式进行安装Redis:
wget http://download.redis.io/releases/redis-3.0.7.tar.gz
tar xzf redis-3.0.7.tar.gz
ln -s redis-3.0.7 redis
cd redis
make
make install
redis-cli–v
查看Redis的版本。Redis的官方并不支持微软的Windows操作系统,但是Redis作为一款优秀的开源技术吸引到了微软公司的注意,微软公司的开源技术组在GitHub上维护一个Redis的分支:https://github.com/MSOpenTech/redis
Redis安装之后,src
和 /usr/local/bin
目录下多了几个以redis开头可执行文件,我们称之为Redis Shell,这些可执行文件可以做很多事情,例如可以启动和停止Redis、可以检测和修复Redis的持久化文件,还可以检测Redis的性能。
可执行文件 | 作用 |
---|---|
redis-server | 启动Redis |
redis-cli | Redis命令行客户端 |
redis-benchmark | Redis基准测试工具 |
redis-check-aof | Redis AOF持久化文件检测和修复工具 |
redis-check-dump | Redis RDB持久化文件检测和修复工具 |
redis-sentinel | 启动Redis Sentinel |
有三种方法启动Redis:默认配置、运行配置、配置文件启动。
默认配置:这种方法会使用Redis的默认配置来启动。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kqeuvxew-1667732591013)(https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=ac33ece95501aeea98895b6897faf5ad&file=file.png)]
运行配置:redis-server加上要修改配置名和值(可以是多对),没有设置的配置将使用默认配置:
redis-server --configKey1 configValue1 --configKey2 configValue2
redis-server --port 6380
配置文件启动:将配置写到指定文件里,例如我们将配置写到了/opt/redis/redis.conf中,那么只需要执行如下命令即可启动Redis:
redis-server /opt/redis/redis.conf
Redis有60多个配置,这里只给出一些重要的配置:
配置名 | 配置说明 |
---|---|
port | 端口 |
logfile | 日志文件 |
dir | Redis工作目录(存放持久化文件和日志文件) |
daemonize | 是否以守护进程的方式启动Redis |
redis-cli可以使用两种方式连接Redis服务器:
redis-cli -h {host} -p {port}
的方式连接到Redis服务,之后所有的操作都是通过交互的方式实现,不需要再执行redis-cli了。redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"
redis-cli -h {host} -p {port} {command}
就可以直接得到命令的返回结果redis-cli -h 127.0.0.1 -p 6379 get hello
"world"
127.0.0.1
;如果没有-p,那么默认6379端口,也就是说如果-h和-p都没写就是连接 127.0.0.1:6379
这个Redis实例。Redis提供了shutdown命令来停止Redis服务,例如要停掉 127.0.0.1
上 6379
端口上的Redis服务,可以执行如下操作: redis-cli shutdown
# User requested shutdown... #客户端发出的shutdown命令
* Saving the final RDB snapshot before exiting.
# 保存RDB持久化文件(有关Redis持久化的特性在1.2节已经进行了简单的介绍,RDB是Redis的一种持久化方式)
* DB saved on disk #将RDB文件保存在磁盘上
# Redis is now ready to exit, bye bye... #关闭
当使用redis-cli再次连接该Redis服务时,看到Redis已经"失联":
$ redis-cli
Could not connect to Redis at 127.0.0.1:6379: Connection refused
【注意】
redis-cli shutdown nosave|save
Redis借鉴了Linux操作系统对于版本号的命名规则:版本号第二位如果是奇数,则为非稳定版本(例如2.7、2.9、3.1),如果是偶数,则为稳定版本(例如2.6、2.8、3.0、3.2)。当前奇数版本就是下一个稳定版本的开发版本,例如2.9版本是3.0版本的开发版本。
Redis3.0最大的改动就是添加Redis的分布式实现Redis Cluster,填补了Redis官方没有分布式实现的空白。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。