博客参考http://blog.sina.com.cn/s/blog_a1e9c7910102vl64.htmlhttp://blog.csdn.net/freebird_lb/article/details/7733970http://www.cnblogs.com/stephen-liu74/category/354125.htmlhttp://blog.csdn.net/lifetragedy/article/details/50628820redis概述Redis全称:REmoteDIctionaryServer(远程字典服务器)。完全开源免费,用C语言编写,遵守BCD协议。它是一个高性能(键/值)分布式内存数据库。它是一个在内存上运行并支持持久化的NoSQL数据库。它是最流行的NoSql数据库之一,也被称为数据结构服务器。Redis和其他key-value缓存产品有以下三个特点1)Redis支持数据持久化,可以将内存中的数据保存在磁盘上,重启时可以再次加载使用2)Redis不仅支持简单的key-value类型data,同时还提供list、set、zset、hash等数据结构存储3)Redis支持数据备份,即主从模式下的数据备份下载http://redis.io/http://www.redis.cn/与memcached相比,Rdeis有以下优势:1.Redis原生支持更多的数据类型。2、Redis有持久化机制,可以周期性地将内存中的数据持久化到硬盘中。3、Redis支持主从模式的数据备份。4.性能。Redis的作者说在单核上的性能是平均的,在单条数据不大的情况下Redis好一些。为什么这么说,原因是Redis是单线程运行的。因为是单线程运行,所以和Memcached的多线程相比,整体性能肯定会低一些。因为是单线程,IO是序列化的,网络IO和内存IO,所以当单条数据量过大时,需要等待一个命令的所有IO完成,才能执行后续命令,所以性能会受到影响。conf配置文件####GENERAL####daemonizeyes#将pidfile作为守护进程运行"/var/run/redis/redis.pid"#pidfileport6379#porttcp-backlog511#tcpbacklogqueuelength,backlog长度是未建立的tcp连接和已建立的tcp连接之和,等待进程从队列中调用已建立的连接。bind192.168.1.3010.0.0.1#监听地址,可以指定多个地址,0.0.0.0代表本机所有地址。timeout5000#客户端连接超时时间,单位毫秒。loglevelnotice#日志的记录级别。logfile"/var/log/redis/redis.log"#日志存放位置。databases16#redis启动的数据库(命名空间)个数可以在cli中选择#来切换。##SNAPSHOTTING##save9001#RDB持久化策略,也就是说在RDB方式中,数据是定时存入磁盘的策略。save30010#这里的三个save依次代表,900秒内,如果1个key改变,则写入磁盘一次;save6010000#300秒内,如果有10个键变化,则写入磁盘一次;如果10,000个键在几秒钟内更改,则在60秒内写入磁盘一次。stop-writes-on-bgsave-erroryes#bgsave时,有写操作时会不会报错,即bgsave时不允许写入数据。rdbcompressionyes#rdb文件可以压缩。rdbchecksumyes#rdb文件校验和启用。dbfilename"dump.rdb"#db的名字为dump.rdbdir"/redis/data1"#RDB数据目录,指定非默认目录时,需要修改目录的属主和组为属主你当前的redis进程组,一般是redis。#APPENDONLYMODE#appendonlyyes#开启AOF持久化模式。appendfilename"appendonly.aof"#AOF文件名。appendfsynceverysec#AOF持久化策略,一共有三个值,always表示只要发生数据操作就保存或重写AOF;everysec表示每秒一次;没有办法关闭;no-appendfsync-on-rewriteyes#重写时将当前AOF日志存储在内存中,防止AOF额外操作重写导致数据写入阻塞,提高性能但增加数据风险。auto-aof-rewrite-percentage100#每当AOF日志是上次重写大小的两倍时,自动触发重写操作。auto-aof-rewrite-min-size64mb#自动触发重写的最小AOF日志大小为64MB,以防止AOF数据量较小时频繁进行重写操作。aof-load-truncatedyes#当redis崩溃并通过AOF恢复时,不会执行最后一条因中断导致问题的语句。####LIMITS####maxclients10000#限制最大并发用户连接数为10000。#maxmemory#限制最大内存使用。###SECURITY###requirepass#设置验证密码。如果设置了,则需要在登录远程cli、主从配置、sentinel时指定相应的参数为passwd。主从复制原理和架构实现只需要在从节点的配置文件中修改如下配置:###REPLICATION###slaveof192.168.1.296379#Master节点地址,。#masterauth#如果设置了访问认证需要设置此项。slave-server-stale-datayes#当slave与master断开连接或slave处于同步状态时,如果slave收到允许响应的请求,no表示返回错误。slave-read-onlyyes#slave节点是否只读。slave-priority100#设置本节点的优先级,是否先同步。redis的高可用方案-sentinel只需要在sentinel节点的配置文件中修改如下配置:vim/etc/redis-sentinel.confport26379#sentinelannounce-ip1.2.3.4#默认监听在0.0.0.0所以这里可以发表评论。dir"/tmp"sentinelmonitormymaster192.168.1.2963791#sentinelmoitor#设置master节点的*名称*和位置,多少quorum表示只有哨兵节点同意才能上线。sentineldown-after-millisecondsmymaster5000#如果节点在5000毫秒内联系不上,我们就认为该节点下线了。sentinelfailover-timeoutmymaster60000#设置目标节点转移主节点的超时时间。sentinelauth-pass#如果redis节点开启了auth,这里也要设置密码。sentinel的一些命令:sentinelmaster#查看本复制集群的master节点信息。sentinelslaves#查看本次复制集群的slave节点信息。sentinelfailover#切换指定节点为主节点。Redis服务器信息redis_version:2.8.19#Redis服务器版本redis_git_sha1:00000000#GitSHA1redis_git_dirty:0#Gitdirtyflags:Linux3.2.0-23-genericx86_64#Redis服务器主机操作系统arch_bits:64#服务器系统架构(32-bitor64-bit)multiplexing_api:epoll#Redis使用的事件处理机制gcc_version:4.6.3#编译Redis时使用的GCC版本process_id:7573#Redis服务进程PIDrun_id:f1c233c4194cba88616c5bfff2d97fc3074865c1#Redis服务器随机标识(用于Sentinel和cluster)tcp_port:6379#Redis服务监听TCP端口uptime_in_seconds:7976#Redis服务器启动后,经过的秒数uptime_in_days:0#Redis服务器启动后,经过的天数。这里不到1天,所以显示为0hz:10#Redis以每秒10次的频率调用内部函数执行很多后台任务lru_clock:1133773#自增时钟,以分钟为单位,用于LRU管理配置文件:/数据/redis_6379/redis.conf#redis.conf配置文件所在路径Clients记录客户信息connected_clients:2#连接的客户端数量(不包括从服务器连接的客户端)client_longest_output_list:0#当前客户端连接数,最长的输出listclient_biggest_input_buf:0#当前连接的客户端,最大的输入缓存blocked_clients:0#等待阻塞命令(BLOP、BRPOP、BRPOPLPUSH)的客户端数量Memory记录服务器内存信息used_memory:894216#Redisallocator分配MemoryforRedis例如,Redis添加存储数据时,可以直接从allocator分配给它的内存中取所需的内存,即直接从used_memory中取。Redis分配器分配给Redis的内存取自操作系统分配给Redis的内存(以字节为单位)used_memory_human:873.26K#以人类可读的格式显示Redis消耗的内存used_memory_rss:2691072#OSallocationMemoryfor雷迪斯。即Redis占用的内存大小。这个值与top命令输出的RES列的结果相同。RES列的结果表示Redis进程实际使用的物理内存(以字节为单位)used_memory_peak:914160#Redis的峰值内存消耗(以字节为单位)used_memory_peak_human:892.73K#以人类可读的格式返回Redis的峰值内存消耗used_memory_lua:35840#Lua引擎使用的内存大小(以字节为单位)mem_fragmentation_ratio:3.01#used_memory_rss和used_memory的比例mem_allocator:jemalloc-3.6.0#编译时指定,Redis使用的内存分配器。可以是libc、jemalloc或tcmalloc小知识理想情况下,used_memory_rss的值应该只比used_memory略高。当rss>used,且两个值相差较大时,说明存在(内部或外部)内存碎片。从mem_fragmentation_ratio的值可以看出内存碎片的比例;当used>rss时,表示Redis的部分内存被操作系统换出到swap空间。在这种情况下,操作可能会造成明显的延迟。持久化记录RDB持久化和AOF持久化信息loading:0#记录服务器是否正在加载持久化文件的标志值rdb_changes_since_last_save:0#自从上次成功创建持久化文件后改变了多少键值rdb_bgsave_in_progress:0#记录服务器是否正在创建RDB文件的标志值rdb_last_save_time:1427189587#上次成功创建RDB文件的UNIX时间戳rdb_last_bgsave_status:ok#记录上次RDB文件创建成功还是失败的标志值rdb_last_bgsave_time_sec:0#记录上次创建RDB文件所用的秒数rdb_current_bgsave_time_sec:-1#如果服务器正在创建RDB文件,这个值记录当前RDB创建操作用了多长时间(以秒为单位)aof_enabled:0#A记录AOF是否处于打开状态的flag值aof_rewrite_in_progress:0#记录服务器是否正在创建AOF文件的flag值aof_rewrite_scheduled:0#记录RDB文件后是否需要进行定时AOF重写的flag值创建写操作aof_last_rewrite_time_sec:-1#记录上一次AOF重写操作的耗时aof_current_rewrite_time_sec:-1#如果服务器正在执行AOF重写操作,那么这个值记录了当前重写操作所花费的时间(以秒为单位)aof_last_bgrewrite_status:ok#标志值,记录上次重写AOF文件的结果是成功还是失败。开启AOF持久化功能,在Persistence部分添加如下字段:aof_current_size:14301#当前AOF文件的大小aof_base_size:14301#当服务器启动或上次AOF重写后,AOF文件的大小aof_pending_rewrite:0#一个标志值,记录是否有AOF重写操作等待创建RDB文件然后执行aof_buffer_length:0#AOF缓冲区的大小aof_rewrite_buffer_length:0#AOF重写缓冲区的大小aof_pending_bio_fsync:0#后台I/0队列中等待执行的fsync个数aof_delayed_fsync:0#执行的个数delayedfsyncsStats记录统计信息total_connections_received:8#服务器接受的连接请求数total_commands_processed:10673#服务器执行的命令数instantaneous_ops_per_sec:0#服务器每秒执行的命令数rejected_connections:0#Rejectedbecauseofthemaximumnumberofclientsconnectionrequestsexpired_keys:0#由于过期自动删除的数据库key数evicted_keys:0#由于最大内存容量限制而被逐出的key数keyspace_hits:1#数据库键搜索成功次数keyspace_misses:0#搜索数据库键失败次数pubsub_channels:0#当前订阅的频道号pubsub_patterns:0#当前订阅的模式号latest_fork_usec:159#最后一次fork()操作耗时(毫秒)Replication记录了主从复制角色的信息:master#在主从复制中,扮演的角色如果没有主从复制,就是单点,它的作用也是masterconnected_slaves:1#有slave连接slave0:ip=14.17.119.220,port=6379,state=online,offset=718446,lag=0#slaveIP,port,status等如果当前服务器是slave服务器,那么这部分还会增加如下字段:master_host:master服务器的IP地址master_port:master服务器的端口号monitorsmaster_link_status:副本连接的当前状态,up表示连接正常,down表示连接断开与从服务器同步如果正在进行同步操作,那么这部分还在将添加以下字段:与主服务器通信。如果主从服务器之间的连接断开,这部分仍然会增加以下字段:master_link_down_since_seconds:主从服务器连接断开了多少秒。cpu部分记录CPU计算统计,包含以下字段:used_cpu_sys:75.46#Redis服务器消耗的系统CPUused_cpu_user:90.12#Redis服务器消耗用户CPUused_cpu_sys_children:0.00#Redis后台进程消耗的系统CPUused_cpu_user_children:0.00#Redis后台进程消耗的用户CPUKeyspace部分记录了数据库相关的统计信息,比如数据库中key的数量,以及已经从数据库中删除的过期key的数量。对于每个数据库,本节都会添加一行信息,格式如下:db0:keys=25,expires=0,avg_ttl=0#数据库0有25个key,已经删除的过期key个数为0