久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Redis集群 Java客戶端Jedis的使用

 WindySky 2017-06-08

Java客戶端Jedis 

這里只講Jedis常規(guī)用法和五種數(shù)據(jù)結(jié)構(gòu)的方法(關(guān)于集群的搭建以后再寫(xiě))


        2.稍微修飾下


   3.運(yùn)行效果


4.相應(yīng)的jar包(第一個(gè)不兼容,,沒(méi)用,junit4.4:@test 做測(cè)試所需)



二,,redis數(shù)據(jù)類型(String List Set Sorted Hash  )方法介紹(方法參數(shù)類型如果每注明都是String)

1.  Jedis jedis = new Jedis("192.168.0.163", 6379);  //寫(xiě)自己的地址

2.JedisCluster jedis  = new JedisCluster(jedisClusterNodes);//jedisClusterNodes是多個(gè)IP組成

        redis的String類型數(shù)據(jù)結(jié)構(gòu)的緩存操作:

        

        /**

         * 字符串緩存操作類或者JavaBean緩存操作類

         * key String, value String-->看下邊的注意點(diǎn)2

         * key byte[], value byte[]-->key.getBytes[], value 序列化為byte[],,通常需要自己寫(xiě)一個(gè)序列化工具

         * 注意:這一點(diǎn)與memcached不一樣,memcached可以key String, value Object

         * 1,、memcached直接加序列化器就可以,或者在業(yè)務(wù)層中將Object-->String

         * 2,、redis執(zhí)行此接口,,一般只會(huì)采用后者Object-->String

         */

        

   String:

        1. jedis.set(key,value);//set(String,String),value除了string以外,,還可以是byte[]

        /**

            * 設(shè)置緩存

             * 類似于memcached的set,不管是否已經(jīng)有相同的key,,都成功

             * 實(shí)際上只是set(String, String)

             */

        2.jedis.setex(key, value, expire);

            /**

             * 設(shè)置緩存,,并指定緩存過(guò)期時(shí)間,單位是秒

             */

        3.jedis.setnx(key, value);

        

            /**

             * 設(shè)置緩存,如果設(shè)置的key不存在,,直接設(shè)置,,如果key已經(jīng)存在了,則什么操作都不做,,直接返回

             * 類似于memcached的add

             */

          long setCount = jedis.setnx(keyPrefix+KEY_SPLIT+key, value);

         4.    jedis.get(key);      

        /**

             * 根據(jù)key獲取緩存

             * @param key

             * @return String

             */

        5.  jedis.del(key);

        /**

             * 根據(jù)key刪除緩存

             */

        6.  jedis.expire(key, expire);

            /**

             * 更新緩存過(guò)期時(shí)間,,單位:秒

             * 從運(yùn)行該方法開(kāi)始,為相應(yīng)的key-value設(shè)置緩存過(guò)期時(shí)間expire

             * 類似于memcached中的touch命令

             */



   redis的List類型數(shù)據(jù)結(jié)構(gòu)的緩存操作:

        List(有序列表工具類)

        

        1. jedis.lpush(list, values);//可以多值(String list, String... values)

        

        /**

             * 從左邊(首部)加入列表

             * 注意:

             * 1,、可以一次性入隊(duì)n個(gè)元素(這里使用了不定參數(shù),當(dāng)然可以換做數(shù)組)

             * 2,、左邊入隊(duì),相當(dāng)于在隊(duì)頭插入元素,,則之后的元素都要后移一位,;而右邊入隊(duì)的話元素直接插在隊(duì)尾,,之前的元素的索引不變

             */

        2.

         jedis.lpush(list, values);

        jedis.expire(list, expire);//為該list設(shè)置緩存過(guò)期時(shí)間

         /**

             * 從左邊(首部)加入列表

             * 并指定列表緩存過(guò)期時(shí)間

             */

        3.  jedis.rpush(list, values);

        /**

             * 從右邊(尾部)加入列表

             */

        4.

         jedis.rpush(list, values);

        jedis.expire(list, expire);//設(shè)置緩存過(guò)期時(shí)間

            /**

             * 從右邊(尾部)加入列表

             * 并設(shè)置緩存過(guò)期時(shí)間

             */

        5. jedis.lset(list, index, value);

        

         /**

             * 設(shè)置list中index位置的元素

             * index==-1表示最后一個(gè)元素

             */

        6.jedis.lpop(list);

        

         /**

             * 從左邊(首部)出列表

             */

        7.jedis.rpop(list);

        

        /**

             * 從右邊出列表

             */

        8.jedis.lindex(list, index);

        

        /**

             * 返回list中index位置的元素

             */

        9.jedis.lrange(list, start, end);

        

          /**

             * 返回list指定區(qū)間[start,end]內(nèi)的元素 

             */

        10. lrange(list, 0, -1);

        

        /**

             * 返回list內(nèi)的全部元素 

             */

        11. jedis.ltrim(list, start, end);

        

        /**

             * 讓list只保留指定區(qū)間[start,end]內(nèi)的元素,不在指定區(qū)間內(nèi)的元素都將被刪除 

             */

        12. jedis.lrem(list, count, value);//返回刪除了多少個(gè)元素

        

          /**

             * 刪除list中所有與value相等的元素

             * 注意:

             * count

             * ==0 :刪除表中所有與value相等的元素

             * >0:從表頭開(kāi)始向表尾搜索,,移除count個(gè)與value相等的元素

             * <0:從表尾開(kāi)始向表頭搜索,,移除count個(gè)與value相等的元素

             */

        13.lremove(list, 0, value);

        

          /**

             * 刪除list中所有與value相等的元素

             */

        14.jedis.llen(list);

        

         /**

             * 返回list中共有多少個(gè)元素

             */


    set無(wú)序集合工具類

         注意:

  • 元素在set中的存放順序?yàn)椋号c插入set的先后書(shū)順序無(wú)關(guān)(即無(wú)序)

  • 不允許存放重復(fù)元素

  • 對(duì)于set而言,,Jedis有交集、差集,、并集運(yùn)算,,可是ShardJedis沒(méi)有

        1.jedis.sadd(set, values);

         /*

                     * 對(duì)比:

                     * lpush(String key, String... strings);

                     * 返回push之后的list中包含的元素個(gè)數(shù)

                     * 

                     * sadd(String key, String... members)

                     * 1:添加元素成功

                     * 0:set中已經(jīng)有要添加的元素了

                     */

        2.jedis.smembers(set)

         /**

             * 獲取set集合中的所有緩存

             * @param set

             */

        3. jedis.srem(set, values)

         /**

             * 刪除緩存

             * @param set

             * @param values

             */

        4.jedis.sismember(set, value);

        

         /**

             * set集合是否包含value

             * @param set

             */

        5.jedis.scard(set);

        /**

             * 返回set集合的元素個(gè)數(shù)

             * @param set

             */

        

 Sorted Set(有序集合工具類)

        /**

         * sorted set緩存操作類 

         * 1、有序集合,,最后的順序是按照score從小到大的順序排列

         * 2,、元素不能重復(fù)

         * 3、沒(méi)有從set中獲取指定value的運(yùn)算

         */

        1.jedis.zadd(String sortedSet,double score, String value);

        /**

             * 添加緩存(一個(gè))

             * @param sortedSet 添加入的集合

             * @param score        權(quán)重

             * @param value        值

             */

        2.jedis.zadd(String sortedSet,Map<String, Double> value2score);

          /**

             * 添加緩存(一次可添加多個(gè))

             * @param sortedSet        添加入的集合

             * @param value2score    加入集合的元素集

             */

        /***************************獲取緩存*****************************/

        3.jedis.zrange(sortedSet,long start, long end);

            /**

             * 返回sortedSet內(nèi)[start,end]索引的元素set

             * 1,、在sortedSet中,,元素是按照score從小到大排列的,

             *         此方法從前向后獲取元素(即按元素的score從小到大排列)

             */

        4.zrange(sortedSet, 0, -1);

        /**

             * 返回sortedSet內(nèi)所有元素,,元素按照score從小到大排列

             */

        5.jedis.zrevrange(sortedSet,long start, long end);

        /**

             * 返回sortedSet集合[start, end]中的元素

             * 1,、此方法相當(dāng)于從后向前取元素,即元素從大到小排列

             * 或者相當(dāng)于將sortedSet從大到小排列,,然后從前向后去元素

             */

        6.zrevrange(sortedSet, 0, -1);

        /**

             * 返回sortedSet內(nèi)所有元素,,元素按照score從大到小排列

             */

        7.jedis.zrangeByScore(String sortedSet, double minScore, double maxScore);

          /**

             * 獲取sortedSet內(nèi)[minScore, maxScore]的元素

             */

        8.  jedis.zrem(String sortedSet, String... values);

            /**

             * 刪除多個(gè)緩存

             * @param sortedSet

             * @param values

             */

        9. jedis.zremrangeByRank(String sortedSet, long start, long end);

           /**

             * 刪除指定范圍(按照索引,包前包后)的緩存

             */

        10.  jedis.zremrangeByScore(String sortedSet, double minScore, double maxScore);

         /**

             * 刪除指定范圍(按照分?jǐn)?shù),,包前包后)的緩存

             */

        11.jedis.zcard(String sortedSet);

         /**

             * 獲取集合sortedSet的長(zhǎng)度

             */

        12.edis.zscore(sortedSet, value);

        /**

             * 獲取sortedSet中的value的權(quán)重score

             */

        13. jedis.zincrby(String sortedSet,double score, String value);

          /**

             * 為sortedSet中的value的權(quán)重加上增量score

             */

 Hash(hash工具類)

    1.jedis.hset(String map, String key, String value);


     /**

     * 添加單個(gè)緩存key-value到map中

     */

    2.jedis.hsetnx(String map, String key, String value);

     /**

     * 添加單個(gè)緩存key-value到map中

     * 若已經(jīng)存在于指定key相同的key,,那么就不操作

     */

    3. jedis.hmset(String map, Map<String, String> key2value);   

    /**

     * 在map中添加key2value的map,即一次性添加多條緩存

     * @param map

     * @param key2value

     */

    4.jedis.hkeys(String map);//返回類型Set<String>

      /**

     * 獲取map中key的集合

     * @param set

     */

    5.jedis.hvals(String map)//返回類型List<String>

     /**

     * 獲取map中的所有key的value

     */

    6.jedis.hmget(String map, String... keys) //返回類型List<String>

     /**

     * 從map中獲取多個(gè)key的value,,并放在List集合中

     */

    7.jedis.hgetAll(String map);//返回類型Map<String, String>

    /**

     * 從map中獲取全部的緩存key-value對(duì)

     */

    8.jedis.hget(String map, String key);// 返回類型String

   /**

     * 從map中獲取相應(yīng)key的緩存value

     */

    9.   jedis.hdel(String map, String... keys); 

    /**

     * 從map中刪除多個(gè)緩存

     */

    10. jedis.hlen(map);

    /**

     * 獲取map中的key-value數(shù)

     */

    11.jedis.hexists(String map, String key);

    /**

     * map中是否存在鍵為key的緩存

     */

  


總結(jié):

  • list

    • 元素在list中的存放順序?yàn)椋翰迦雔ist的順序(從左邊插入在頭部,,從右邊插入在尾部)

    • 允許存放重復(fù)元素

    • 可用作模擬隊(duì)列(queue)、堆棧(stack),,支持雙向操作(L--首部或者R--尾部)

    • 左邊入隊(duì),,相當(dāng)于在隊(duì)頭插入元素,則之后的元素都要后移一位,;而右邊入隊(duì)的話元素直接插在隊(duì)尾,,之前的元素的索引不變(推薦使用右邊入隊(duì),即隊(duì)尾入隊(duì))

  • set

    • 元素在set中的存放順序?yàn)椋号c插入set的先后書(shū)順序無(wú)關(guān)(即無(wú)序)

    • 不允許存放重復(fù)元素

    • 對(duì)于set而言,,Jedis有交集,、差集,、并集運(yùn)算,可是ShardJedis沒(méi)有

  • soretd set

    • 元素在set中的存放順序?yàn)椋焊鶕?jù)score(權(quán)重)從小到大排列

    • 不允許存放重復(fù)元素

相同點(diǎn):

  • index

    • 從0開(kāi)始 -1表示結(jié)尾  -2表示倒數(shù)第二個(gè)

  • API中的 start end參數(shù)

    • 都是包前也包后的

  • 按key查找功能

    • list,、set,、sorted set沒(méi)有按key查找的功能

    • String、hash具有按key查找value的功能

  • 直接的指定緩存過(guò)期的API

    • String有

    • list,、set,、sorted set、hash沒(méi)有,,但是可以按例如如下的方式指定緩存過(guò)期時(shí)間  

        jedis.lpush(list, values);19     
          jedis.expire(list, expire);//為該list設(shè)置緩存過(guò)期時(shí)間


    刪除整個(gè)元素

  • jedis.del(list):可用于五種結(jié)構(gòu)

代碼:
  1. package test;  
  2.   
  3. import java.util.HashSet;    
  4. import java.util.Set;    
  5.     
  6. import org.junit.Test;    
  7.     
  8. import redis.clients.jedis.HostAndPort;    
  9. import redis.clients.jedis.Jedis;    
  10. import redis.clients.jedis.JedisCluster;    
  11. import redis.clients.jedis.JedisPool;    
  12.     
  13. public class RedisCesi {    
  14.       
  15.     
  16.     @Test    
  17.     public void testJedisSingle() {    
  18.         System.err.println("start1");  
  19.         //創(chuàng)建jedis對(duì)象    
  20.         Jedis jedis = new Jedis("192.168.0.163", 6379);    
  21.         //調(diào)用jedis對(duì)象的方法,,方法名稱和redis 的命令一致    
  22.        //jedis.set("key1", "jedis songtie02");    
  23.      //  jedis.set("key07", "jedis songtie02");   
  24.        // jedis.del("key07");  
  25.        // String string = jedis.get("key07");    
  26.       // Long list=  jedis.lpush("list", "value1","value2","value4");  
  27.         
  28.          
  29.         System.err.println( jedis.lindex("list", 0)+"    "+ jedis.lindex("list", 1)+"    "+jedis.lindex("list", 2)+"    "+jedis.lindex("list", 3));  
  30.         //System.err.println(jedis.rpop("list"));  
  31.         //System.out.println("single    "+string);    
  32.         //關(guān)閉jedis    
  33.         jedis.close();    
  34.     }    
  35.         
  36.         
  37.     /**  
  38.      *使用jedis連接池   
  39.      */    
  40.     @Test    
  41.     public void testJedisPool(){    
  42.         @SuppressWarnings("resource")  
  43.         JedisPool jedisPool = new JedisPool("192.168.0.163", 6379);    
  44.         //獲得jedis 連接對(duì)象    
  45.         Jedis jedis = jedisPool.getResource();    
  46.         System.out.println("鏈接池       "+ jedis.lindex("list", 0)+"    "+ jedis.lindex("list", 1)+"    "+jedis.lindex("list", 2)+"    "+jedis.lindex("list", 3));  
  47.         jedis.close();    
  48.     }    
  49.     /**  
  50.      * 集群連接測(cè)試  
  51.      */    
  52.     @Test    
  53.     public void testJedisCluster(){    
  54.         Set<HostAndPort> nodes = new HashSet<>();    
  55.         nodes.add(new HostAndPort("192.168.0.163", 6379));    
  56.         nodes.add(new HostAndPort("192.168.0.164", 6379));    
  57.         nodes.add(new HostAndPort("192.168.0.165", 6379));    
  58.         nodes.add(new HostAndPort("192.168.0.163", 6380));    
  59.         nodes.add(new HostAndPort("192.168.0.164", 6380));    
  60.         nodes.add(new HostAndPort("192.168.0.165", 6380));    
  61.            
  62.   
  63.         @SuppressWarnings("resource")  
  64.         JedisCluster cluster = new JedisCluster(nodes );    
  65.         cluster.set("key01", "1000");    
  66.      
  67.         System.out.println("集群               "+cluster.get("key01"));    
  68.        
  69.         System.out.println("key2   "+cluster.get("key02"));   
  70.         System.out.println("key7   "+cluster.get("key07"));   
  71.   
  72.     }    
  73.       
  74.       
  75. }    

單純的集群代碼:
  1. package test;    
  2.     
  3. import java.util.HashMap;  
  4. import java.util.HashSet;  
  5. import java.util.Map;  
  6. import java.util.Set;    
  7. import org.junit.Test;  
  8. import redis.clients.jedis.HostAndPort;    
  9. import redis.clients.jedis.JedisCluster;   
  10. public class why123 {    
  11.     
  12.     private String serverInfo = "192.168.0.163:6379,192.168.0.163:6380,192.168.0.164:6379,192.168.0.164:6380,192.168.0.165:6379,192.168.0.165:6380";    
  13.     
  14.     private Set<HostAndPort> getClusterInfo(String serverInfo) {    
  15.         Set<HostAndPort> set = new HashSet<HostAndPort>();    
  16.         if(serverInfo==null||"".equals(serverInfo.length())) {    
  17.             throw new RuntimeException("serverInfo 不能為空");    
  18.         }    
  19.         String ipPort[] = serverInfo.split(",");    
  20.         int len = ipPort.length;    
  21.         for(int i=0;i<len;i++) {    
  22.             String server[] = ipPort[i].split(":");   
  23.             System.out.println(server[0]+"-----------------"+server[1]);  
  24.             set.add(new HostAndPort(server[0], Integer.parseInt(server[1])));    
  25.         }    
  26.         return set;    
  27.     }    
  28.         
  29.     @SuppressWarnings("resource")  
  30.     @Test    
  31.     public void test() {    
  32.     
  33.         Set<HostAndPort> jedisClusterNodes = getClusterInfo(serverInfo);    
  34.         // Jedis 集群嘗試自動(dòng)發(fā)現(xiàn)節(jié)點(diǎn)  
  35.         JedisCluster jc = new JedisCluster(jedisClusterNodes);    
  36.         System.err.println("----------------------------測(cè)試hash------------------------------");  
  37.         System.err.println("---------插入--------");  
  38.         //插入一條  
  39.         jc.hset("aamap", "aa1", "aa11");  
  40.         Map<String,String> maps = new HashMap<String, String>();  
  41.         maps.put("aa2", "aa22");  
  42.         maps.put("aa3", "aa33");  
  43.         //插入多條  
  44.         jc.hmset("aamap", maps);  
  45.         //獲取所有的key  
  46.         System.out.println(jc.hkeys("aamap"));//[aa3, aa2, aa1]  
  47.         //獲取所有的value  
  48.         System.out.println(jc.hvals("aamap"));//[aa33, aa22, aa11]  
  49.         //從map中獲取全部的緩存key-value對(duì)  
  50.         System.out.println(jc.hgetAll("aamap"));//{aa3=aa33, aa2=aa22, aa1=aa11}  
  51.         //從map中獲取相應(yīng)key的緩存value  
  52.         System.out.println(jc.hget("aamap","aa2"));//aa22  
  53.         //從map中獲取多個(gè)key的value,并放在List集合中  
  54.         System.out.println(jc.hmget("aamap","aa2","aa1"));//[aa22, aa11]  
  55.         //獲取map中的key-value數(shù)  
  56.         System.out.println(jc.hlen("aamap"));//3  
  57.         //map中是否存在鍵為key的緩存  
  58.         System.out.println(jc.hexists("aamap","aa3"));//true  
  59.         System.out.println(jc.hexists("aamap","aa0"));//false  
  60.           
  61. //        jc.hdel("aamap","aa0");  
  62. //        jc.hdel("aamap","aa1");  
  63. //        System.out.println(jc.hgetAll("aamap"));//{aa3=aa33, aa2=aa22}  
  64.           
  65.           
  66.     }    
  67.     
  68. }    

redis整理來(lái)源開(kāi)源中國(guó):

二,,Redis整理

1.redis是什么,?

redis(remote dictionary server):是一個(gè)以key-value形式存儲(chǔ)于內(nèi)存中的數(shù)據(jù)庫(kù).提供了 String / List / Set / Sort Set /Hash 五種數(shù)據(jù)結(jié)構(gòu)。服務(wù)器在斷電之后,,仍然可以恢復(fù)到斷電之前的狀態(tài)(另外的解釋:集群是一個(gè)提供在多個(gè)Redis間節(jié)點(diǎn)間共享數(shù)據(jù)的程序集.

2.redis特點(diǎn)?

線程模型:?jiǎn)尉€程-多路復(fù)用io模型

性能高:支持讀 11萬(wàn)/秒  ,,  寫(xiě) 8萬(wàn)/秒

存儲(chǔ): 內(nèi)存 ;  RDB文件(二進(jìn)制安全的真實(shí)數(shù)據(jù)) ;  AOF文件(客戶端的命令集合)

事務(wù): 支持事務(wù)(每個(gè)客戶端串行執(zhí)行命令,其他客戶端處于阻塞狀態(tài))

3.redis數(shù)據(jù)類型

String:動(dòng)態(tài)字符串(每個(gè)key都是一個(gè)String)

編碼方式:int / raw() /embstr

應(yīng)用場(chǎng)景:普通的string場(chǎng)景

List:列表結(jié)構(gòu),,有序可重復(fù)的結(jié)構(gòu),。它擁有隊(duì)列的特性。 

編碼方式:ziplist / linkedlist (如果數(shù)據(jù)量較小,,且是數(shù)字或者字符串,,則內(nèi)部結(jié)構(gòu)為 ziplist)

應(yīng)用場(chǎng)景:普通的集合數(shù)據(jù)

Set:集合結(jié)構(gòu),不重復(fù)的集合結(jié)構(gòu),。

編碼方式:intset(整數(shù)集合) / hashtable

應(yīng)用場(chǎng)景:普通的非重復(fù)集合數(shù)據(jù);支持取交集,、取并集等操作

Sort Set:有序集合結(jié)構(gòu),和Set比較起來(lái),,它是有序的,。

編碼方式:ziplist / skiplist

應(yīng)用場(chǎng)景:有序不重復(fù)的集合數(shù)據(jù)

Hash:哈希結(jié)構(gòu),存儲(chǔ)多個(gè)key:value的結(jié)構(gòu),此種結(jié)構(gòu)可以存儲(chǔ)對(duì)象 ,;  如  HMSET  user(key)  username value1 password value2

編碼方式:ziplist / hashtable

應(yīng)用場(chǎng)景: 從關(guān)系型數(shù)據(jù)庫(kù)去出一條數(shù)據(jù),,就可以讓入到此種結(jié)構(gòu)中

4.內(nèi)存優(yōu)化

redis提供內(nèi)存回收策略,根據(jù)使用的情況可以選擇適當(dāng)?shù)幕厥詹呗?/p>

redis提供內(nèi)存共享策略,,服務(wù)器啟動(dòng)時(shí),,會(huì)自動(dòng)創(chuàng)建0-9999的數(shù)字對(duì)象,其他地方使用,,可以直接引用,。

本質(zhì):對(duì)內(nèi)存的操作,其實(shí)是在每一個(gè)redis對(duì)象結(jié)構(gòu)內(nèi)都有一個(gè)count的屬性,,該屬性記錄了這個(gè)對(duì)象被引用的次數(shù),,如果為0,,那么在內(nèi)存回收時(shí)將回收該空間。

save參數(shù)調(diào)整:當(dāng)滿足條件時(shí),,觸發(fā)SAVE命令,,持久化到RDB文件

appendonly參數(shù): 默認(rèn)no ,若yes,則開(kāi)啟AOF文件持久化,; BGREWRITEAOF  命令 持久化,。其中appendsync參數(shù)調(diào)整具體的持久化策略,默認(rèn)為每秒

5.事務(wù)

單線程處理所有客戶端發(fā)來(lái)的請(qǐng)求,,所以當(dāng)有一個(gè)客戶端在執(zhí)行,,其他客戶端只能處于阻塞態(tài)。只有當(dāng)前客戶端請(qǐng)求完畢,,其他客戶端才能請(qǐng)求


6.主從復(fù)制

功能:數(shù)據(jù)備份,讀寫(xiě)分離(測(cè)試環(huán)境,,主服務(wù)器寫(xiě),,從服務(wù)器讀)

步驟:在從服務(wù)端器執(zhí)行: slaveof <masterip> <masterport> 即可維持關(guān)系;配置文件中也可以

特點(diǎn):

1.master可以有多個(gè)slave

2.除了多個(gè)slave連到相同的master外,,slave也可以連接其他slave形成圖狀結(jié)構(gòu)

3.主從復(fù)制不會(huì)阻塞master,。也就是說(shuō)當(dāng)一個(gè)或多個(gè)slave與master進(jìn)行初次同步數(shù)據(jù)時(shí),master可以繼續(xù)處理client發(fā)來(lái)的請(qǐng)求,。相反slave在初次同步數(shù)據(jù)時(shí)則會(huì)阻塞不能處理client的請(qǐng)求,。

4.主從復(fù)制可以用來(lái)提高系統(tǒng)的可伸縮性,我們可以用多個(gè)slave 專門(mén)用于client的讀請(qǐng)求,比如sort操作可以使用slave來(lái)處理,。也可以用來(lái)做簡(jiǎn)單的數(shù)據(jù)冗余

5.可以在master禁用數(shù)據(jù)持久化,,只需要注釋掉master 配置文件中的所有save配置,然后只在slave上配置數(shù)據(jù)持久化,。

  6.主服務(wù)器可以關(guān)閉持久化功能(注釋掉save參數(shù))

 

7.sentinel(監(jiān)測(cè)系統(tǒng))

本質(zhì):是一個(gè)運(yùn)行在特殊模式下的redis服務(wù)器,。

功能:監(jiān)控運(yùn)行在多機(jī)上的主redis服務(wù)器,若有某一臺(tái)主服務(wù)器出現(xiàn)故障,,將自動(dòng)把其他正常的從服務(wù)器切換為主服務(wù)器,,代替出現(xiàn)故障主服務(wù)器的工作。

特點(diǎn):

1.不發(fā)揮數(shù)據(jù)庫(kù)的功能(所有對(duì)key以及數(shù)據(jù)類型操作的命令不能使用)

2.將會(huì)給監(jiān)控的主服務(wù)器以及主服務(wù)器所屬的從服務(wù)器發(fā)送命令,,確認(rèn)是否下線

3.會(huì)和監(jiān)控同一個(gè)主服務(wù)器的其他sentinel服務(wù)器通信,,作用是在共同判斷所監(jiān)控的主服務(wù)器的狀態(tài)

4.根據(jù)多個(gè)sentinel判斷的主服務(wù)器狀態(tài),來(lái)決定是否要進(jìn)行主從切換,,故障轉(zhuǎn)移等

轉(zhuǎn)移:sentinel監(jiān)控的主服務(wù)器配置參數(shù)要在 sentinel.conf 文件中配置,,啟動(dòng)時(shí)加載

8.集群

功能:將眾多的key-value集合存在多個(gè)節(jié)點(diǎn)上,當(dāng)某一個(gè)節(jié)點(diǎn)出現(xiàn)障礙,,不影響整個(gè)集群的功能,。

涉及到的關(guān)鍵詞:

節(jié)點(diǎn):一個(gè)端口的redis服務(wù)便是一個(gè)節(jié)點(diǎn)

槽指派(集群將整個(gè)系統(tǒng)分為16384個(gè)hash槽):這16384個(gè)槽位要全部分布在集群中的主節(jié)點(diǎn)上,。

重新分片:若某個(gè)主節(jié)點(diǎn)故障了,將該主節(jié)點(diǎn)的槽位分配到其他可以用的主節(jié)點(diǎn)上,。

上線/下線狀態(tài): 是否全部的槽位都分布在節(jié)點(diǎn)上,。

特點(diǎn):

1.如果某個(gè)節(jié)點(diǎn)要集群,必須要設(shè)置cluster-enabled yes

2.每個(gè)節(jié)點(diǎn)都有這16384個(gè)槽位所屬的節(jié)點(diǎn)信息,,如果值沒(méi)有正確進(jìn)入槽位,,那么該節(jié)點(diǎn)會(huì)提示系統(tǒng)將信息放入正確槽位。重定向的過(guò)程會(huì)出現(xiàn)一個(gè)面向客戶端隱藏的MOVED錯(cuò)誤

3.集群在線狀態(tài)也可以進(jìn)行重新分片

4.集群中的主節(jié)點(diǎn)用戶處理客戶端命令,,從節(jié)點(diǎn)用于復(fù)制主節(jié)點(diǎn)的數(shù)據(jù),,主節(jié)點(diǎn)下線時(shí),從節(jié)點(diǎn)代替主節(jié)點(diǎn)的工作

//注意:目前官方提供的集群功能仍處于內(nèi)測(cè)版本,。

9.redis基準(zhǔn)

redis自帶的redis-benchmark 工具,,支持各種參數(shù)進(jìn)行性能測(cè)試

特點(diǎn):

1.可以模擬多個(gè)客戶端處理任意個(gè)請(qǐng)求

2.可以測(cè)試僅僅少數(shù)使用的命令等

注意:測(cè)試發(fā)現(xiàn),linux環(huán)境下部署的redis服務(wù)器性能遠(yuǎn)高于windows下部署的redis服務(wù)器性能,, 不在一個(gè)層級(jí)上面

10.關(guān)系數(shù)據(jù)庫(kù)模型的轉(zhuǎn)換

關(guān)系型數(shù)據(jù)庫(kù)表結(jié)構(gòu):user表 (uid username password birthday )

在redis中可以這樣存在:

1.主鍵: SET user:uid 1  ,、  GET user:1

2.其他字段:SET user:uid:username  GET user:5:username ( 5 是通過(guò)參數(shù)值傳進(jìn)來(lái)的)

3.表數(shù)據(jù)也可以存在hash結(jié)構(gòu)中:      HMSET user:uid username value1 password value2 birthday value3

11.管道

功能:客戶端一次可以傳送多個(gè)命令到服務(wù)器,減少往返時(shí)延,。大大提高性能,。

12.優(yōu)化

redis提供一些簡(jiǎn)單的內(nèi)存優(yōu)化策略,如過(guò)期數(shù)據(jù)清除,,內(nèi)存數(shù)據(jù)共享,。



    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多