认识redis
- redis 是什么
- redis 是一款开源的非关系型数据库,我们可以得到他的源码。
redis 基于键值对进行存储服务 类似于java map、python dict
redis 支持多种数据类型
- redis 特性
- 轻量级 最初版本只有2万行代码
速度快 10W OPS(官方) C语言实现
持久化 拥有两种持久化方式、断电不丢失数据
支持多种语言
主从复制
高可用、分布式
- redis 使用场景
- 缓存服务器
消息队列
计数器
社交网络
- redis 安装
1、yum 安装
[root@redis1 ~]# yum install -y epel-release
[root@redis1 ~]# yum install -y redis
2、编译安装
# 部署redis 环境
[root@redis-master ~]# mkdir -p /data/application ---创建工作目录
[root@redis-master ~]# wget http://download.redis.io/releases/redis-4.0.9.tar.gz ---下载redis
[root@redis-master ~]# tar xzf redis-4.0.9.tar.gz -C /data/application/ ---解压
[root@redis-master ~]# cd /data/application/
[root@redis-master application]# mv redis-4.0.9/ redis
[root@redis-master application]# cd redis/
[root@redis-master redis]# yum install -y gcc make #安装编译工具
[root@redis-master redis]# make
注:如果报错请将刚才解压的安装包删除掉,再次重新解压并进行make安装即可。
[root@redis-master redis]# cp redis.conf redis.conf.bak
[root@redis-master redis]# vim redis.conf ---修改如下
bind 192.168.246.202 #只监听内网IP
daemonize yes #开启后台模式将on改为yes
timeout 300 #连接超时时间
port 6379 #端口号
dir /data/application/redis/data #本地数据库存放持久化数据的目录该目录-----需要存在
pidfile /var/run/redis_6379.pid #定义pid文件
logfile /var/log/redis.log #定义log文件
创建存放数据的目录
[root@redis-master redis]# mkdir /data/application/redis/data
配置redis为systemctl启动
[root@redis-master redis]# cd /lib/systemd/system
[root@redis-master system]# vim redis.service
[Unit]
Description=Redis
After=network.target
[Service]
ExecStart=/data/application/redis/src/redis-server /data/application/redis/redis.conf --daemonize no
ExecStop=/data/application/redis/src/redis-cli -h 127.0.0.1 -p 6379 shutdown
[Install]
WantedBy=multi-user.target
参数详解:
• [Unit] 表示这是基础信息
• Description 是描述
• After 是在那个服务后面启动,一般是网络服务启动后启动
• [Service] 表示这里是服务信息
• ExecStart 是启动服务的命令
• ExecStop 是停止服务的指令
• [Install] 表示这是是安装相关信息
• WantedBy 是以哪种方式启动:multi-user.target表明当系统以多用户方式(默认的运行级别)启动时,这个服务需要被自动运行。
启动服务:
[root@redis-master system]# systemctl daemon-reload
[root@redis-master system]# systemctl start redis.service
- redis 配置说明
[root@redis1 ~]# cat /etc/redis.conf |grep -v '^#'|grep -v '^$'
#绑定地址:
bind 127.0.0.1
#安全模式 当开启后,禁止公网访问redis。它启用的条件有两个,第一是没有使用bind,第二是没有设置访问密码。
protected-mode yes
#监听端口
port 6379
tcp-backlog 511
#超时时间,当客户端闲置多少秒后关闭连接,如果设置为0表示关闭该功能。
timeout 0
#单位是秒,表示将周期性的使用SO_KEEPALIVE检测客户端是否还处于健康状态,避免服务器一直阻塞,官方给出的建议值是300S
tcp-keepalive 300
#是否已守护进程启动
daemonize no
#可以通过upstart和systemd管理Redis守护进程,这个参数是和具体的操作系统相关的。
supervised no
#pid文件位置
pidfile /var/run/redis_6379.pid
#日志级别
loglevel notice
logfile /var/log/redis/redis.log
#数据库个数,可以通过select 切换 0-15
databases 16
#保存数据到磁盘。格式是:save <seconds> <changes> ,含义是在 seconds 秒之后至少有 changes个keys 发生改变则保存一次。
save 900 1
save 300 10
save 60 10000
#如果最后一次保存失败就停止写操作,如果监控得当,此处可以修改为no
stop-writes-on-bgsave-error yes
#是否在dump.rdb数据库的时候压缩字符串,默认设置为yes。如果你想节约一些cpu资源的话,可以把它设置为no,这样的话数据集就可能会比较大。
rdbcompression yes
#是否校验rdb文件的完整性
rdbchecksum yes
#rdb方式文件名
dbfilename dump.rdb
#备份文件位置
dir /var/lib/redis
#当一个slave与master失去联系时,或者复制正在进行的时候,slave应对请求的行为:1) 如果为 yes(默认值) ,slave 仍然会应答客户端请求,但返回的数据可能是过时,或者数据可能是空的在第一次同步的时候;2) 如果为 no ,在你执行除了 info 和 salveof 之外的其他命令时,slave 都将返回一个 "SYNC with master in progress" 的错误。
slave-serve-stale-data yes
#从库只读
slave-read-only yes
#主从数据复制是否使用无硬盘复制功能。无磁盘diskless方式适合磁盘读写速度慢但网络带宽非常高的环境。
repl-diskless-sync no
#无磁盘diskless方式适合磁盘读写速度慢但网络带宽非常高的环境。
repl-diskless-sync-delay 5
#slave端向server端发送pings的时间区间设置,默认为10秒
repl-disable-tcp-nodelay no
#哨兵机制选举的优先级,越小优先级越高,0为放弃选举,默认为100
slave-priority 100
#aof持久化配置,默认关闭
appendonly no
appendfilename "appendonly.aof"
#aof文件刷新的频率。有三种:
##1)no 依靠OS进行刷新,redis不主动刷新AOF,这样最快,但安全性就差。
##2) always 每提交一个修改命令都调用fsync刷新到AOF文件,非常非常慢,但也非常安全。
##3) everysec 每秒钟都调用fsync刷新到AOF文件,很快,但可能会丢失一秒以内的数据。
appendfsync everysec
#指定是否在后台aof文件rewrite期间调用fsync,默认为no,表示要调用fsync(无论后台是否有子进程在刷盘)。Redis在后台写RDB文件或重写AOF文件期间会存在大量磁盘IO,此时,在某些linux系统中,调用fsync可能会阻塞。
no-appendfsync-on-rewrite no
#aof 文件重写机制
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
#redis在启动时可以加载被截断的AOF文件,而不需要先执行 redis-check-aof 工具。
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes