持久化
快照:snapshotting
save 900 1 900秒内发生一次<br>save 300 10 300秒内发生10次<br>save 60 10000 60秒内发生10000<br>dbfilename dump.rdb 快照名<br>dir ./ 快照路径
手动快照
登陆状态下:bgsave
未登录状态下:./redis-cli bgsave
save
追加:appendonly
appendonly yes 开启<br>appendfilename "appendonly.aof" 文件名<br># appendfsync always 每次操作都存储<br>appendfsync everysec 每秒存储一次<br># appendfsync no <br>
主从数据
http://doc.redisfans.com/topic/replication.html
在从服务器中配置<br>slaveof 192.168.1.1 6379<br>masterauth <password><br>
配置
配置主服务器地址:slaveof 192.168.1.1 6379
从服务器默认只读,设置从服务器只读:slave-read-only yes
如果主服务器设置了密码,那么需要配置密码来访问:masterauth <password>
从服务器至少达到N个才让从服务器执行写操作:min-slaves-to-write N
从服务器延迟低于M秒才向从服务器发送写命令:min-slaves-max-lag M
命令
设置主服务器地址:SLAVEOF 192.168.1.1 10086
设置只读: CONFIG SET
设置主服务器访问密码:config set masterauth <password>
安全
redis默认没有密码,可以通过requirepass设置密码
设置redis.conf文件中的requirepass pass 设置密码
获取密码:CONFIG get requirepass
设置密码:CONFIG set requirepass pass
redis设置密码时
redis可以连接,但是不能操作需要输入密码
AUTH password
连接时输入密码
./redis-cli 127.0.0.1 -p 6379 -a pass
List
BLPOP key[key ...]
删除,并获取第一个元素
BRPOP key[key ...]
删除,并获取最后一个元素
BRPOPLPUSH source destination
弹出一个列表值,将他插入到另一个列表中
LINDEX key index
通过索引获取一个元素
LINSERT key BEFORE|AFTER pivot value
在列表中的另一个元素之前或之后插入元素
LPUSH key value[value]
从队列的左边入队一个或多个元素
LPUSHX key value
当队列存在时,从队左边入队一个元素
LRANGE key start stop
获取指定的元素
LREM key count value
从列表中删除元素
LSET key index value
根据下标设置队列元素值
RPOPLPUSH source destination
删除队列最后一个元素,最加到另一个队列
RPUSH key value[value ...]
从队列右边入队一个元素
RPUSHX key value
从队列右边入队一个元素,仅队列存在时有效
简介
特性
存储结构
字符串(String)
哈希/散列/字典(Hash)
列表(List)
集合(Set)
有序集合(sorted set)
内存存储与持久化
redis数据存储在内存中,速度比硬盘快,在程序退出时可将数据持久化到硬盘中防止丢失
功能丰富
数据库(database)
缓存(cache)
消息中间件(message broker)
官方文档:http://doc.redisfans.com/
server
flushall
强制清空所有数据库中的所有key
CLIENT LIST
所有连接到服务器的客户端信息和统计数据
CLIENT KILL
关闭地址为 ip:port 的客户端
CLIENT KILL 127.0.0.1:43501
PING
向 Redis 服务器发送一个 PING ,如果服务器运作正常的话,会返回一个 PONG
ECHO
打印一个特定的信息 message ,测试时使用
哨兵 sentinel
sentinel用于监视master是否正常在线,如果master挂掉了,sentinel会让slave顶上去
开3个Sentinel,或者说开奇数个,Sentinel的原理就是一直监视着master是否在线,<br> 如果挂掉,sentinel的集群会选举中一个零头的sentinel,然后由领头的sentinel<br> 执行slaveof命令,让slave作为master,然后sentinel集群继续监视着新的master,<br> 老的master还是会一直监控着,如果启动了,那么老的master会作为新master的slave。
sentinel判断master下线的两种标准
主观下线。 sentinel发现master没有在指定时间返回信息,这种情况被认为<br> 主线下线。 【指定时间:这个时间是我们设置的】
客观下线。 sentinel询问sentinel的集群,看一下其他的sentinel是否也标记<br> 这master是否下线,如果标记sentinel下线的个数达到一个阀值,<br> sentinel会将master标记为主线下线,这个时候能会选取领头的<br> sentinel。由领头的sentinel选取master下面的一个slave1去作为<br> 新的master。
配置
你要监视的主服务器的ip地址,以及sentinel标记客观下线的阀值
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel认为“主线下线”的一个阀值
sentinel down-after-milliseconds mymaster 3000
故障恢复期间可以同时slave的个数
sentinel parallel-syncs mymaster 1
故障恢复允许的最大时长
sentinel failover-timeout mymaster 180000
默认会有一个实例ID,注释掉每次启动会自动分配sentinel myid
如果redis设置了密码需要配置密码,不支持主从密码不一致:sentinel auth-pass mymaster pass
集群cluster
简介
一个 Redis 集群包含 16384 个哈希槽(hash slot),通过CRC16(key) 计算键 key 属于哪台服务器,redis集群最多有16384台机器
集群中的每个节点都有 1 个至 N 个复制品(replica), 其中一个复制品为主节点(master), 而其余的 N-1 个复制品为从节点(slave),主节点宕机后其他服务器会选举出其中一个slave为新的主节点,否正整个集群将停止运作,因为没有对应的服务器承接相应的哈希槽
Redis 集群不保证数据的强一致性
网络分裂
假设集群包含 A 、 B 、 C 、 A1 、 B1 、 C1 六个节点, 其中 A 、B 、C 为主节点, 而 A1 、B1 、C1 分别为三个主节点的从节点, 另外还有一个客户端 Z1 。<br>假设集群中发生网络分裂, 那么集群可能会分裂为两方, 大多数(majority)的一方包含节点 A 、C 、A1 、B1 和 C1 , 而少数(minority)的一方则包含节点 B 和客户端 Z1 。<br>在网络分裂期间, 主节点 B 仍然会接受 Z1 发送的写命令:<br>如果网络分裂出现的时间很短, 那么集群会继续正常运行;<br>但是, 如果网络分裂出现的时间足够长, 使得大多数一方将从节点 B1 设置为新的主节点, 并使用 B1 来代替原来的主节点 B , 那么 Z1 发送给主节点 B 的写命令将丢失。<br>注意, 在网络分裂出现期间, 客户端 Z1 可以向主节点 B 发送写命令的最大时间是有限制的, 这一时间限制称为节点超时时间(node timeout), 是 Redis 集群的一个重要的配置选项:
集群至少包含三个主节点
集群只有数据库 0,而且也不支持 SELECT 命令
创建集群
环境
需要执行redis-trib.rb,必须要有ruby环境<br>需要redis-*.gem
集群启动必须保证redis为空,清除appendonly.aof,dump.rdb,和 cluster-config-file配置的文件
配置
daemonize yes
如果有密码需要配置密码
vi /usr/local/rvm/gems/ruby-2.4.4/gems/redis-4.0.1/lib/redis/client.rb
:password => "root", <br>
redis全部启动后,启动集群
./redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006
set
SADD key member[member]
添加一个或多个元素到集合中
SUBTER key [key]
获取集合交集
SINTERSTORE destination key [key ...]
获取集合交集并存储在一个结果集上
SMEMBERS key
获取集合中所有元素
SMOVE source destination member
移动集合中的一个元素到另一个集合
SPOP key [count]
删除集合里的元素
SRANDMEMBER key[count]
随机获取一个元素
SREM key member [member]
集合里删除一个或多个元素
SUNION key[key...]
添加多个set元素
SUNIONSTORE DESTINATION KEY[KEY ...]
合并set元素,并将结果存入新的set