一、什么是redis
redis是一个key-value存储系统。和Memcached类似,它支持的数据类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。
二、redis常见应用
①全页面缓存
将多个请求需要重新渲染的页面,使用 redis 把其内容缓存起来,能大大的降低页面请求的延迟。
②排行榜
redis可以快速高效进行增加和减少操作,相比于使用数据库sql的方式,性能提升是非常显著的。
③session 存储
相比较于类似 memcache 的 session 存储,redis 具有持久化功能,若因为种种原因到时缓存重启后,之前的缓存数据不会受影响。
④队列
例如可以将email发送的地址或被消费者消费的队列缓存到redis队列中,可以大大提高读取效率。
⑤发布/订阅
redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息,redis 客户端可以订阅任意数量的频道。
三、redis安装与配置
①下载
首先在redis官网下载对应版本的redis,并放置在需要安装的目录,我在“/usr”目录下创建“dev”目录,并将“redis-4.0.9.tar.gz”放置在该目录。
redis下载地址:
https://redis.io/download
tar -zxvf redis-4.0.9.tar.gz
③编译
解压后进入redis的“src”目录,分别执行如下两条命令:
make
make install
注:若执行时出现“bash:make command not found”,则执行如下命令:
apt install build-essential
④开始配置服务脚本
编译完成之后,进入redis的“utils”目录下,有个“redis_init_script”,这个就是Sysvinit的服务脚本,找到该文件执行如下命令:
cp ./redis_init_script /etc/init.d/redisd
注:作为系统启动服务名(以d结尾表示是自启动服务,约定俗成,照做即可)
接下来修改redisd文件:
vim /etc/init.d/redisd
开始修改如下内容:
REDISPORT=6379
EXEC=/usr/local/redis/bin/redis-server
CLIEXEC=/usr/local/redis/bin/redis-cli
PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/etc/redis/${REDISPORT}.conf"
注:如上配置的路径根据自己redis放置位置进行配置。
⑤修改配置文件
redis目录下有个“redis.conf”文件,该文件为redis配置文件。复制并修改该文件。
mkdir /etc/redis
cp redis.conf /etc/redis/6379.conf
注:如上配置与④中的/etc/redis/${REDISPORT}.conf的配置对应
打开"6379.conf"开始按如下修改:
#设置后台运行
daemonize yes
#设置log文件路径
logfile /var/log/redis/redis-server.log
#设置持久化文件存放路径
dir /var/lib/redis
#设置访问密码
requirepass xxxxx
#设置访问规则
bind 0.0.0.0
注:如上配置的log文件和持久化文件目录是不存在的,需要自己进行创建。
mkdir /var/log/redis
mkdir /var/lib/redis
⑥使用update-rc.d注册服务
#设置服务脚本有执行权限
sudo chmod +x /etc/init.d/redisd
#注册服务
cd /etc/init.d/
sudo update-rc.d redisd defaults
注:如果出现“insserv: warning: script ‘redisd′ missing LSB tags and overrides”
,则在/etc/init.d/redisd中添加如下内容:
### BEGIN INIT INFO
# Provides: redis6379
# Required-Start: $local_fs $network
# Required-Stop: $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: redis6379
# Description: penavico redis 6379
### END INIT INFO
#启动Redis服务
service redisd start
#关闭服务
service redisd stop
#重启服务:
service redisd restart
注:使用上面设置的服务不一定能正常启动,通常可以使用如下命令启动,然后进去/var/log/redis/目录下查看日志来排除错误。
/etc/init.d/redisd start
三、Docker中安装redis
使用如下命令使用docker搜索redis镜像:
docker search redis
docker pull redis
docker run –itd –p 6379:6379 redis
② 以自己的配置文件启动
首先下载一个redis默认的配置文件redis.conf,按照自己的定义修改其中的配置。
修改完成之后放置在自定目录下,例如:/button/dev/redis/redis.conf
然后启动容器进行映射:
docker run -itd -p 6379:6379 -v /button/dev/redis:/data redis redis-server /data/redis.conf
命令解释:
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-p 配置端口,第一个为外部访问端口,第二个是内部端口
-v /button/dev/redis:/data 将本地redis目录挂载到容器的/data
查看docker中镜像的启动情况:
docker ps
docker logs -f 容器id
四、测试连接
可以下载redis桌面连接工具进行测试,下载地址如下:
https://redisdesktop.com/download
五、redis.conf配置部分说明
1、redis可以设置以守护进程的方式运行,修改配置项daemonize为yes启用守护进程
daemonize yes
2、当redis以守护进程方式运行时,可以通过配置pidfile指定pid写入的文件
pidfile /var/run/redis_6379.pid
3、设置redis监听端口,默认端口为6379
port 6379
4、绑定的主机地址,默认为127.0.0.1
bind 127.0.0.1
5、当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
timeout 300
6、指定日志记录级别,redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose
loglevel verbose
7、 日志记录方式,默认为标准输出。若配置redis为守护进程方式运行,则日志将会发送给/dev/null
logfile stdout
8、 设置数据库的数量,默认数据库为DB0,可以使用SELECT dbid命令在连接上指定数据库id,DB范围在0至(databases – 1)
databases 16
9、 在多长时间内,有多少次更新操作,将数据同步到数据文件,可以多个条件配合
save
Redis默认配置文件中提供了三个条件:
save 900 1 900秒(15分钟)内有1个更改
save 300 10 300秒(5分钟)内有10个更改
save 60 10000 60秒内有10000个更改
10、 指定存储至本地数据库时是否压缩数据,默认为yes,redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大
rdbcompression yes
11、指定本地数据库文件名,默认值为dump.rdb
dbfilename dump.rdb
12、 指定本地数据库存放目录
dir ./
13、设置当本机为slav服务时,设置master服务的IP地址及端口,在redis启动时,它会自动从master进行数据同步
slaveof
14、 当master服务设置了密码保护时,slav服务连接master的密码
masterauth
15、 设置Redis连接密码,如果配置了连接密码,客户端在连接redis时需要通过AUTH 命令提供密码,默认requirepass是注释的
requirepass foobared
16、设置同一时间最大客户端连接数,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,redis会关闭新的连接并向客户端返回“max number of clients reached”错误信息
maxclients 128
17、指定redis最大内存限制。redis在启动时会把数据加载到内存中,达到最大内存后,redis会先尝试清除已到期或即将到期的key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。redis新的vm机制,会把key存放内存,value会存放在swap区
maxmemory
18、指定是否在每次更新操作后进行日志记录,redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no
appendonly no
19、 指定更新日志文件名,默认为appendonly.aof
appendfilename appendonly.aof
20、指定更新日志条件,共有3个可选值:
no:表示等操作系统进行数据缓存同步到磁盘(快)
always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)
everysec:表示每秒同步一次(折衷,默认值)
appendfsync everysec