redis单机版安装
第一步:
把redis的安装包拷贝到/root/tools/的目录下
解压redis
tar -zxvf redis-3.0.5.tar.gz
编译
make
安装
make install PREFIX=/root/training/redis
第二步:
配置环境变量
编译安装后的redis文件中只有一个bin文件夹
我们需要创建一个conf目录
mkdir conf
拷贝一份配置文件到conf目录下
cp redis-3.0.5/redis.conf /root/training/redis/conf/
修改redis.conf
vim redis.conf
设置daemonize为yes(后台运行)
第三步启动单机版的redis
到redis/bin的目录下执行
./redis-server.sh ../conf/redis.conf
**redis课存储的数据类型:**
字符串
链表(list)
hash
无序集合(set)
有序集合(zset)
**Redis的命令脚本:**
redis-benchmark redis的批量操作工具,也是redis的性能测试工具0
redis-check-dump 检查rdb日志是否正常的工具
redis-check-aof 检查aof的日志是否正常的工具
redis-cli redis客户端
redis-server redis的启动命令
redis-sentinal redis的哨兵
**单节点redis配置:**
deamonized no 默认是窗口启动(费守护进程启动),如果想守护进程把no改为yes
port 6379 默认端口是6379
单节点只需修改这俩个就可以了
启动单节点
在bin目录下执行 ./redis-server ../conf/redis.conf
使用命令脚本redis-cli可以在命令行客户端下测试redis
./redis-cli
**redis的事务和锁:**
示例:
set ticket 1
set tom 1000
set lily 100
tom买票
为了保证事务的原子操作我们开启了redis的multi功能
tom客户端
multi
decr ticket
decrby tom 100 但是执行这里其实redis把所有的操作都放入了队列里边并没有实际自行,在此处用户lily 进行了买票
lily客户端
multi
decr ticket
decrby lily 100
exec
这个时候tom客户端再进行操作
exec
这个得到的结果就是ticket变成了-1,这并不是我们想要看到的结果,所以我们使用
redis的锁的功能watch
watch :redis监控某个值得功能,它是乐观的认为这个值不会改变,并不会真正的
锁住这个变量,它是一个乐观锁
set ticket 1
set tom 1000
set lily 1000
tom客户端
watch ticket
multi
decr ticket
decrby tom
lily客户端
multi
decr ticket
decrby lily 100
exce
这时lily客户端可以正常操作,然后再执行tom客户端的提交任务
tom 客户端
exec
这个时候返回时nil,表示并没有操作成功
**redis的消息:**
redis的消息只支持topic功能,也就是只支持取法
使用publish 发布消息 subscribe订阅消息
publish channel msg
发布命令 消息通道 消息内容
subscribe channel
订阅命令 订阅通道
**Redis的持久化**
redis的持久化支持俩种方式:rdb 和aof
我们可以利用redis持久化文件做数据迁移
1、RDB:默认
(*)本质:就是一个快照,指:每隔一段时间,将内存中的数据dump到文件上。
(*)生成的策略:
秒 个数
save 900 1 在15分钟内,如果有1个value发生了变化,就执行save命令(执行RDB)
save 300 10 在5分钟内,如果有10个value发生了变化,就执行save命令(执行RDB)
save 60 10000 在60秒内,如果有1w个value发生了变化,就执行save命令(执行RDB)
注意:By default Redis will stop accepting writes if RDB snapshots are enabled
执行RDB的时候,会阻塞当前工作进程,影响性能的。命令:bgsave
(*)参数
stop-writes-on-bgsave-error yes 当执行RDB的时候出现了错误,停止写入新的数据
(*)缺点:在两次RDB之间,数据可能会丢失。
优点:恢复的速度快
2、AOF:append only file:日志
(*)缺点:速度没有RDB快
优点:能够完全恢复数据
(*)默认关闭,需要配置
appendonly no 改为yes
(*)优先使用AOF:原因就是AOF的日志是完整的
(*)参数配置:
生成策略
# appendfsync always
appendfsync everysec
# appendfsync no
aof日志的重写:当aof日志记录到一定程度的时候,系统会自动的重新把redis中的全部数据重新的写入aof日志当中
当执行AOF重写的时候,禁止写入新的AOF日志
no-appendfsync-on-rewrite no
Demo:AOF日志重写
bin/redis-benchmark -n 100000
触发AOF重写的策略
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
下面是对这俩种aof日志重写策略的原文介绍
**# Automatic rewrite of the append only file.
# Redis is able to automatically rewrite the log file implicitly calling
# BGREWRITEAOF when the AOF log size grows by the specified percentage.
#
# This is how it works: Redis remembers the size of the AOF file after the
# latest rewrite (if no rewrite has happened since the restart, the size of
# the AOF at startup is used).
#
# This base size is compared to the current size. If the current size is
# bigger than the specified percentage, the rewrite is triggered. Also
# you need to specify a minimal size for the AOF file to be rewritten, this
# is useful to avoid rewriting the AOF file even if the percentage increase
# is reached but it is still pretty small.**
redis可以在AOF日志增长到指定的百分率的时候调用BGREWRITEAOF实现自动日志的重写
它是怎么工作的:Redis会记录最近一次重写日志的大小(如果从redis开启时候没有发生重写操作,那么redis开启时AOF日志大
小将作为这个值)。这个基础大小和当前aof日志大小做比较,当aof日志的大小大于指定的比率时,重写操作将被触发。同时你需要指定最小重写触发的aof文件大小。这个对于避免当比例增长已经达到但是依然日志文件还是很低的问题是非常有用的。