Redis

1.1 安装

官网源码安装

从Redis的官网下载得到redis-3.2.8.tar.gz,root用户执行:

tar zxvf redis-**.tar.gz
cd redis-**
make 
make install # 安装到/usr/local/bin

CentOS 7 yum安装

yum install epel-release
yum install redis # 安装到/usr/bin/,配置文件在/etc/redis.conf

1.2 配置

增加登录密码

修改配置文件,注释掉requirepass这一行,后面带的就是密码,要设置得复杂些。重启服务器生效。

允许远程登录

修改配置文件,修改bind 127.0.0.1bind 0.0.0.0并确定没有其它bind。重启服务器生效。

设置后台运行

修改配置文件,设置为daemonize yes

1.3 启动redis

  • 对于官方方式的安装,先把redis-*/redis.conf放到/etc/目录下。执行启动:bin/redis-server /etc/redis.conf

  • 对于CentOS7 yum的安装,执行systemctl start redis,设置开机启动redis:systemctl enable redis

验证启动成功

执行:redis-cli ping,返回PONG就启动成功了。

停止redis

不要用kill -9的方式关闭redis,那样会导致redis数据丢失。

停止redis需要用redis-cli登录到客户端,然后执行:

shutdown save   # 关闭,并保持数据,如果不想保存数据,则用shutdown nosave

命令行使用

执行命令./redis-cli -p 6379 -h 127.0.0.1连接上redis:

# 如果需要输入密码,那么先执行auth 密码
set name nick #设置键值
get name #获取值

官方的所有命令文档

Windows下安装redis server

redis官方并不支持windows,所以windows下的redis只适合开发。windows版redis下载地址

2. redis支持的值类型

String(包括数字)类型

set name nick
set age 27 # 27会当做字符串存储
incr age # 当值爲string的数字时,可以使用incr incrby decr decrby来增减
append name x # 字符串追加内容
strlen name # 获得字符串的长度
substr name 0 2 # 获得子字符串

List列表类型

Set集合和Sorted Set有序集合

Map键值

订阅机制

开两个客户端,一个执行:

subscribe channel-1 #阻塞订阅一个管道

另外一个执行:

publish channel-1 hello #另一个客户端写入内容,此时另一个监听cli收到内容

此外还可以使用subscribe channel-*来接收多个管道的信息,太方便了。

数据过期机制

TTL key #用于查看某个属性的过期时间,-1表示永不过期
Exists key #查看某个key是否存在
Expire key time #设置key的过期时间为time(秒)
Expireat key time #这个是设置key到了时间time就过期

事务

3. 相关代码开发

Java客户端使用相关示例代码:Github

这里woo-utils,我写了基于redis的两个工具:1)分布式事务管理,2)分布式访问次数控制器。

4. 多个数据库和备份还原

redis会每5分钟保存数据到启动redis目录下的dump.rdb文件。在redis-cli中执行save也可以手工保存到dump.rdb

关于还原dump.rdb文件,只需要在dump.rdb当前目录下,启动redis即可,dump.rdb最后移动到redis的安装目录下。

5. 可视化客户端

推荐RedisDesktopManager

6. 关于LevelDB

levelDB和redis的类型都是key-value高速存储,redis采用内存,而levelDB采用SSD固态硬盘,硬件成本比redis低,两者性能相差不大。levelDB是Google出品,近几年来的发展,redis排名远高于levelDB。根据http://db-engines.com/en/ranking,redis得分100+,而levelDB得分是2。https://github.com/ideawu/ssdb是对levelDB的封装,支持redis协议。

结论:如无特别需求,非常建议使用redis。除非自有硬件同时容量大到需要考虑硬件成本,可以再考虑ssdb.

7. 设计技巧

  1. key-value是一种极简的数据模型,当设计到一个key有明确的expire时间时,实际上,设计成key+时间,通过换key的方式,也可以实现类同expire time的效果,在某些场景下,性能更好。
文档更新时间: 2018-11-10 22:47   作者:nick