1、官方性能介绍:set达到11万次/S,get达到8.1万次/S。当数据库中的数据达到G级时,写入速度下降明显 。
2、官网:http://redis.io/
中国区网站(非常好,完美翻译了官方的文档):http://www.redis.cn/topics/cluster-spec.html
3、特别知识(非常重要):
1)、redis是但单线程模式,使用大缓存快速CPU,而不是多核,推荐intel CPU,AMD的CPU性能只有intel CPU 的一半。
2)、VM虚拟机上运行redis比在物理机器上慢一倍。
安装包下载地址:下载
3、安装:
#tar -zxvf redis-2.8.19.tar.gz
#cd redis-2.8.19
#make
#make install
注意事项:1)运行redis前,在/etc/sysctl.conf中添加vm.overcommit_memory=1,否则会出现警告。
2)如果内存紧张,需要设定内容参数 echo 1 >/proc/sys/vm/overcommit_memory
意思如下:0代表内核将检查是否有足够内存给应用进程使用,如果有则内存申请通过,否则内存申请失败,并将错误信息报告给应用。
1表示内核允许分配所有的物理内存,而不管当前内存状态如何。
2表示内核允许分配超过所有物理内存和交换空间总和的内存。
3)echo never > /sys/kernel/mm/transparent_hugepage/enabled
4、redis的相关命令在src目录下.
启动redis cd/src 执行 ./redis-server
5、redis主从复制,如下是需要在生产环境上修改的,其他参数可以不看: vi redis.conf
说明:redis主从模式:1、链式主从(一主多从):Master-slaver-slaver-salver,但如果第一个slave出现宕机重启,首先从master 接收 数据恢复脚本,
这个是阻塞的,如果主库数据几TB的情况恢复过程得花上一段时间,在这个过程中其他的slave就无法和主库同步了
2、网状主从(多主多从):Master-salver-slaver(Master-slaver-slaver)-slaver,比如A是B的Master,但B又是C的Master。。。
1)、redis Master配置,不能直接拷贝过去覆盖,最好逐个查看修改
#redis运行在后台,需要修改为yes,默认为no
daemonize yes
#请自行修改
port 6379
#redis只接受来自该ip的请求,如果不设置,则接受所有请求,可以有多个空格分割如:192.168.62.155 192.168.62.153
bind 192.168.62.155
#客户端连接超时时间,单位秒,若客户端在这段时间没有发出任何指定,连接关闭,默认为0
timeout 300
logfile "./log/redis.log"
#最大内存设置,如果redis使用超过此内存,redis首先会删除设置了expire的key,且不管是否真实过期,如果删除完了还是内存不够,则仅支持读。
maxmemory 5gb
#最大内存清理策略,如果超过内存,则采用lru算法删除key
maxmemory-policy volatile-lru
maxmemory-samples 3
#appendfsync no
#Mater主密码,从需要配置密码才能连接
requirepass hezhixiong
#默认有16个库,通过客户端命令select 0可以选择第一个数据库,编号为0-15
databases 16
2)、redis Slave配置,将Master的配置拷贝过去覆盖并修改
#从redis绑定的IP地址
bind 192.168.62.155
#Master的IP和端口
slaveof 192.168.62.155 6379
#Master的密码
masterauth hezhixiong
3)、在根目录下建立log目录 ,在log下建立redis.log文件。
可通过taif -f redis.log查看日志
6、启动和客户端命令
一、主从redis启动:
分别启动Master、salver服务器。
#src/redis-server /soft/redis-2.8.19/redis.conf
如下日志显示:redis主从服务器建立成功。
[25438] 16 Mar 21:50:33.751 * Slave 192.168.62.154:6379 asks for synchronization
[25438] 16 Mar 21:50:33.751 * Full resync requested by slave 192.168.62.154:6379
[25438] 16 Mar 21:50:33.751 * Starting BGSAVE for SYNC with target: disk
[25438] 16 Mar 21:50:33.751 * Background saving started by pid 25474
[25474] 16 Mar 21:50:33.754 * DB saved on disk
[25474] 16 Mar 21:50:33.754 * RDB: 0 MB of memory used by copy-on-write
[25438] 16 Mar 21:50:33.772 * Background saving terminated with success
[25438] 16 Mar 21:50:33.773 * Synchronization with slave 192.168.62.154:6379 succeeded
二、客户端命令连接:
#-a 后面是密码
redis-cli -h 192.168.62.154 -p 6379 -a hezhixiong
三、客户端命令设值和取值
set user.1.name zhangsan
get user.1.name
#获取键的数量
dbsize
flushdb:删除当前数据库中的所有key
flushdb:删除所有数据库中的所有key
select 0:选择第1个数据库
EXPIRE mykey 10 :给键mykey设置过期时间为10秒
TTL mykey:将返回10秒,意思是mykey的过期时间是10秒。如果为0或者负数,代表没有设置过期时间。
6、性能测试:
redis服务端部署完毕后,可以通过模拟器判断服务器的性能指标。
1、如上命令在src目下自行,表示模拟500个客户端,进行1万次查询,得出的结论是29585.80 requests per second。即每秒3万次查询。
#cd src
#redis-benchmark -h 192.168.62.155 -p 6379 -c 500 -n 10000
2、没有-c,默认50个客户端,进行10万次插入
#redis-benchmark -h 192.168.62.155 -p 6379 -n 100000 -q script load "redis.call('set','foo','bar')"
3、【推荐使用本语句进行性能测试】没有-c,默认50个客户端,随机产生100万个key-value连续进行200万次get/set/等请求的性能
redis-benchmark -h 192.168.62.155 -p 6379 -r 1000000 -n 2000000 -t get,set,lpush,lpop -P 16 -q
//删除当前数据库中的所有Key
flushdb
//删除所有数据库中的key
flushall
//下面的命令指定数据序号为0,即默认数据库
redis-cli -n 0 keys "*" | xargs redis-cli -n 0 del
如果要指定 Redis 数据库访问密码,使用下面的命令
redis-cli -a password -n 0 keys "*" | xargs redis-cli -a password -n 0 del
7、遗留需要继续研究的:
1)、redis的集群
2)、网状主从
3)、发布订阅,可以替换远程用