Redis集群有三种方式
1、master-slave,优点:配置简单;缺点:master节点宕机,则所有slave节点不可用。
2、sentinel,优点:可靠,若master节点宕机,则从slave节点中选举一个作为master,可以实现主备切换;缺点:扩展性差,没有实现真正的集群,即无法水平扩展。
3、redis-cluster,优点:可靠且可扩展;缺点:配置和操作较繁琐,每次增加或删除一个节点都需要重新分配slot。
官网 https://redis.io/download
下载稳定版本 redis-3.2.9.tar.gz
解压后进入主目录进行编译
make
若出现 fatal error: jemalloc/jemalloc.h: No such file or directory 编译错误,修改编译命令为
make MALLOC=libc
编译完成后,进入src 目录,执行make insall,完成redis安装
set key value 设置 key value
get key 通过 key 获取 value
del key 删除 key
setnx key value 如果key 不存在则设置 value
setex key time value 设置有效时间为 time 秒的 key value
setrange key index replacement 从index开始替换字符串
mset key1 value1 key2 value2 ... 设置多对 key value
mget key1 key2 获取多个value
getset key newValue 返回oldValue,设置newValue
incr key 值递增
decr key 值递减
incrby key n 值增加n
decrby key n 值减少n
append key str 字符串拼接
strlen key 获取字符串长度
hset name key value
hmset name key1 value1 key2 value2 ...
hmget name key1 key2 key3 ...
hincrby name key n
hdecrby name key n
hexists name key
hlen name
hdel name key
hkeys
hvals
hgetall
lpush key value 从头部加入 value (栈)
rpush key value 从尾部加入 value (队列)
linsert key before value1 value2 插入
linsert key after value1 value2 插入
lrange 0 -1 获取所有value
lset index value 更新index位置的value
lrem key count value 删除count个value
ltrim key index1 index2 截取范围
lpop key 从头部弹出元素
rpop key 从尾部弹出元素
rpoplpush 从尾部弹出元素从头部加入元素
lindex key 返回index位置的元素
llen key 返回元素个数
sadd key value 添加key value
smembers key 返回所有元素
srem key 删除key
spop key 随机弹出元素
sdiff key1 key2 取差集
sdiffstore key3 key1 key2 将key1和key2的差集存储到key3中
sinter 取交集
sinterstore key3 key1 key2 将key1和key2的交集存储到key3中
sunion 取并集
sunionstore key3 key1 key2 将key1和key2的并集存储到key3中
smove key1 key2 value 将key1的value移动到key2
scard key 返回元素个数
sismember key value 判断元素是否存在
srandmember 随机返回一个元素
zadd key seq value 添加 key value,序号seq
zrange key 0 -1 withscores 返回所有元素,按score排序
zrem key value 删除元素
zincrby key n 增加n
zrangebyscore key index1 index2 返回范围内的元素,按score排序
zremrangebyrank rank1 rank2 删除rank范围内的元素
zremrangebyscore score1 score2 删除score范围内的元素
zrank 返回升序排序后的索引
zrevrank 返回降序排序后的索引
zcard 返回元素个数
zcount score1 score2 返回score区间内的元素个数
keys * 返回匹配的所有key
exists key 是否存在key
expire key 设置key过期时间
persist key 取消key过期时间
ttl key 查看key过期时间
select 选择数据库,默认0(0到15)
move key 0 1 把key从0数据库移动到1数据库
randomkey 随机返回key
rename key 重命名key
info redis信息
dbsize 数据库key的数量
config get * 返回配置
flushdb 清空数据库
flushall 清空所有
redis-cli
multi 开启事务
exec 提交事务
事务无回滚,只关注顺序
snapshotting 默认方式
save 900 1
save 300 10
save 60 10000 每60秒内有10000个key修改,则发起快照持久
appendonly file aof
appendonly yes
appendfsync always
appendfsync everysec
appendfsync no
subscribe mychannel
publish mychannel msg
redis.conf
requirepass password
redis.conf
slaveof master ip port
sentinel.conf
sentinel.conf
sentinel monitor mymaster ip port n (master名称、IP、PORT、认为master宕机的确认次数)
sentinel down-after-milliseconds mymaster 5000(默认每隔一秒检测一次,超过5000ms则视为宕机)
sentinel failover-timeout mymaster 900000
sentinel parallel-syncs mymaster n主从切换时,n个slave同时同步新master的数据
启动哨兵进程
redis-sentinel sentinel.conf
每个节点的数据是独立存储的
创建 redis-cluster 文件夹
在redis-cluster目录中创建N 个文件夹,命名为1000*
将redis.conf拷贝到创建的N个文件夹下
redis.conf
daemonize yes
port 1000*
bind 192.168.1.*
dir /usr/local/redis-cluster/1000*/(每个节点的数据保存到不同的目录下)
cluster-enabled yes
cluster-config-file nodes-1000*.conf
cluster-node-timeout 5000
appendonly yes
appendfsync always
安装ruby
yum install -y ruby
yum install -y rubygems
gem install redis
启动所有redis实例
ps -el | grep redis
进入 redis/src 目录,执行 redis-trib.rb
./redis-trib.rb create --replicas 1 192.168.1.*:1000*
--replicas n 每个master有n个slave
测试集群
./redis-cli -c -h ip -p port
cluster nodes
添加主节点
准备配置文件
./redis-trib.rb add-node 192.168.1.*:1000* 任意一个集群中的IP:PORT
重新分区
./redis-trib.rb reshard 任意一个集群中的 IP:PORT
添加从节点
./redis-cli -c -h 192.168.1.* -p 1000*
cluster replicate master_id
移除节点
移除slave节点
./redis-trib.rb del-node IP:PORT node_id
移除master节点
归还slot
./redis-trib.rb reshard IP:PORT
https://github.com/zhangwei5095/TomcatRedisClusterEnabledSessionManager