一、redis配置文件详解
/etc/redis/6379.conf !配置文件位置
prot 6379 !端口
bind 127.0.0.1 !ip地址
tcp-backlog 511 !tcp连接总数
timeout 0 !连接超时时间
tcp-keepalive 300 !长连接时间
daemonize yes !守护进程方式运行
logfile /var/log/redis_6379.log !日志文件
pidfile /var/run/redis_6379.pid !pid文件
maxclients 10000 !并发连接数
dir /var/lib/redis/6379 !数据库目录
databases 16 !数据库数量
maxmemory-policy noeviction !最大内存策略(默认写满时报错)
maxmemory <bytes> !最大内存
maxmemory-samples 5 !选取模板数据的个数(针对lru和ttl策略)意思就是说,谁快过期的参照物
requirepass foobared !设置密码为foobared,
dbfilename "dump.rdb" !RDB文件名,停止服务强制存盘
save "" !禁用RDB
save 900 1 !900秒内且有一次修改
save 300 10 !300秒内且有10次修改
save 60 10000 !60秒内且有10000修改
appendonly no !禁用aof
appendfilename "appendonly.aof" !aof文件名
appendfsync always !有新操作立即记录
appendfsync everysec !每秒记录一次
appendfsync no !从不记录
...... !其他配置请查看本博客其他文章
注:改变端口、密码的使用方法(或者修改/etc/init.d/redis_6379脚本)
/etc/init.d/redis_6370 start #起服务
redis-cli -h 192.168.10.10 -p 6380 #连接
192.168.10.10:6379>auth foobared #连接后密码认证
redis-cli -h 192.168.10.10 -p 6380 -a foobared #连接时密码认证
redis-cli -h 192.168.10.10 -p 6380 -a foobared shutdown #关闭
二、内存管理
2.1 内存清除策略
vlatile-lru !最近最少使用(针对已设置过期时间的key
allkeys-lru !删除最少使用的key(不管是否设置ttl)
volatile-random !在设置了过期的key里随机删除
allkeys-random !随机删除(不管是否设置ttl)
volatile-ttl !移除最近过期的key
noeviction !不删除,写满时报错(默认)
3.调优后单机并发测试(建议调优前使用ab测试对比)
[root@localhost ~]# vim /etc/redis/6379.conf
...
maxclients 12000 #并发数调至12000
...
"修改系统允许打开文件数"
[root@localhost ~]# ulimit -n 102400
"ab工具进行测试:模拟n:请求数,c:客户端数,总共11500个请求"
[root@localhost ~]# ab -n11500 -c11500 http://localhost/redis.php
附redis.php文件
<?php
$redis = new redis();
$redis->connect('127.0.0.1',6379);
$redis->set('hello','redis');
echo $redis->get('hello');
?>
三、持久化
持久化方式–RDB、AOF
3.1 RDB(Redis DataBase)
按照指定时间间隔,将内存中的数据集快照写入硬盘,术语称为snapshot。恢复时,将快照文件直接读入内存
RDB优点:
高性能的持久化实现----创建一个子进程来执行持久化,先将数据写入临时文件,持久化结束后,再用这个临时文件替换上场持久化好的文件;过程中主进程不做任何IO操作。
比较适合大规模数据恢复,且对数据完整性要求不是非常高的场合
RDB缺点:
意外宕机时,最后一次持久化的数据会丢失。
3.2 AOF(只做追加操作的文件,Append Only FIle)
类似于mysql服务的binlog日志文件,
- 记录redis服务所有写操作
- 不断的将新的写操作,追加到文件的末尾
- 使用cat命令可以查看文件的内容
AOF优点:
可以灵活设置持久化方式,同步持久化appendfsync always或异步持久化 appendfsync everysec,出现意外宕机时,仅可能丢失一秒的数据。AOF缺点:
文件通常大于rdb方式,执行fsync策略时的速度可能比rdb方式慢
3.3 其他
若同时启用两种持久化,会先加载aof文件;一旦启用AOF,之前未启用aof时的rdb数据将被清除(因为启用aof后,aof文件为空,redis读取aof后写入rdb文件,所以数据就被清除了)
如何恢复一个有问题的aof文件?
使用自带命令恢复到最后一次的正确状态
src/redis-check-aof --fix appendonly.aof
四 Redis入门使用
4.0 常用命令
命令 | set(mset) | get(mget) | del | move | flushall | type | ttl | select | save | bgsave |
作用 | 新增 | 获取 | 删除 | 移动 | 清空所有 | 类型 | 生命周期 | 切库 | 阻塞存硬盘 | 非阻塞存硬盘 |
4.1 类型
4.1.1 字符串类型
set key value [EX seconds|PX milliseconds] [NX|XX]
EX 生命周期(单位秒)
PX 声明周期(单位毫秒)
NX 键不存时创建成功
XX 键存在时覆盖成功(键不存在不操作)
set phone 13859013714 EX 30 XX
同时存取多个键值
>mset name jack age 18
>mget name age
1)jack
2)18
4.1.2 List列表
Reids的list是一个字符队列、先进后出(最后存的元素为表头)
存,表头追加
>lpush book c++ python go java php # [php java go python c++]
存,表尾追加
>rpush ruby # [php java go python c++ ruby]
取
>lrange book 0 2 # 从表头起,第0位读到第2位
1)"php"
2)"java"
3)"go"
>lrange book 0 -1 # 从表头读到尾
>larnge book 0 -2 # 从表头起,倒数第2位
1)"php"
2)"java"
3)"go"
4)"python" # 第二位
索引
>lindex book 0 # 从表头起,取第0位
"php"
>lindex book 2 # 从表头起,取倒数第2位
"python"
>lset book 0 ruby # 将第0位的值为ruby
删除表头元素
>lpop book
"ruby"
删除表尾元素
>rpop book
"c++"
长度
>llen
4.1.3 Hash表
Reids Hash 是一个string类型的field和value的映射表,一个key可对多个filed,一个filed对应一个value,将对象存储为hash类型,较于将每个字段莻string类型更节省内存
也就是说:一个变量存储多个key-value
例如:“jack”:{ “age”:18, “class”:“one” }
存取键值
>hset jack age 18
>hmset jack age 18 class one
> hmget jack age class
1) "18"
2) "one"
取所有key
>hkeys jack
1) "age"
2) "class"
取所有value
>hvals jack
1) "age"
2) "class"
取所有key-values
>hgetall jack
1) "age"
2) "18"
3) "class"
4) "one"
删除指定key
>hdel jack age class