缓存加速----Redis安装配置与优化

---------------Redis安装配置与优化
一:安装配置
1.下载redis的安装包
[root@localhost ~]# mount.cifs //192.168.1.150/qq-Download /mnt
Password for root@//192.168.1.150/qq-Download:  ******
[root@localhost ~]# cd /mnt
2.通过yum工具,安装编译工具
[root@localhost ~]# yum install gcc gcc-c++ make -y 
3.解压redis软件包
tar xzvf redis-5.0.7.tar.gz -C /opt
4.编译且安装
cd /opt/redis-5.0.7/
make
make PREFIX=/usr/local/redis install
5.开启服务,设置各类文件
cd /opt/redis-5.0.7/utils/
./install_server.sh 
Welcome to the redis service installer
This script will help you easily set up a running redis server
 
Please select the redis port for this instance: [6379] 
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf]     //定义主配置文件
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log]     //定义日志文件
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379] //数据文件
Selected default - /var/lib/redis/6379
Please select the redis executable path [] /usr/local/redis/bin/redis-server //可执行文件路径,需要自行定义
Selected config:
Port           : 6379
Config file    : /etc/redis/6379.conf
Log file       : /var/log/redis_6379.log
Data dir       : /var/lib/redis/6379
Executable     : /usr/local/redis/bin/redis-server
Cli Executable : /usr/local/redis/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!
[root@localhost redis]# netstat -natp | grep 6379
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      6475/redis-server 1 
6.创建软链接,便于服务控制
ln -s /usr/local/redis/bin/* /usr/local/bin/
7.进入redis数据库
[root@localhost init.d]# vim /etc/redis/6379.conf 
bind 127.0.0.1 192.168.100.140    						//绑定本机地址
[root@redis init.d]# ls
functions  netconsole  network  README  redis_6379
//redis_6379  服务管理脚本
[root@localhost init.d]# service redis_6379 restart     //重启服务
Stopping ...
Redis stopped
Starting Redis server...
[root@localhost ~]# redis-cli -h 192.168.100.140 -p 6379    //-h指定地址,-p指定端口
192.168.100.140:6379> keys *
(empty list or set)
192.168.100.140:6379> set nannan man					"存放数据"
OK
192.168.100.140:6379> keys *
1) "nannan"
192.168.100.140:6379> get nannan						"获取数据"
"man"
192.168.100.140:6379> del lpf
(integer) 1								状态码返回1说明前面命令正确执行
										状态码返回0说明前面命令错误执行

//服务的三大法宝
1.配置文件
2.服务管理脚本 service systemctl 管理的脚本,一般要手撕
3.命令脚本 自动生成

###key相关命令

keys:获取符合规则的键值列表
exists:判断键值是否存在
del:删除当前数据库的指定key
type:获取key对应的value值类型
rename(覆盖)/ renamenx(不覆盖)∶对已有的key进行
重命名
dbsize:查看当前数据库中key的数目

######Redis数据库常用命令

redis-benchmark测试工具
-h:指定服务器主机名
-p:指定服务器端口
-c:指定并发连接数
-n:指定请求数
-d:以字节的形式指定SET/GET值的数据大小
-q:强制退出Redis,仅显示query/sec值

redis-benchmark测试工具
//向IP地址为192.168.100.140、端口为6379的Redis服务器
发送100个并发连接与100000个请求测试性能
====== GET ======
  10000 requests completed in 0.12 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1
====== SET ======
  10000 requests completed in 0.12 seconds				//时间需要0.12s
  100 parallel clients
  3 bytes payload
  keep alive: 1
......
[root@localhost ~]# /usr/local/redis/bin/redis-benchmark -h 192.168.100.140 -p 6379 -c 100 -n 10000
//测试存取大小为100字节的数据包的性能
[root@localhost ~]# /usr/local/redis/bin/redis-benchmark -h 192.168.100.140 -p 6379 -q -d 100
LPUSH (needed to benchmark LRANGE): 86805.56 requests per second
LRANGE_100 (first 100 elements): 51519.84 requests per second
LRANGE_300 (first 300 elements): 24443.90 requests per second
LRANGE_500 (first 450 elements): 18294.91 requests per second
LRANGE_600 (first 600 elements): 13495.28 requests per second
MSET (10 keys): 89365.51 requests per second
//设置hash结构			推荐这种方式
192.168.100.140:6379> hset person name zhangsan
192.168.100.140:6379> hset person age 18
192.168.100.140:6379> hset person score 88
192.168.100.140:6379> keys *
192.168.100.140:6379> hset people name lisi
(integer) 1
192.168.100.140:6379> keys *
1) "nannan"
2) "myset:__rand_int__"
3) "people"
4) "person"
5) "mylist"							//456是默认
6) "key:__rand_int__"
7) "counter:__rand_int__"


//设置过期时间
192.168.100.140:6379> set name lisi
oK
192.168.100.140:6379> expire name 20			"时间是秒"
(integer)1


三.redis配置文件的分析

-------------------------RDB持久化------------------------------------

[root@localhost ~]# vim /etc/redis/6379.conf
 
 #RDB核心规则配置 save <指定时间间隔> <执行指定次数更新操作>,满足条件就将内存中的数据同步到硬盘
中。官方出厂配置默认是 900秒内有1个更改,300秒内有10个更改以及60秒内有10000个更改,则将内存中的
数据快照写入磁盘。
若不想用RDB方案,可以把 save "" 的注释打开,下面三个注释
#   save ""
save 900 1					"这三项默认设置"
save 300 10
save 60 10000
dbfilename dump.rdb				RDB文件名称
dir /var/lib/redis/6379			RDB文件路径
rdbcompression yes				是否进行压缩
 
#当RDB持久化出现错误后,是否依然进行继续进行工作,yes:不能进行工作,no:可以继续进行工作,可以通过info中的rdb_last_bgsave_status了解RDB持久化是否有错误
stop-writes-on-bgsave-error yes
 
#配置存储至本地数据库时是否压缩数据,默认为yes。Redis采用LZF压缩方式,但占用了一点CPU的时间。若关闭该选项,但会导致数据库文件变的巨大。建议开启。
rdbcompression yes
 
#是否校验rdb文件;从rdb格式的第五个版本开始,在rdb文件的末尾会带上CRC64的校验和。这跟有利于文件的容错性,但是在保存rdb文件的时候,会有大概10%的性能损耗,所以如果你追求高性能,可以关闭该配置
rdbchecksum yes
 
#指定本地数据库文件名,一般采用默认的dump.rdb
dbfilename dump.rdb
 
#数据目录,数据库会写入这个目录。rdb、aof文件也会写在这个目录
dir /var/lib/redis/6379

------------------AOF持久化---------------------------

[root@localhost ~]# vim /etc/redis/6379.conf
 
 
#Redis 默认不开启。它的出现是为了弥补RDB的不足(数据的不一致性),所以它采用日志的形式来记录每个写操作,并追加到文件中。Redis 重启的会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作默认redis使用的是rdb方式持久化,这种方式在许多应用中已经足够用了。但是redis如果中途宕机,会导致可能有几分钟的数据丢失,根据save来策略进行持久化,Append Only File是另一种持久化方式,可以提供更好的持久化特性。Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件,每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件。若开启rdb则将no改为yes
appendonly no
 
指定本地数据库文件名,默认值为 appendonly.aof
appendfilename "appendonly.aof"
 
 
#aof持久化策略的配置
#no表示不执行fsync,由操作系统保证数据同步到磁盘,速度最快
	always表示每次写入都执行fsync,以保证数据同步到磁盘
	everysec表示每秒执行一次fsync,可能会导致丢失这1s数据
# appendfsync always
appendfsync everysec		"开头不能有空格"
# appendfsync no
 
# 在aof重写或者写入rdb文件的时候,会执行大量IO,此时对于everysec和always的aof模式来说,执行
fsync会造成阻塞过长时间,no-appendfsync-on-rewrite字段设置为默认设置为no。如果对延迟要求很高的
应用,这个字段可以设置为yes,否则还是设置为no,这样对持久化特性来说这是更安全的选择。设置为yes表
示rewrite期间对新写操作不fsync,暂时存在内存中,等rewrite完成后再写入,默认为no,建议yes。Linux的
默认fsync策略是30秒。可能丢失30秒数据
no-appendfsync-on-rewrite no
 
#aof自动重写配置。当目前aof文件大小超过上一次重写的aof文件大小的百分之多少进行重写,即当aof文件
增长到一定大小的时候Redis能够调用bgrewriteaof对日志文件进行重写。当前AOF文件大小是上次日志重写得
到AOF文件大小的二倍(设置为100)时,自动启动新的日志重写过程
auto-aof-rewrite-percentage 100
 
#设置允许重写的最小aof文件大小,避免了达到约定百分比但尺寸仍然很小的情况还要重写
auto-aof-rewrite-min-size 64mb
 
#aof文件可能在尾部是不完整的,当redis启动的时候,aof文件的数据被载入内存。重启可能发生在redis所
在的主机操作系统宕机后,尤其在ext4文件系统没有加上data=ordered选项(redis宕机或者异常终止不会造
成尾部不完整现象。)出现这种现象,可以选择让redis退出,或者导入尽可能多的数据。如果选择的是yes,
当截断的aof文件被导入的时候,会自动发布一个log给客户端然后load。如果是no,用户必须手动redis-
check-aof修复AOF文件才可以
aof-load-truncated yes
 
#加载redis时,可以识别AOF文件以“redis”开头。
#字符串并加载带前缀的RDB文件,然后继续加载AOF尾巴
aof-use-rdb-preamble yes