当前位置:首页 » 文件管理 » redis缓存golang

redis缓存golang

发布时间: 2023-10-11 01:02:24

1. 怎么实现redis的数据库缓存(redis实现缓存的流程)

大致为两种措施:

一、脚本同步:

1、自己写脚本将数据库数据写入到redis/memcached。

2、这就涉及到实时数据变更的问题(mysqlrowbinlog的实时分析),binlog增量订阅Alibaba的canal,以及缓存层数据丢失/失效后的数据同步恢复问题。

二、纯贺业务层实现:

1、先读取nosql缓存层,没有数据再读取mysql层,并写入数据到nosql。

2、nosql层做好多节点分布式(一致性hash),以及节点失效后替代方案(多层hash寻找相邻替代节点),和数据震荡恢复了。

redis实现数据库缓存的分析:

对于变化频率非常快的数据来说,如果还选择传统的静态缓存方式(Memocached、FileSystem等)展示数据,可能在缓存的存取上会有很大的开销则裤差,并不能很好的满足需要,而Redis这样基于内存的NoSQL数据库,就非常适合担任实时数据的容器。

但是往往又有数据可靠性的需求,采用MySQL作为数据存储,不会因为内存问题而引起数据丢失,同时也可以利用关系数据库的特性实现很多功能。所以就会很自然的想到是否可以采用MySQL作为数据存孙皮储引擎,Redis则作为Cache。

MySQL到Redis数据复制方案,无论MySQL还是Redis,自身都带有数据同步的机制,比较常用的MySQL的Master/Slave模式,就是由Slave端分析Master的binlog来实现的,这样的数据复制其实还是一个异步过程,只不过当服务器都在同一内网时,异步的延迟几乎可以忽略。那么理论上也可用同样方式,分析MySQL的binlog文件并将数据插入Redis。

因此这里选择了一种开发成本更加低廉的方式,借用已经比较成熟的MySQLUDF,将MySQL数据首先放入Gearman中,然后通过一个自己编写的PHPGearmanWorker,将数据同步到Redis。比分析binlog的方式增加了不少流程,但是实现成本更低,更容易操作。

2. 缓存-redis 三种模式搭建和运行原理

标签: redis 缓存 主从 哨兵 集群

本文简单的介绍redis三种模式在linux的安装部署和数据存储的总结,希望可以相互交流相互提升。

对于Centos7在安装redis之前需要进行一些常用工具的安装:

关闭防火墙

正式安装redis

在redis进行maketest时候会出现一系列的异常,有如下解决方案:

用redis-server启动一下redis,做一些实验没什么意义。

要把redis作为一个系统的daemon进程去运行的,每次系统启动,redis进程一起启动,操作不走如下:

RDB和AOF是redis的一种数据持久化的机制。 持久化 是为了避免系统在发生灾难性的系统故障时导致的系统数据丢失。我们一般会将数据存放在本地磁盘,还会定期的将数据上传云服务器
RDB 是redis的snapshotting,通过redis.conf中的save配置进行设置,如 save 60 1000:

AOF 是以appendonly方式进行数据的储存的,开启AOF模式后,所有存进redis内存的数据都会进入os cache中,然后默认1秒执行一次fsync写入追加到appendonly.aof文件中。一般我们配置redis.conf中的一下指令:

AOF和RDB模式我们一般在生产环境都会打开,一般而言,redis服务挂掉后进行重启会优先家在aof中的文件。

当启动一个slave node的时候,它会发送一个PSYNC命令给master node,如果这是slave node重新连接master node,那么master node仅仅会复制给slave部分缺少的数据;否则如果是slave node第一次连接master node,那么会触发一次full resynchronization;
开始full resynchronization的时候,master会启动一个后台线程,开始生成一份RDB快照文件,同时还会将从客户端收到的所有写命令缓存在内存中。RDB文件生成完毕之后,master会将这个RDB发送给slave,slave会先写入本地磁盘,然后再从本地磁盘加载到内存中。然后master会将内存中缓存的写命令发送给slave,slave也会同步这些数据。
slave node如果跟master node有网络故障,断开了连接,会自动重连。master如果发现有多个slave node都来重新连接,仅仅会启动一个rdb save操作,用一份数据服务所有slave node。

从redis 2.8开始,就支持主从复制的断点续传,如果主从复制过程中,网络连接断掉了,那么可以接着上次复制的地方,继续复制下去,而不是从头开始复制一份。

master node会在内存中常见一个backlog,master和slave都会保存一个replica offset还有一个master id,offset就是保存在backlog中的。如果master和slave网络连接断掉了,slave会让master从上次的replica offset开始继续复制,但是如果没有找到对应的offset,那么就会执行一次resynchronization。

master在内存中直接创建rdb,然后发送给slave,不会在自己本地落地磁盘了,可以有如下配置:

slave不会过期key,只会等待master过期key。如果master过期了一个key,或者通过LRU淘汰了一个key,那么会模拟一条del命令发送给slave。

在redis.conf配置文件中,上面的参数代表至少需要3个slaves节点与master节点进行连接,并且master和每个slave的数据同步延迟不能超过10秒。一旦上面的设定没有匹配上,则master不在提供相应的服务。

sdown达成的条件很简单,如果一个哨兵ping一个master,超过了 is-master-down-after-milliseconds 指定的毫秒数之后,就主观认为master宕机
sdown到odown转换的条件很简单,如果一个哨兵在指定时间内,收到了 quorum 指定数量的其他哨兵也认为那个master是sdown了,那么就认为是odown了,客观认为master宕机

如果一个slave跟master断开连接已经超过了down-after-milliseconds的10倍,外加master宕机的时长,那么slave就被认为不适合选举为master

(down-after-milliseconds * 10) + milliseconds_since_master_is_in_SDOWN_state

每次一个哨兵要做主备切换,首先需要quorum数量的哨兵认为odown,然后选举出一个slave来做切换,这个slave还得得到majority哨兵的授权,才能正式执行切换;

(2)SENTINEL RESET *,在所有sentinal上执行,清理所有的master状态
(3)SENTINEL MASTER mastername,在所有sentinal上执行,查看所有sentinal对数量是否达成了一致

4.3.2 slave的永久下线

让master摘除某个已经下线的slave:SENTINEL RESET mastername,在所有的哨兵上面执行.

redis的集群模式为了解决系统的横向扩展以及海量数据的存储问题,如果你的数据量很大,那么就可以用redis cluster。
redis cluster可以支撑N个redis master,一个master上面可以挂载多个slave,一般情况我门挂载一个到两个slave,master在挂掉以后会主动切换到slave上面,或者当一个master上面的slave都挂掉后,集群会从其他master上面找到冗余的slave挂载到这个master上面,达到了系统的高可用性。

2.1 redis cluster的重要配置

2.2 在三台机器上启动6个redis实例

将上面的配置文件,在/etc/redis下放6个,分别为: 7001.conf,7002.conf,7003.conf,7004.conf,7005.conf,7006.conf

每个启动脚本内,都修改对应的端口号

2.3 创建集群

解决办法是 先安装rvm,再把ruby版本提升至2.3.3

使用redis-trib.rb命令创建集群

--replicas: 表示每个master有几个slave

redis-trib.rb check 192.168.31.187:7001 查看状体

3.1 加入新master

以上相同配置完成后,设置启动脚本进行启动;然后用如下命令进行node节点添加:

3.2 reshard一些数据过去

3.3 添加node作为slave

3.4 删除node

热点内容
云服务器为什么安装不上补丁 发布:2024-05-16 19:27:18 浏览:339
新加坡幸运28规律算法 发布:2024-05-16 19:27:12 浏览:596
安卓菜鸟裹裹怎么标记已取件 发布:2024-05-16 18:59:36 浏览:543
安卓手机可以在哪个平台直播 发布:2024-05-16 18:59:14 浏览:548
小红书上传不动 发布:2024-05-16 18:50:46 浏览:38
为什么安卓手机双清不卡顿 发布:2024-05-16 18:49:51 浏览:103
会推广源码 发布:2024-05-16 18:36:19 浏览:342
台式电脑相片存储 发布:2024-05-16 18:31:16 浏览:989
nginx动态编译 发布:2024-05-16 18:31:12 浏览:59
广本雅阁哪个配置好 发布:2024-05-16 18:29:08 浏览:964