Redis集群

来源:互联网 发布:淘宝客服售前话术模板 编辑:程序博客网 时间:2024/06/05 11:00

Redis集群有三种方式

1、master-slave,优点:配置简单;缺点:master节点宕机,则所有slave节点不可用。

2、sentinel,优点:可靠,若master节点宕机,则从slave节点中选举一个作为master,可以实现主备切换;缺点:扩展性差,没有实现真正的集群,即无法水平扩展。

3、redis-cluster,优点:可靠且可扩展;缺点:配置和操作较繁琐,每次增加或删除一个节点都需要重新分配slot。

Redis 下载

官网 https://redis.io/download

 

下载稳定版本 redis-3.2.9.tar.gz

 

Redis 编译安装

解压后进入主目录进行编译

make

若出现 fatal error: jemalloc/jemalloc.h: No such file or directory 编译错误,修改编译命令为

make MALLOC=libc

编译完成后,进入src 目录,执行make insall,完成redis安装

数据类型

String


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 获取字符串长度

HashJava中的HashMap


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

List


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 删除countvalue

ltrim key index1 index2 截取范围

lpop key 从头部弹出元素

rpop key 从尾部弹出元素

rpoplpush 从尾部弹出元素从头部加入元素

lindex key 返回index位置的元素

llen key 返回元素个数

Set(无序集合)


sadd key value 添加key value

smembers key 返回所有元素

srem key 删除key

spop  key 随机弹出元素

sdiff key1 key2 取差集

sdiffstore key3 key1 key2 key1key2的差集存储到key3

sinter 取交集

sinterstore key3 key1 key2 key1key2的交集存储到key3

sunion 取并集

sunionstore key3 key1 key2 key1key2的并集存储到key3

smove key1 key2 value key1value移动到key2

scard key 返回元素个数

sismember key value 判断元素是否存在

srandmember 随机返回一个元素

ZSet(有序集合)


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 选择数据库,默认0015

move key 0 1     key0数据库移动到1数据库

randomkey 随机返回key

rename key 重命名key

info redis信息

dbsize 数据库key的数量

config get * 返回配置

flushdb 清空数据库

flushall 清空所有

Redis事务

redis-cli

multi 开启事务

exec 提交事务

事务无回滚,只关注顺序

Redis持久化

snapshotting 默认方式

save 900 1

save 300 10

save 60 10000 60秒内有10000key修改,则发起快照持久

 

appendonly file aof

appendonly yes

appendfsync always

appendfsync everysec

appendfsync no

Redis发布订阅

subscribe mychannel

publish mychannel msg

Redis密码(一般情况不需要使用密码)

redis.conf

requirepass password

Redis 主从复制

redis.conf

slaveof  master ip port

sentinel.conf

Redis 哨兵进程

sentinel.conf

sentinel monitor mymaster ip port n master名称、IPPORT、认为master宕机的确认次数)

sentinel down-after-milliseconds mymaster 5000(默认每隔一秒检测一次,超过5000ms则视为宕机)

sentinel failover-timeout mymaster 900000

sentinel parallel-syncs mymaster  n主从切换时,nslave同时同步新master的数据

启动哨兵进程

redis-sentinel   sentinel.conf

Redis集群

每个节点的数据是独立存储的

创建 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 每个masternslave

测试集群

./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

Redis实现TomcatSession共享

https://github.com/zhangwei5095/TomcatRedisClusterEnabledSessionManager