Redis
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,redis数据类型:包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis是一个高性能的key-value数据库。redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。
Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。
Redis安装
Linux 下安装
下载地址:http://redis.io/download,下载最新稳定版本。
此处安装的版本为 3.0.7(可根据自己需要安装不同版本),下载并安装:
$ wget http://download.redis.io/releases/redis-3.0.7.tar.gz # 下载Redis指定版本的源码压缩包到当前目录
$ tar xzf redis-3.0.7.tar.gz # 解压缩Redis源码压缩包
$ cd redis-3.0.7 # 进入redis目录
$ make # 编译
$ make install # 安装
make完后 redis-3.0.7目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli,两个程序位于安装目录 src 目录下。
配置及启动
1.找到redis.conf文件
root@iZwz98n0cskflvny0e90msZ:~# ls
appendonly.aof mongodb-linux-x86_64-3.6.5.tgz redis-3.2.11.tar.gz sentinel.conf
dump.rdb redis-3.2.11 redis.conf
root@iZwz98n0cskflvny0e90msZ:~#
2.进入redis.conf文件,修改
62行处根据需要修改ip,默认127.0.0.1,只能自己访问。如果需要他人访问就要改成字节的内网ip
84行的为端口,根据自己需求修改,默认为6379
481行为设置登录密码
3.启动redis
默认配置:
root@iZwz98n0cskflvny0e90msZ:~# redis-server
配置文件启动:
root@iZwz98n0cskflvny0e90msZ:~# redis-server redis.conf & # '&'符号表示后台运行
4.启动redis客户端
root@iZwz98n0cskflvny0e90msZ:~# redis-cli -h host -p port # 端口防火墙开洞
119.23.27.15:6379> auth 密码
OK
下面测试返回PONG表示启动成功
119.23.27.15:6379> ping
PONG
119.23.27.15:6379>
停止Redis服务
Redis提供了shutdown命令来停止Redis服务,例如要停掉127.0.0.1上
6379端口上的Redis服务,可以执行如下操作。
$ redis-cli shutdown
$ redis-cli -h host -p port -a 密码 shutdown
可以看到Redis的日志输出如下:
8287:M 08 Jun 12:40:33.661 # User requested shutdown... # 客户端发出的 shutdown 命令
8287:M 08 Jun 12:40:33.661 * Calling fsync() on the AOF file.
8287:M 08 Jun 12:40:33.661 * Saving the final RDB snapshot before exiting. # 保存 RDB 持久化文件 ( 有关 Redis 持久化的特性在 1.2 节已经进行了简单的介绍, RDB 是 Redis 的一种持久化方式 )
8287:M 08 Jun 12:40:33.665 * DB saved on disk # 将 RDB 文件保存在磁盘上
8287:M 08 Jun 12:40:33.665 * Removing the pid file.
8287:M 08 Jun 12:40:33.665 # Redis is now ready to exit, bye bye... # 关闭
[1]+ Done redis-server redis.conf
当使用redis-cli再次连接该Redis服务时,看到Redis已经“失联”。
root@iZwz98n0cskflvny0e90msZ:~# redis-cli -h host -p port
Could not connect to Redis at 119.23.27.15:6379: Connection refused
这里有三点需要注意一下:
1)Redis关闭的过程:断开与客户端的连接、持久化文件生成,是一种相对优雅的关闭方式。
2)除了可以通过shutdown命令关闭Redis服务以外,还可以通过kill进程号的方式关闭掉Redis,但是不要粗暴地使用kill-9强制杀死Redis服务,不但不会做持久化操作,还会造成缓冲区等资源不能被优雅关闭,极端情况会造成AOF和复制丢失数据的情况。
3)shutdown还有一个参数,代表是否在关闭Redis前,生成持久化文
件:
redis-cli shutdown nosave|save
部分redis数据操作
删除数据库内容
flushall # 删除所有数据库的内容
flushdb # 删除当前数据库数据
保存数据
save
# 阻塞主进程,客户端无法连接redis,等save完成后,主进程才开始工作,客户端才可以连接
bgsave
# fork一个save的子进程,在执行save过程中,不影响主进程,客户端可以正常链接redis,等子进程fork执行save完成后,通知主进程,子进程关闭。很明显bgsave方式比较适合线上的维护操作,两种方式的使用一定要了解清楚在谨慎选择