主从复制Redis高可用集群(一)

分布式架构

优点:

  • 业务解耦
  • 系统模块化,可重用化
  • 提升系统并发量
  • 优化运维部署效率

缺点:

  • 架构复杂
  • 部署多个子系统复杂
  • 系统之间通信耗时
  • 新人融入团队缓慢
  • 调试复杂

设计原则:

  • 异步解耦
  • 幂等一致性
  • 拆分原则
  • 融合分布式中间件
  • 容错高可用

为什么加入redis

速度极快。官方给出的数据是 10 万次 ops 的读写,这主要归功于这些数据都存在于内存中。由于 Redis 是开源的,当你打开源代码,就会发现 Redis 都是用 C 语言写的,C 语言是最接近计算机语言的代码,而且只有区区 5 万行,保证了 Redis 的速度。同时一个 Redis 只是一个单线程,其真正的原因还是因为单线程在内存中是效率最高的。
特性二,持久化。Redis 的持久化可以保证将内存中的数据每隔一段时间就保存于磁盘中,重启的时候会再次加载到内存。持久化方式是 RDB 和 AOF。
特性三,支持多种数据结构。分别支持哈希、集合、BitMaps,还有位图(多用于活跃用户数等统计)、HyperLogLog(超小内存唯一值计数,由于只有 12K,是有一定误差范围的)、GEO(地理信息定位)。
特性四,支持多种编程语言。支持Java、PHP、Python、Ruby、Lua、Nodejs。
特性五,功能丰富。如发布订阅、Lua 脚本、事务、Pipeline(管道,即当指令到达一定数量后,客户端才会执行)。
特性六,简单。不依赖外部库、单线程、只有 23000 行 Code。
特性七,主从复制。主节点的数据做副本,这是做高可用的基石。
特性八,高可用和分布式。Redis-Sentinel(v2.8)支持高可用,Redis-Cluster(v3.0)支持分布式。
—摘自知乎 2021.3.27

Redis 优点

  • 为互联网和大数据而生
  • 水平(横向)扩展方便高效
  • 高性能读取(每秒达到10万次)
  • 高可用
  • 存数据,做缓存

NoSql常见的分类

  • 键值对数据库:Redis, Memcache
  • 列存储数据库:Hbase,Cassandra
  • 文档型数据库:MongoDB , CouchDB
  • 图形数据库: Neo4j, FlockDB

什么是分布式缓存

  • 提升读取速度性能
  • 分布式计算领域
  • 跨服务器缓存
  • 内存式缓存

什么是Redis

  • Nosql
  • 分布式缓存中间件
  • key-value 存储
  • 海量数据的存储访问
  • 数据存储在内存里,读取更快
  • 非关系型,分布式,开源,水平扩展

缓存方案对比-Ehcache

优点:

  • 基于java开发
  • 基于jvm缓存
  • 简单,轻巧,方便

缺点:

  • 集群不支持
  • 分布式不支持

缓存方案对比-Memcache

优点:

  • 简单的key-value存储
  • 内存使用率较高
  • 多核处理,多线程

缺点:

  • 无法容灾
  • 无法持久化

缓存方案对比-Redis

优点:

  • 丰富的数据结构
  • 持久化
  • 主从同步,故障转移
  • 内存数据库

缺点:

  • 单线程,单核驱动
  • 数据结构丰富

如何安装使用Redis

  • https://redis.io/下载最新的安装包,本次使用
  • 拷贝到Linux相关位置,解压redis-6.2.1.tar.gz
tar -zxvf redis-6.2.1.tar.gz
  • 安装前置依赖,进入解压目录,并进行安装
yum install gcc-c++
  • 进入目录进行安装
cd redis-6.2.1
make

图片

ps:当出现如上描述表示已经安装成功

  • 进行install
make install
  • 进行配置

此配置暂留

cd /redis-6.2.1/utils
cp redis_init_script /etc/init.d
  • 修改conf文件(以下指令是将redis移动并进行修改)
cd /redis-6.2.1
mkdir /usr/local/redis -p
cp redis.conf  /usr/local/redis
cd /usr/local/redis
vi redis.conf

图片

ps:此处修改为yes 表示是在后台运行

图片

ps:此处为redis的工作空间目录,当修改为特定的目录后,手动mkdir 创建目录

图片

ps:此处表示redis的调用为linux系统内调用,不能为外部调用,需要修改为0.0.0.0,这样就可以为外部调用,新版本的redis 按照以下配置。

# bind 127.0.0.1
protected-mode no

图片

ps: 此处设置redis的密码,设置好以后conf的文件已经修改完毕

接下来回到启动脚本位置

/etc/init.d/
vi redis_init_script

图片

此处的启动配置文件中,配置文件需要修改为我们设定好的配置文件,如下图所示

图片

  • 接下来启动redis
chmod 777 redis_init_script
./redis_init_script start
ps -ef | grep redis

ps:最后指令为验证redis是否启动

  • 设置自启动,随系统自启动(添加以下配置,并进行设置)

图片

chkconfig redis_init_script on
  • 如何停止redis(添加以下配置,并使用以下指令)

图片

./redis_init_script stop

redis的五大数据类型与16个库

  • String redis的数据类型按照key value的形式进行保存

常用指令:
set key value // 设定键值对值,当key重复时进行覆盖操作
get key // 根据key值获得value
setNX key value // 设定值时,当key存在时,不进行设值,不存在时进行设置,返回为数值的操作
keys * // 查看库中的所有数据
ttl key // 该key 存在的时间,为-1时永久保存,-2为过期,过期时查询不到
EXPIRE key 时间 或者 set key value ex 时间 //设置数据的过期时间
APPEND key value //对已存在的key的value进行拼接
STRLEN key //查询value的长度
incr key //对该key的value进行累加
decr key // 对该key的value进行递减
INCRBY key 数值 //对该key的value进行数值增加
DECRBY key 数值 // 对该key的value进行数值减少
type key //查看该key的valur类型
getrange key 0 -1 //获取该key的value的部分字段
setrange key 1 特定值 //替换从下标开始的值
mset key1 value1 key2 value2 //设置多个key value
mget key1 key2 // 获取多个key的value值
msetnx //同mset只不过不能有任何一个key重复
select 数字(默认0-15,redis默认有16个库) // 选择index的库,每个库都是独立的
flushdb 或者 flushall //清除库中的所有数据

  • hash 一般保存一个对象,表示形式为:key为对象名称, 值里面也是键值对的形式

hset key valueKey valueValue //设置对象,并设置对象的一个属性
hget key valueKey // 获取对象中属性的值
hmset key valueKey1 valueValue1 valueKey2 valueValue2 //设置对象,并设置对象的多个属性
hmget key valueKey1 valueKey2 //获取对象中多个属性的值。
hgetall key // 获取该对象的所有值
hlen key //查看该对象中的属性数量
hkeys key //查看对象中的所有属性key
hvals key //查看对象中的所有属性value值
HINCRBY key valueKey 增长数值 // 给对象的特定属性值进行增长
HINCRBYfloat key valueKey 增长数值(小数) // 给对象的特定属性值进行小数增长
HEXISTS key // 查看对象的valueKey是否存在,存在返回1,不存在返回0
HDEL key // *******此方法无法直接删除
HDEL key valueKey // 删除该对象的某个字段值

  • list 列表,数组 元素可重复 ,表示形式为:key为对象名称,值为数组 list1 [a,b,c,d]

lpush key value1 value2 //创建一个数组,并放值, 从左边开始放值
lrange key 0 -1 //查看列表的数据元素
rpush key value1 value2 //创建一个数组,并放值,从右边开始放
lpop key // 从左边开始拿掉一个元素
rpop key // 从右边开始拿掉一个元素
llen key // key的数组长度
lindex key index //查看下标下的元素
lset ley index value //修改下标对象的值
linsert key before value newValue //在特定的value的位置之前插入一个值
linsert key after value newValue //在特定的value的位置之后插入一个值
lrem key index value // 根据index删除对应下标value的值
ltrim key startIndex endIndex //截取对应下标范围之内的元素
del key //删除key所对应的数组

  • set 元素不可重复 ,表示形式为:key为对象名称,值为数组 set1[a,b,c,d]

sadd key value1 value2 //放置set元素,不重复
SMEMBERS key //查看存放的元素
scard key // 查看元素数量
sismember key value //查看当前元素是否存在,存在返回1,不存在返回0
srem set value // 删除value的值
spop key //拿出一个值
spop key 2 // 拿出两个值
SRANDMEMBER key 3 //随机获取三个值
smove key1 key2 value //将key1的值,移到key2里面
sdiff key1 key2 //找到key1与key2里面,key1不同的元素
sinter key1 key2 //找到key1里面与key2里面,相同的元素
sunion set1 set2 //并集,找到set1与set2里面相同的元素

  • zset sorted set 有序的set,会根据分数去进行排序

zadd key nx value1 nx value2 // 在zset里面放入元素,nx为分数 value为值
zrange key 0 -1 // 查询key所在的zset的value值
zrange key 0 -1 withscores // 查询key所在的zset的value值,并显示分数
zrank key value // 查询key下的value值的下标
zscore key value //查询key下的value的数值权重
zcard key //查看元素数量
zcount key startNumber endNumber // 查询范围数值权重的数量
zrangebyscore key startNumber endNumber withscores // 查询范围值权重之间的详细信息,包含等于
zrangebyscore key (startNumber (endNumber withscores // 查询范围值权重之外的详细信息,不包含等于
zrangebyscore key startNumber endNumber limit 1 2// 查询范围值权重之间的详细信息,包含等于,并且是范围之内的分页信息
zrem key value // 删除key下的某个元素

SpringBoot整合redis

  1. 引入redis的整合包

图片

  1. 引入redis的相关配置
spring:
  redis:
  database: 0         #使用默认16个库中的哪一个库
  host: 172.21.9.161  #redis的连接url
  port: 6379   #端口号
  password : 123456 #密码

Redis的发布(pub)与订阅(sub)

订阅方使用以下指令,此时处于监听模式,一直在监听

SUBSCRIBE food1 food2      // 订阅了美食1 美食二

批量订阅方使用以下指令,此时处于监听模式,一直在监听

PSUBSCRIBE food*     // 订阅了所有food开始的事件

发布方指令

PUBLISH food1 fish    //发布方发布消息,订阅方就会收到消息

图片

结果如上图所示

redis可以做消息队列,但是不介意做消息通知,设计的单一性,使得redis专人做专事的特性

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值