一、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大量连接处于ESTABLISHED状态 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