redis入门与集群部署

redis入门

    redis入门级教程很是多,如http://www.runoob.com/redis/redis-backup.html,做为入门其实已经十分详细了,主要学习内容有以下几个方面吧html

    1.理解redis做用: redis是一种内存数据库,并非传统的存储数据库,因此它的核心数据存储都是放在内存的,而内存的空间通常是很是有限的,通常也就是100G之内,因此redis会很快把内存用尽,这时redis会交换磁盘数据,势必会形成redis性能降低,因此这时候怎么去作redis数据落地,redis缓存策略就须要细细考量了。 git

    2.redis数据结构:redis核心的数据结构无非就是key-value,固然也支持一些常见的list,set等,其中redis的Dict类型实现中的rehash算法能够学习学习github

    3.redis相关命令:redsi-cli提供了和redis-server交互的客户端工具,固然也提供一些经常使用的命令去和server交互。redis

    4.redis配置问题:redis在作数据备份时会启动一个子进程去生成“快照”,熟悉“fork()”函数的都知道子进程会拥有和父进程同样的内存空间,然而通常的操做都会采用“写拷贝”技术去实现内存共享,只有数据发生改变时才会发生拷贝事件,然而即便这样,咱们也不该该把所有的内存空间给到redis,由于一旦在redis拷贝过程当中发生的拷贝事件过多,就会把内存“撑爆”,redis会崩掉,,那么咱们数据的下场也就可想而知了,因此这时候去配置redis内存时仍是要考虑考虑的算法

    5.redis集群相关,如redis-sentinel,一些开源库,如StackExchange.RedisTwemproxy等,都是作的很是优秀的开源项目,值得学习学习数据库

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几乎不须要什么特殊配置,咱们只须要更改一下监听的端口就行了:

76GFVF}331KNQFWX])UWE3R

而后再配置一下两个或多个slave,slave须要配置一下隶属的master 的 ip和port,配置项如: slaveof <masterip> <masterport>,示例以下图:

image

固然还须要配置一下redis-sentinel,只要更改它的:seninel monitor <master-name> <master-ip> <master-port> <quorum> ,其中master-name,随便写一个就能够啦,可是须要和先后配置的master-name一致,quorum是最小合法投票数,也就是说当一个master挂掉时,最少有多少个redis-sentinel认为它挂才能说明该master真正挂掉了,从而进入failover过程,这里没有部署多个redis-sentinel,故数量配置为1就行了:

image

至此,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。

imageimageimage

 

至此说明集群配置、运行正常啦,下面手动强制kill master:kill –9 masterID,查看sentinel和6667端口的slave信息:

imageimage

到这里利用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();
        }
    }
}
相关文章
相关标签/搜索