zoukankan      html  css  js  c++  java
  • 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.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();
            }
        }
    }
  • 相关阅读:
    LeetCode 83. Remove Duplicates from Sorted List (从有序链表中去除重复项)
    LeetCode 21. Merge Two Sorted Lists (合并两个有序链表)
    LeetCode 720. Longest Word in Dictionary (字典里最长的单词)
    LeetCode 690. Employee Importance (职员的重要值)
    LeetCode 645. Set Mismatch (集合不匹配)
    LeetCode 500. Keyboard Row (键盘行)
    LeetCode 463. Island Perimeter (岛的周长)
    115.Distinct Subsequences
    55.Jump Game
    124.Binary Tree Maximum Path Sum
  • 原文地址:https://www.cnblogs.com/lixiang-share/p/5905557.html
Copyright © 2011-2022 走看看