文章目录
1.Redis特性
Redis8个重要特性:速度快、基于键值对的数据结构服务器、丰富的功能、简单稳定、客户端语言多、持久化 、主从复制、高可用和分布式。
1.1.速度快
读写性能可以达到10万/秒,Redis这么快的速度,大致归
纳为以下四点:
- Redis的所有数据都是存放在内存中的,这是Redis速度快的最主要原因。
- Redis是用C语言实现的,执行速度相对会更快。
- Redis使用了单线程架构,预防了多线程可能产生的竞争问题。
- 作者对于Redis源代码可以说是精打细磨,曾经有人评价Redis是少有的 集性能和优雅于一身的开源代码。
1.2.基于键值对的数据结构服务器
Redis中的值主要提供了5种数据结构:字符串、哈希、列表、集合、有序集合,同时在字符串的基础之上演变出了位图(Bitmaps)和HyperLogLog两种神奇的“数据结构”,Redis3.2版本中 加入有关GEO(地理信息定位)的功能。
1.3.丰富的功能
- 提供了键过期功能,可以用来实现缓存。
- 提供了发布订阅功能,可以用来实现消息系统。
- 支持Lua脚本功能,可以利用Lua创造出新的Redis命令。
- 提供了简单的事务功能,能在一定程度上保证事务特性。
- 提供了流水线(Pipeline)功能,这样客户端能将一批命令一次性传到Redis,减少了网络的开销。
1.4.简单稳定
Redis的简单主要表现在三个方面。首先,Redis的源码很少,5万行左右。其次,Redis使用单线程模型,这样不仅使得Redis服务端处理模型变得简单,而且也使得客户端开发变得简单。最后,Redis不需要依赖于操作系统中的类库(例如Memcache需要依赖libevent这样的系统类库),Redis自己实现了事件处理的相关功能。
2.Redis使用场景
Redis的使用场景:缓存、排行榜系统、计数器应用、社交网络、消息队列系统。
Redis不可以做什么:如果数据量非常大,不适合使用Redis来存储。冷数据不适合放在Redis中,冷数据是对于内存的一种浪费。
3.用好Redis的建议
用好Redis的建议:Redis的单线程模型不能在上千万个键的Redis上执行keys*操作。不要在一个写操作量很大的Redis上配置自动保存RDB。
4.正确安装并启动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-rdb | Redis RDB 持久化文件检测和修复工具 |
redis-sentinel | 启动 Redis Sentinel |
4.1启动Redis:
有三种方法启动Redis:默认配置、运行配置、配置文件启动。
默认配置:到/usr/local/bin目录下直接执行redis-server命令
运行配置:redis-server加上要修改配置名和值(可以是多对),没有设置的配置将使用默认配置
# redis-server --configKey1 configValue1 --configKey2 configValue2
配置文件启动:将配置写到指定文件里,例如我们将配置写到了/opt/redis/redis.conf中
# redis-server /opt/redis/redis.conf
Redis命令行客户端:
使用redis-cli连接、操作Redis服务。redis-cli可以使用两种方式连接Redis服务器。
- 第一种是交互式方式:通过redis-cli-h{host}-p{port}的方式连接到Redis服务,之后所有的操作都是通过交互的方式实现,不需要再执行redis-cli
redis-cli -h 127.0.0.1 -p 6379 -a password
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"
- 第二种是命令方式:用redis-cli-h ip{host}-p{port}{command}就可以直接得到命令的返回结果,例如
redis-cli -h 127.0.0.1 -p 6379 get hello
"world"
4.2停止Redis服务:
Redis提供了shutdown命令来停止Redis服务
$ redis-cli shutdown
可以看到Redis的日志输出如下:
# 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
这里有三点需要注意一下:
1)Redis关闭的过程:断开与客户端的连接、持久化文件生成,是一种相对优雅的关闭方式。
2)除了可以通过shutdown命令关闭Redis服务以外,还可以通过kill进程号的方式关闭掉Redis,但是不要粗暴地使用kill-9强制杀死Redis服务,不但不会做持久化操作,还会造成缓冲区等资源不能被优雅关闭,极端情况会造成AOF和复制丢失数据的情况。
3)shutdown还有一个参数,代表是否在关闭Redis前,生成持久化文件:
redis-cli shutdown nosave|save