Redis的介绍:
1. Redis是Remote Dictornary Server的缩写,是一个key value存储系统.
2. Redis提供了丰富的数据结构,包括Strings,Lists,Hashes,Sets和Ordered Sets以及Hashes.包括对这些数据结构的操作支持.
3. Redis可以代替Memcache,并且解决了断电后数据完全丢失的问题.
Redis的优点:
1.性能极高,支持10W每秒的读写频率.
2.丰富的数据类型及对应的操作.
3.Redis的操作都是原子性的,同时还支持对几个操作全并后的原子性执行,也即支持事务.
4.丰富的特性,还支持publish/subscribe,key过期等特性.
Redis的安装:
登入官网http://redis.io,可以下载Redis。
下载完后解压然后就可以看到一系列的文件。其中
redis-server.exe文件用来启动redis服务器 带一个参数配置文件名来启动服务器。如
redis-server.exe redis.conf
启动后
执行另一个redis-cli.exe的文件来开启客户端
redis-cli.exe -h 127.0.0.1 -p 6379 -a password
参数h为指定的redis服务器的ip 参数p是指定的端口号 参数-a则是通过密码验证,如果服务器设置了密码登入鉴权的话,默认不需要。
如果英文好的话,就请一定要看一下redis.conf里的配置说明,那里的每个参数都有明确的说明用法和用途。对性能调优有很大的帮助。
Redis常用的五种数据类型
1 String
2 hash
3 list
4 set
5 sort set
这些数据类型有对应的操作命令,详情可以到官网学习http://redis.io。
Redis内存优化:
设置redis.conf配置文件中下面2项:
hash-max-zipmap-entries 64
hash-max-zipmap-value 512
hash-max-zipmap-entries 含义是当value这个Map内部不超过多少个成员时会采用线性紧凑格式存储,默认是64,即value内部有64
个以下的成员就是使用线性紧凑存储,超过该值自动转成真正的HashMap.
hash-max-zipmap-value 含义是当value这个Map内部的每个成员值长度不超过多少字节就会采用线性紧
凑存储来节省空间.
如何设置好这两个参数 需要从时间和空间两个维度去衡量,在数据量不大且不影响性能的情况下可以把这两个参数值调大,可以节省不少的内存空间,
因为线性存储在查询和操作的时间复杂度为O(n)而HashMap的时间复杂度为O(1)。
Redis事务:
MULTI
, EXEC
, DISCARD
and WATCH
are the foundation of transactions in Redis.
涉及事务的命令主要有 MULTI,EXEC,DISCARD,WATCH
MULTI:事务声明命令,接下来的命令将会放到一个队列里,作为一个原子来操作。
EXEC:事务执行命令,把队列中的命令都执行
DISCARD:取消事务不执行事务声明后到该命令之间的所有命令
WATCH:给事务加锁的命令,这个是个乐观锁,就行Hibernate中的version的用法一样,对应的值改变了则,该事物就不能执行。
当一个事务执行一半时,客户端挂了,那么怎么办,这个就要回到之前说的redis.conf,配置一个参数appendonly yes 那么在事务执行之前所有的命令会追加到一个aof的文件中,使用工具 redis-check-aof
来修复这个问题
Redis数据恢复:
1. 如果配置了AOF,重启时加载AOF文件恢复数据.
2. 如果配置了RBD和AOF,启动时只加载AOF文件恢复数据.
3.如果只配置了RBD启动动时将加载dump文件恢复数据.
Redis主从复制:
slave的配置只需在redis.conf配置中配置参数slaveof
slaveof IP port
用途读写分离,数据备份,灾难恢复等
目前较好的方案是:Mater关闭Save功能,关
闭AOF日志功能,以求达到性能最佳. Slave开启
Save并开启AOF日志功能,并开启bgrewriteaof
功能,不对外提供服务,这样Slave的负载总体上
会一直略高于Master负载,但Master性能达到最
好.