redis入门与集群部署
redis入门
redis入门级教程非常多,如http://www.runoob.com/redis/redis-backup.html,作为入门其实已经十分详细了,主要学习内容有如下几个方面吧
1.理解redis作用: redis是一种内存数据库,并不是传统的存储数据库,所以它的核心数据存储都是放在内存的,而内存的空间一般是非常有限的,一般也就是100G以内,所以redis会很快把内存用尽,这时redis会交换磁盘数据,势必会造成redis性能下降,所以这时候怎么去做redis数据落地,redis缓存策略就需要细细考量了。
2.redis数据结构:redis核心的数据结构无非就是key-value,当然也支持一些常见的list,set等,其中redis的Dict类型实现中的rehash算法可以学习学习
3.redis相关命令:redsi-cli提供了和redis-server交互的客户端工具,当然也提供一些常用的命令去和server交互。
4.redis配置问题:redis在做数据备份时会启动一个子进程去生成“快照”,熟悉“fork()”函数的都知道子进程会拥有和父进程一样的内存空间,然而一般的操作都会采用“写拷贝”技术去实现内存共享,只有数据发生改变时才会发生拷贝事件,然而即使这样,我们也不应该把全部的内存空间给到redis,因为一旦在redis拷贝过程中发生的拷贝事件过多,就会把内存“撑爆”,redis会崩掉,,那么我们数据的下场也就可想而知了,所以这时候去配置redis内存时还是要考虑考虑的
5.redis集群相关,如redis-sentinel,一些开源库,如StackExchange.Redis、Twemproxy等,都是做的非常优秀的开源项目,值得学习学习
redis-sentinel集群部署
Redis-sentinel是Redis实例的监控管理、通知和实例失效备援服务,是Redis集群的管理工具。在一般的分布式中心节点数据库中,Redis-sentinel的作用是中心节点的工作,监控各个其他节点的工作情况并且进行故障恢复,来提高集群的高可用性。但是redis-sentinel在redis3.2版本中还属于bate阶段,并不适合生产环境,但是倒腾倒腾还是可以的。
这里推荐一个系列文章(http://diaocow.iteye.com/blog/1938032),博主还有几篇文章没有完善,不过其中的rehash和主从复制写的都蛮不错的。其实reids-sentinel就相当于一个或多个redis实例管理器(或者说监控器),而多个redis实例中有一个master,其他都是slave,redis-sentinel就监控着master,并从master中获得其他slave的信息,一旦发现master挂掉,那么redis-sentinel就会重新选取一个master,这样即使master挂了,也不会影响我们的数据啦。那么其中的master和slave怎么做数据同步,主从切换和配置的在上面的文章中有相关介绍。下面主要记录一下我在配置redis-sentinel的过程。
1.首先需要配置一个master
2.配置两个或者多个slave
3.先启动master,在启动slave
4.启动redis-sentinel,,配置至此完成啦!!!
先看一下master配置,master几乎不需要什么特殊配置,我们只需要更改一下监听的端口就好了:
然后再配置一下两个或多个slave,slave需要配置一下隶属的master 的 ip和port,配置项如: slaveof <masterip> <masterport>,示例如下图:
当然还需要配置一下redis-sentinel,只要更改它的:seninel monitor <master-name> <master-ip> <master-port> <quorum> ,其中master-name,随便写一个就可以啦,但是需要和前后配置的master-name一致,quorum是最小合法投票数,也就是说当一个master挂掉时,最少有多少个redis-sentinel认为它挂才能说明该master真正挂掉了,从而进入failover过程,这里没有部署多个redis-sentinel,故数量配置为1就好了:
至此,reids-sentinel集群简单配置就结束了,使用类似:redis-server <config-path> & 就可以启动redis实例了,下面是我的启动过程:
1. 启动master: ../src/redis-server redis_mater.conf &
2. 启动slave1:../src/redis-server redis_slave_1.conf &
3. 启动slave1:../src/redis-server redis_slave_2.conf &
4. 启动sentinel: ../src/redis-sentinel ../sentinel.conf &
可以使用redis-cli –h ip –p port info 去查看各个server的信息,会发现6665端口运行的是master,6666和6667分别运行slave,而master为127.0.0.1:6665,,26279端口运行着sentinel。
至此说明集群配置、运行正常啦,下面手动强制kill master:kill –9 masterID,查看sentinel和6667端口的slave信息:
到这里利用redis-sentinel配置集群的demo介绍结束啦
StackExchange.Redis 做redis集群
StackExchange.Redis是StackFlow自己做redis的集群项目,现在开元出来啦,使用非常简单,看看介绍Basic Use就能把demo做出来,不过最好先用VS2015打开,因为我用VS2013打开后各种报错,汗……,先用VS2015打开后,再用VS2013打开就正常,不知为啥子……这里就不过多介绍了,直接贴上几行测试代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using StackExchange.Redis;
namespace RedisDistribute
{ class Program
{
static void Main(string[] args)
{
string connStr = "ip:prot,ip:pro";
ConnectionMultiplexer redis = ConnectionMultiplexer.Connect(connStr);
IDatabase db = redis.GetDatabase();
db.StringSet("hello", "world!!!"); string val = db.StringGet("hello");
Console.WriteLine("Redis Hello Val : " + val); Console.ReadKey();
}
}
}
redis入门与集群部署的更多相关文章
- redis多机集群部署文档
redis多机集群部署文档(centos6.2) (要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下 ...
- 面试连环炮系列(二):你们的项目Redis做了集群部署吗
你们的项目Redis做了集群部署吗? 我们有大量数据需要缓存,而单实例的容量毕竟是有限的,于是做了Redis集群部署. 采取的方案是什么,Codis还是Redis Cluster,为什么要选择这个方案 ...
- 使用Tomcat+Redis来实现集群部署中的Session共享问题
一.工作中因为要使用到Tomcat集群部署,此时就涉及到了Session共享问题,主要有三种解决方案: 1.使用数据库来存储Session 2.使用Cookie来存储Session 3.使用Redis ...
- 【Redis学习专题】- Redis主从+哨兵集群部署
集群版本: redis-4.0.14 集群节点: 节点角色 IP redis-master 10.100.8.21 redis-slave1 10.100.8.22 redis-slave2 10.1 ...
- REDIS数据备份集群部署和双集群同步工具redis-migrate-tool
REDIS 版本 < 4.0 笔者用的是 v=3.0.7 REDIS集群创建镜像:registry.cn-shenzhen.aliyuncs.com/cp_m/redis-trib:0.1.3 ...
- Windows安装redis数据库以及集群部署
1. 安装Redis版本:win-3.0.501https://github.com/MSOpenTech/redis/releases页面有,我下载的是zip版本的:Redis-x64-3.0.50 ...
- Redis+TwemProxy(nutcracker)集群方案部署记录
Twemproxy 又称nutcracker ,是一个memcache.Redis协议的轻量级代理,一个用于sharding 的中间件.有了Twemproxy,客户端不直接访问Redis服务器,而是通 ...
- redis集群部署+节点端口修改+数据恢复
环境:OS:Centos 7Redis: 3.2.11主 从192.168.1.118:7001 192.168.1.118:8001192.168.1.118:7002 192.168.1.118: ...
- 2、Redis 底层原理:Cluster 集群部署与详解
Redis 简介 Redis 提供数据缓存服务,内部数据都存在内存中,所以访问速度非常快. 早期,Redis 单应用服务亦能满足企业的需求.之后,业务量的上升,单机的读写能力满足不了业务的需求,技术上 ...
随机推荐
- loj2537 「PKUWC 2018」Minimax
pkusc 快到了--做点题涨涨 rp. 初见时 yy 了一个类似于归并的东西,\(O(n^2)\),50 分. 50 分 yy 做法 对于一个点,枚举他能到达的权值(假设这个权值在左子树,在右子树是 ...
- Oracle 学习笔记(十)
合并查询 在实际项目开发中经常遇到要合并结果集的情况,可以使用集合操作符:union,union all,intersect,minus.这次笔记学习这几个操作符. [union] 该操作符用于取得两 ...
- PHP 命名空间和自动加载
PHP 命名空间 php5.3 之后引入了命名空间的特性,从本质上讲,命名空间就是一个容器,你可以将类.函数和变量放在其中,在命名空间中,你可以无条件地访问这些项,在命名空间之外,必须导入或引用命名空 ...
- LeetCode——Problem2:Add Two Numbers
这又过了一周了,总感觉刷这个好花时间呀.每次都一两个小时.让我不好安排时间.应该是我太菜了.对,没错,就是这样 1.题目 You are given two non-empty linked list ...
- sklearn快速入门
原创博文,转载请注明出处. (为了节约空间,打印结果常用"..."表示省略) 一.加载数据集 1. 加载sklearn自带的数据集 scikit-learn有一些自带的标准数据集, ...
- Python面向对象之常用的特殊方法(5)
Python面向对象里面有很多特殊方法,例如__init__(构造方法),__del__(析构方法),这些方法对于面向对象编程非常重要,下面列出一些常用的特殊方法 (1)__call__ class ...
- JavaWeb笔记(二)Servlet
Tomcat目录简介 bin--可执行文件 conf--配置文件 lib--依赖jar包 logs--日志文件 temp--临时文件 webapps--默认项目部署路径 work--存放运行时的数据 ...
- jdk -version could not open jvm.cfg 的解决办法
java 时出现 could not open jvm.cfg 的解决办法 问题描述: 重装JDK并更变目录后,出现JAVA -VERSION 出现could not open jvm.cf ...
- MyEclipse断点调试方法
MyEclipse断点调试方法 最基本的操作是: 1, 首先在一个java文件中设断点,然后运行,当程序走到断点处就会转到debug视图下, 2, F5键与F6键均为单步调试,F5是step into ...
- 习题:玛丽卡(SPFA)
玛丽卡(wikioi1021) [题目描述 ]麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复.因为她和他们不住在同一个城市,因此她开始准备她的长途旅行.在这个国家中每两个城市之间最多只有一条路相通, ...