Redis 集群方案

python操作redis集群 安装py操作模块: pip install redis-py-cluster #!/usr/bin/env python #coding:utf-8 from rediscluster import StrictRedisCluster import sys def redis_cluster(): redis_nodes = [{'host': '10.10.10.12 阅读详情

根据一些测试整理出来的一份方案:

1. Redis 性能

对于redis 的一些简单测试,仅供参考:

测试环境:Redhat6.2 , Xeon E5520(4核)*2/8G,1000M网卡

Redis 版本:2.6.9

 

客户端机器使用redis-benchmark 简单GET、SET操作:

1. 1单实例测试

1. Value大小:10Byte~1390Byte

处理速度: 7.5 w/s,速度受单线程处理能力限制

2. Value 大小:1400 左右

处理速度突降到5w/s 样子,网卡未能跑满;由于请求包大于MTU造成TCP分包,服务端中断处理请求加倍,造成业务急剧下降。

3. Value大小:>1.5 k

1000M网卡跑满,速度受网卡速度限制

处理速度与包大小大概关系如下:

image

1.2 多实例测试

前提是系统网卡软中断均衡到多CPU核心处理,测试机器网卡开启RSS,有16个队列:

操作:10字节Value SET,服务端开启8个实例,四台客户端服务器每台开启两个redis-benchmark,每个client 速度近4W/s,服务端总处理30w/s左右。

网卡流量:

image

其中8个单数核心CPU全部耗尽,像是超线程没有利用上,测试已经达到很好效果,就没有继续测试下去了。从单实例跑满一个核心7.5w/s,8个实例跑满8个核心,30W/s来看,CPU使用和性能提升不成正比, RSS会造成redis-server线程基本每收到一个请求都切换一次CPU核心,软中断CPU占用太高。这种情况RPS/RFS功能也许就很合适了,RSS只需要映射1~2个核心,然后再讲软中断根据redis-server端口动态转发,保证redis进程都在一个核心上执行,减少进程不必要的切换。

 

开多实例可以充分利用系统CPU、网卡处理小包能力。具体看业务场景,考虑包平均大小、处理CPU消耗、业务量。如果多实例是为了提高处理能力,需要注意配置网卡软中断均衡,否则处理能力也无法提升。

 

2. Redis 持久化

测试策略:AOF + 定时rewriteaof

1. 准备数据量:

1亿,Key:12 字节 Value:15字节,存储为string,进程占用内存12G

2. Dump

文件大小2.8G,执行时间:95s,重启加载时间:112s

2. Bgrewriteaof

文件大小5.1G,执行时间:95s,重启加载时间:165s

3.开启AOF后性能影响(每秒fsync一次):

8K/s SET 操作时:cup 从20% 增加到40%

4.修改1Kw数据:

文件大小:5.6G,重启加载时间:194s

5.修改2K数据

文件大小:6.1G,重启加载时间:200s

另:Redis2.4 版本以后对fsync做了不少优化, bgrewriteaof,bgsave 期间对redis对外提供服务完全无任何影响。

 

3. Redis 主从复制

因为目前版本没有mysql 主从那样的增量备份,对网路稳定性要求很高,如果频繁TCP连接断开会对服务器和网络带来很大负担。

就目前生产环境主从机器部署同一个机架下,几个月都不会又一次连接断开重连的情况的。

 

4. keepalived 简介

参考官方文档:http://keepalived.org/pdf/sery-lvs-cluster.pdf

Keepalived 是一个用c写的路由选择软件,配合IPVS 负载均衡实用,通过VRRP 协议提供高可用。目前最新版本1.2.7.Keepalived 机器之间实用VRRP路由协议切换VIP,切换速度秒级,且不存在脑裂问题。可以实现

可以实现一主多备,主挂后备自动选举,漂移VIP,切换速度秒级;切换时可通过运行指定脚本更改业务服务状态。

如两台主机A、B,可以实现如下切换:

1.A 、B 依次启动,A作为主、B为从

2 .主A 挂掉,B接管业务,作为主

3.A 起来,作为从SLAVEOF B

4.B 挂掉,A 切回主

将一台全部作为主,即可实现主从,可做读写分离;也可以通过多个VIP,在一台机器上多个实例中一半主、一半从,实现互备份,两机同时负责部分业务,一台宕机后业务都集中在一台上

安装配置都比较简单:

  需要依赖包:openssl-devel(ubuntu 中为 libssl-dev),popt-devel (ubuntu中为libpopt-dev)。

  配置文件默认路径:/etc/keepalived/keepalived.conf 也可以手动指定路径,不过要注意的是手动指定需要使用绝对路径。主要要确保配置文件的正确性,keepalived 不会检查配置是否符合规则。

  使用keepalived -D 运行,即可启动3个守护进程:一个父进程,一个check健康检查,一个Vrrp,-D将日志写入/var/log/message,可以通过日志查看切换状况。

注意问题:

1. VRRP 协议是组播协议,需要保证主、备、VIP 都在同一个VLAN下

2. 不同的VIP 需要与不同的VRID 对应,一个VLAN 中VRID 不能和其他组冲突

3. 在keepalived 有两个角色:Master(一个)、Backup(多个),如果设置一个为Master,但Master挂了后再起来,必然再次业务又一次切换,这对于有状态服务是不可接受的。解决方案就是两台机器都设置为Backup,而且优先级高的Backup设置为nopreemt 不抢占。

 

5. 通过keepalived实现的高可用方案

 

image

切换流程:

1. 当Master挂了后,VIP漂移到Slave;Slave 上keepalived 通知redis 执行:slaveof no one ,开始提供业务

2. 当Master起来后,VIP 地址不变,Master的keepalived 通知redis 执行slaveof slave IP host ,开始作为从同步数据

3. 依次类推

主从同时Down机情况:

1. 非计划性,不做考虑,一般也不会存在这种问题

2. 、计划性重启,重启之前通过运维手段SAVE DUMP 主库数据;需要注意顺序:

1. 关闭其中一台机器上所有redis,是得master全部切到另外一台机器(多实例部署,单机上既有主又有从的情况);并关闭机器

2. 依次dump主上redis服务

3. 关闭主

4. 启动主,并等待数据load完毕

5. 启动从

删除DUMP 文件(避免重启加载慢)

 

6. 使用Twemproxy 实现集群方案

一个由twitter开源的c版本proxy,同时支持memcached和redis,目前最新版本为:0.2.4,持续开发中;https://github.com/twitter/twemproxy .twitter用它主要减少前端与缓存服务间网络连接数。

特点:快、轻量级、减少后端Cache Server连接数、易配置、支持ketama、modula、random、常用hash 分片算法。

image

这里使用keepalived实现高可用主备方案,解决proxy单点问题;

优点:

1. 对于客户端而言,redis集群是透明的,客户端简单,遍于动态扩容

2. Proxy为单点、处理一致性hash时,集群节点可用性检测不存在脑裂问题

3. 高性能,CPU密集型,而redis节点集群多CPU资源冗余,可部署在redis节点集群上,不需要额外设备

 

7 . 一致性hash

使用zookeeper 实现一致性hash。

redis服务启动时,将自己的路由信息通过临时节点方式写入zk,客户端通过zk client读取可用的路由信息。

 

具体实现见我另外一篇:redis 一致性hash

 

8 . 监控工具

历史redis运行查询:CPU、内存、命中率、请求量、主从切换等

实时监控曲线

短信报警

使用基于开源Redis Live 修改工具,便于批量实例监控,基础功能都已实现,细节也将逐步完善。

源码地址如下:

https://github.com/LittlePeng/redis-monitor



  
#1楼   2013-08-04 17:22  蓝色京广线   
楼主的方案是否已经在生产环境中应用了?
  
#2楼 [ 楼主]  2013-08-07 23:23  LittlePeng   
@蓝色京广线
嗯嗯,生产环境大多使用 redis+keepalived主备方式部署
  
#3楼   2013-08-24 10:40  gentlepong   
不错 感谢楼主分享!
  
#4楼   2013-09-26 19:45  cluRty   
我们用的是master/slave的方式。这种方式得学习学习。
  
#5楼   2013-10-07 17:39  加盟   
楼主的做法,跟我之前参与的redis-ha项目很相似,方便透漏在哪高就吗
  
#6楼   2013-10-12 17:31  考拉鼠   
请问redis+keepalived主备方式对外提供同一个VIP,这种处理会不会导致内存的极大浪费?同一时刻只有一台机器对外提供读服务
  
#7楼 [ 楼主]  2013-10-16 13:55  LittlePeng   
@考拉鼠
对,浪费一半机器,对于重要、不能丢数据的业务,这是必要的

如果业务要求不能么高,而且机器数也较多,可选用一致性hash方案
  
#8楼   2013-10-21 09:39  考拉鼠   
有没有考虑通过zookeeper实现,服务端通过node_manager这样的工具实时监控集群状态,zookeeper维护一个集群状态。客户端通过zookeeper读取集群状态,采用一致性hash做shard,写操作在master执行,读操作在slave中轮询。
  
#9楼   2013-11-06 21:34  zd_lff   
LZ您好,问一下 有没有方法能快速将数据通过Twemproxy 代理导入redis中?
Thank You
  
#10楼   2014-01-06 11:21  bolobeach   
我弱弱的问一句,如果master宕机了,启用slave的时候,如果master数据库的数据没有同步到slave,那么你是怎么解决的。。
  
#11楼   2014-03-21 16:39  林义皓   
你好,我想问一下,我在一台服务器16G的内存8核CPU上面测试,redis.conf配置文件用的是默认参数,为什么写的效率只有几百条每秒,需要在配置参数上做调整吗
  
#12楼 [ 楼主]  2014-03-21 23:50  LittlePeng   
@林义皓
应该和默认参数没啥关系,建议检查一下redis-server 资源占用,还有就是包大小、带宽限制、客户端发送性能
  
#13楼 [ 楼主]  2014-03-21 23:57  LittlePeng   
@bolobeach

这种同步方式切换瞬间必然丢失少量数据,看业务场景需求,大多可以忽略不计,就算mysql 主从大多此种方式。
当然要强一致性,那现在的redis版本不支持,可以client实现double write。
  
#14楼   2014-03-26 16:32  snake_j   
请教下LZ,keepalived结构中,master的2台redis如何保持数据的一致呢?
能不能留个QQ方便请教下,谢谢!
  
#15楼   2015-04-14 09:58  深蓝医生   
Mark,学习
  
#16楼   2015-05-15 11:49  晓月天城   
  
#17楼   2015-07-03 11:18  lubberland66   
第6个方案,如果redis节点故障或增加redis节点,twemproxy无法感知,只能改twemproxy的配置,然后重启?
  
#18楼 [ 楼主]  2015-07-16 17:53  LittlePeng   
@lubberland66
节点故障是知道的,提供一致性hash模式的
目前版本不支持动态加载配置,添加节点只能重启了。不过服务是无状态的,无影响重启很容易做
  
#19楼   2015-07-20 10:40  lubberland66   
@LittlePeng
引用 @lubberland66
节点故障是知道的,提供一致性hash模式的
目前版本不支持动态加载配置,添加节点只能重启了。不过服务是无状态的,无影响重启很容易做

可以把6 和 7 结合起来吧,改改twemproxy的源码,订阅zookeeper里的配置信息,添加节点就不用重启了,正在看twemproxy的源码
  
#20楼   2015-09-08 17:19  野猪大改造   
测试写的很好!!!
  
#21楼   2015-09-08 17:21  野猪大改造   
redis-live 使用有遇到bug?比如redis停止什么?
  
#22楼   2015-09-21 14:10  rana4504   
在实用master/slave模式的时候,遇到一个问题,想master写数据的时候,直接去slave读,数据有问题。怎么查看数据是否已经同步到slave?
例如:向master写一个hashset,有1000条数据,直接向slave读的时候,可能只读出800条,下一次在读的时候,可能就是1000条了。这个问题怎么处理,请各位指点一下,谢谢!!!
  
#23楼 [ 楼主]  2015-10-19 16:32  LittlePeng   
@rana4504
1000条数据 分1000次写,必然有这个问题。redis 是基于command的异步复制,可使用MHSET、或事务解决
  
#24楼   2015-10-30 11:47  54ebb   
@LittlePeng 请问基于keepalived的针对机房的本地化、一主多从这种需求,有哪些资料或代码吗?


Redis集群方案应该怎么做?都有哪些方案? 使用codis方案:目前用的多的集群方案,基本和twemproxy一致的效果,但它支持在节点数量改变情况下,旧节点数据可恢复到新hash节点。 Redis cluster3.0自带的集群:特点在于他的分布式算法不是一致性hash,而是hash槽的概念,以及自身支持节点设置从节点。 在业务代码层实现:起几个毫无关联的Redis实例,在代码层对key进行hash计算,然后去对应的Redis实例操作数据。这种方式对hash层代码要求比较高,考虑部分包括,节点失效后的替代算法方案,数据震荡后的自动脚本恢复,实例 阅读详情

相关推荐

Docker部署Redis哨兵集群,保姆级部署方案

上篇讲了如何在物理机上部署Redis哨兵集群方案,刚好最近业务要求,需要在Docker中部署一套Redis哨兵集群,在这里将部署的过程给大家展示一下,以供有需要的朋友参考。:Docker容器化确保了Redis在不同环境(如开发、测试、生产)下的一致性。因为Docker镜像包含了运行Redis所需的所有依赖和配置,避免了“在我机器上能跑”的问题。:Docker使得部署Redis变得极为快速和简便。只需一条命令即可启动容器,大大缩短了部署时间。同时,根据需要轻松增加或减少容器数量,实现快速扩容或缩容。

qq_36851486的博客 1992

redis主从复制和无限同步问题

一 主从复制 主从复制,又称主从同步,分为增量同步和全量同步。增量同步slave会从master的复制积压缓存去中读取偏移数据,而全量同步,master会生成一个rdb文件,并传输给slave,slave会清空数据库,并从这个rdb文件重新导入数据。 二 全量同步的条件 以下情况从节点会做全量同步: 1. 备节点第一次连到主节点。 2. 节点重启,主节点runid会变,备节点ru...

AJun的博客 1802

Redis 中常见的集群部署方案

Python微信订餐小程序课程视频 https://edu.youkuaiyun.com/course/detail/36074 Python实战量化交易理财系统 https://edu.youkuaiyun.com/course/detail/35475 Redis 的高可用集群 前言 几种常用的集群方案 主从集群模式 全量同步 增量同步 哨兵机制 什么是哨兵机制 如何保证选主的准确性 如何选主 选举主节点的规则 哨兵进行主节点切换 切片集群 Redis Cluster方案 哈希槽重新分配 1、如果数据

weixin_45566993的博客 1179

Redis学习9之在discuz的文件里加入redis数据库计访问数

在discuz的文件里加入redis数据库计访问数:<?php //require '/home/xubo/cloud/redis/clients/predis/autoload.php'; require '/home/hadoop/cloud/redis-3.0.4/clients/predis/autoload.php'; $redis = new Predis\Client(); $redi

Keep Learning 2027

redis常用集群方案汇总

前言 在生产环境下,往往要求系统具备高可用,承载高并发以及有着较好的抵御单点故障的能力,通常来说,使用集群部署可以达到这个目的 同样,对于redis的使用,即便单节点的性能已经很高了,但考虑到种种可能造成单点故障以及影响其高并发环境下整体性能的因素,因此,在系统设计之初,最好能结合自身的业务对redis的部署架构做一个整体的评估。 是否使用集群 关于这个问题,很多同学有不同的见解,比如说项目本身体量不大,在可遇见的业务增长范围内,为了满足快速迭代、快速上线的要求,单节点不是不可以,部署redis单节点,不管

congge 2万+

ThinkPad X230魔改指南:从博通网卡驱动到1080P屏显全攻略(附Sonoma避坑清单)

本文详细介绍了ThinkPad X230的全面改造方案,包括博通网卡驱动(BCM94352HMB)的安装与调试、1080P屏幕改装技术以及macOS Sonoma系统的适配优化。通过硬件升级和软件调优,使这台经典商务本焕发新生,适合DIY爱好者和技术极客参考实践。

weixin_30379531的博客 589

Discuz!使用Redis缓存多站点分库和避免清空所有的数据的解决方案

Discuz!内存级缓存介绍 缓存层的引入是为了解决MYSQL自身对高并发处理的性能瓶颈,目前产品缓存层采用主流的Key-Value对形式,内存级的缓存产品很多,支持的内存优化接口有 Memcache、eAccelerator、Alternative PHP Cache(APC)、Xcache、Redis 五种,优化系统将会依据当前服务器环境依次选用接口,单服务器环境中推荐使用APC,多服务器环境...

土著人宁巴的Discuz!专栏 4万+

RDMA性能调优实战:如何用ib_*命令榨干你的Mellanox网卡带宽?

本文深入探讨了如何利用ib_*命令工具集对RDMA网络进行深度性能调优,以充分释放Mellanox网卡的带宽潜力。文章从理解Send/Write/Read三种核心通信原语的差异入手,逐步指导读者通过调整消息大小、队列深度、内联数据等关键参数,并结合系统级的NUMA绑定、中断亲和性等优化策略,实现从基准测试到逼近硬件极限的性能提升。

weixin_29306011的博客 88

Python连接redis集群方法

Python连接redis集群方法 1. 安装redis、rediscluster模块 pip install redis pip install redis-py-cluster 2. 示例代码 # -*- coding: UTF-8 -*- from rediscluster import RedisCluster #构建所有的节点 startup_nodes = [ {"host": "192.168.2.50", "port": 6379}, # 主 {"host": "192

weixin_40668374的博客 2183

自研SSD固件:从零实现固态硬盘底层存储控制系统

本文探讨了自主开发SSD固件的可行性及实现方案。分析表明,虽然NAND Flash控制协议标准化且存在开源参考实现,但开发仍面临FTL设计复杂度高、性能调优等挑战。推荐采用FPGA平台(如Xilinx Zynq-7000)搭配SLC NAND Flash的方案,预计开发周期9-12个月。系统采用分层架构设计,包含主机接口层、FTL层和闪存接口层,核心模块需实现NAND Flash底层驱动、地址映射管理和垃圾回收等功能。文中提供了关键数据结构和基础驱动代码示例,包括页读写、块擦除等操作。该方案着重解决NAND

电脑管家 1893

STK中的传感器与通信组件:雷达、发射机、接收机与天线的协同建模

本文深入解析了STK软件中传感器、雷达、发射机、接收机与天线的协同建模方法。通过构建一个完整的卫星对地数传系统实例,阐述了各组件如何分工协作,实现从几何指向到射频链路的高保真仿真,为复杂航天通信与探测系统的设计与分析提供了高效、灵活的解决方案。

weixin_29271263的博客 273

Redis的集群方案

Redis的集群方案

m0_70386582的博客 1890

Power BI实战:从数据清洗到可视化报表的完整流程

本文详细介绍了使用Power BI进行数据分析的完整流程,从数据获取、清洗整理到建模与可视化。通过实战案例,重点讲解了连接MySQL数据库、使用Power Query进行数据清洗、利用DAX创建核心度量值以及设计交互式报表的关键步骤与技巧,帮助用户高效完成从原始数据到专业可视化报表的转化,实现数据驱动决策。

weixin_29070721的博客 399

Redis集群方案——Redis分片集群

Redis分片集群(Redis Cluster)是Redis官方提供的分布式解决方案,它允许数据自动分布在多个Redis节点上,提供的Redis服务。主从和哨兵可以解决的问题。但是依然有两个问题没有解决:海量数据存储问题高并发写的问题使用分片集群可以解决上述问题,如图:分片集群特征:集群中有多个master,每个master保存不同数据每个master都可以有多个slave节点master之间通过ping监测彼此健康状态客户端请求可以访问集群任意节点,最终都会被转发到正确节点。

m0_74808313的博客 966

Parrot OS最新安装教程

Parrot OS和Kali Linux一样是一个基于 Debian 的免费开源 Linux 发行版,适合安全专家、开发人员、以及关心隐私的人。相较于Kali,Parrot OS属于轻量级,对于硬件的要求无需很高,目前版本已更新到6.3。通过按照本教程的方法,能够成功安装Parrot OS。

🦸💻冰草花生酱提醒您“请记得检查所有电子设备的最后登录时间哦⏰🔍” 4435

WPF数据绑定Binding对数据的转换与效验(四)

Binding的作用就是架在Source与Target之间的桥梁,数据可以在这座桥梁的帮助下来流通。就像现实世界中的桥梁会设置一些关卡进行安检一样,Binding这座桥上也可以设置关卡对数据的有效性进行检验,不仅如此,当Binding的两端要求使用不同的数据类型时,我们还可以为数据设置转换器。Binding用于数据有效性检验的关卡是它的ValidationRules属性,用于数据类型转换的关卡是它的Converter属性。

qq_30725967的博客 1631

【Redis】常见的 Redis 集群方案

常见的 Redis 集群方案

hui_zai_的博客 1025

2 中望CAD二次开发-绘制图形(ZRX C++)

本文讲解中望CAD二次开发,关于块的概念及基本图形的绘制

cilvsuanna的博客 413

Redis集群方案

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33698823的博客 111

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

redis 集群方案

redis 集群方案的介绍(主从模式、哨兵模式、Redis Cluster模式) 一、主从模式 将数据完全存储在单个redis中主要存在两个问题: 数据备份和数据体量较大造成的性能降低。 Redis的主从模式为这两个问题提供了一个较好的解决方案。主从模式指的是使用一个redis实例作为主机,其余的实例作为备份机。 主机和从机的数据完全一致,主机支持数据的写入和读取等各项操作,而从机则只支持与主机数据的同步和读取,也就是说,客户端可以将数据写入到主机,由主机自动将数据的写入操作同步到从机。 主从模式很好的解决

无名小生 7290

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Redis 集群的三种方案

Redis 集群的三种方案 一、主从复制 slave of 二、哨兵模式(Sentinel) 三、集群(Cluster)

oyc的博客 1106

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Redis集群方案详解

本文深度解析Redis集群的三种主流方案:主从复制、哨兵模式和Cluster模式。主从复制实现读写分离和数据同步,通过PSYNC命令支持全量和增量同步;哨兵模式提供高可用性,实现自动故障检测和主从切换;Cluster模式则实现数据分片和水平扩展。文章详细阐述了各方案的架构设计、实现原理、配置示例及适用场景,并针对常见问题提供解决方案,为Redis集群部署提供了全面的最佳实践指导。

weixin_43076660的博客 1175

Redis 集群化的 3 种方案对比

因此,要想使用Codis,必须使用它内置的Redis,这也就意味着Codis中的Redis是否能跟上官方最新版的功能特性,可能无法得到保障,这取决于Codis的维护方,目前Codis已经不再维护,所以使用Codis时只能使用3.2.8版的Redis,这是一个痛点。采用中间加一层Proxy的中心化模式时,这就对Proxy的要求很高,因为它一旦出现故障,那么操作这个Proxy的所有客户端都无法处理,要想实现Proxy的高可用,还需要另外的机制来实现,例如Keepalive。

2401_86358808的博客 1263

Redis - 三种Redis集群实现方案之_基于代理的分片

集群实现的基础或者说核心价值是分片(sharding)。存储扩展:利用多节点内存总和构建超大存储空间计算扩展:通过多核/多机提升计算能力带宽扩展:分布式架构突破单机网络瓶颈Redis的集群实现方案可以归纳为客户端分片、基于代理的分片和路由查询这3种。fill:#333;color:#333;color:#333;fill:none;分片方案客户端分片代理分片路由查询一致性哈希TwemproxyCodis。

小工匠 3027

Redis集群部署方案

这里我们把 redis-master 手动停止,模拟 主从点挂掉的情况,此时 redis-slave1 还是从节点,而主节点变成了redis-slave2。Redis Cluster 是 Redis原生的分布式集群方案,支持数据的自动分片(sharding),从而实现水平扩展,处理大规模的数据和请求。从图里我们,可以看到redis-master的role是master,而redis-slave的role是slave。而我们在redis-master添加的键值对,在redis-slave里可以获得。

... 2177

Redis集群方案介绍

本文节选自《App 后台开发运维和架构实践》一书 由于Redis出众的性能,其在众多的移动互联网企业中得到广泛的应用。Redis在3.0版本前只支持单实例模式,虽然现在的服务器 内存可以到100GB、200GB的规模,但是单实例模式限制了Redis没法满足业务的需求(例如新浪微博就曾经用Redis存储了超过1TB的数 据)。Redis的开发者Antirez早在博客上就提出在Redis ...

A3354636的博客 223
上一篇: Redis 命令参考链接(译文)
下一篇: 理解RESTful架构
codepython
博客等级 码龄20年 125粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值