- [redis ç®ä»](#redis-ç®ä») - [为ä»ä¹è¦ç¨ redis /为ä»ä¹è¦ç¨ç¼å](#为ä»ä¹è¦ç¨-redis-为ä»ä¹è¦ç¨ç¼å) - [为ä»ä¹è¦ç¨ redis èä¸ç¨ map/guava åç¼å?](#为ä»ä¹è¦ç¨-redis-èä¸ç¨-mapguava-åç¼å) - [redis å memcached çåºå«](#redis-å-memcached-çåºå«) - [redis å¸¸è§æ°æ®ç»æä»¥å使ç¨åºæ¯åæ](#redis-å¸¸è§æ°æ®ç»æä»¥å使ç¨åºæ¯åæ) - [1. String](#1-string) - [2.Hash](#2hash) - [3.List](#3list) - [4.Set](#4set) - [5.Sorted Set](#5sorted-set) - [redis è®¾ç½®è¿ææ¶é´](#redis-è®¾ç½®è¿ææ¶é´) - [redis å åæ·æ±°æºå¶ï¼MySQLéæ2000wæ°æ®ï¼Redisä¸åªå20wçæ°æ®ï¼å¦ä½ä¿è¯Redisä¸çæ°æ®é½æ¯çç¹æ°æ®ï¼ï¼](#redis-å åæ·æ±°æºå¶ï¼mysqléæ2000wæ°æ®ï¼redisä¸åªå20wçæ°æ®ï¼å¦ä½ä¿è¯redisä¸çæ°æ®é½æ¯çç¹æ°æ®ï¼ï¼) - [redis æä¹ åæºå¶ï¼æä¹ä¿è¯ redis ææä¹ååé坿°æ®å¯ä»¥è¿è¡æ¢å¤ï¼](#redis-æä¹ åæºå¶ï¼æä¹ä¿è¯-redis-ææä¹ååé坿°æ®å¯ä»¥è¿è¡æ¢å¤ï¼) - [redis äºå¡](#redis-äºå¡) - [ç¼åéªå´©åç¼åç©¿éé®é¢è§£å³æ¹æ¡](#ç¼åéªå´©åç¼åç©¿éé®é¢è§£å³æ¹æ¡) - [å¦ä½è§£å³ Redis çå¹¶åç«äº Key é®é¢](#å¦ä½è§£å³-redis-çå¹¶åç«äº-key-é®é¢) - [å¦ä½ä¿è¯ç¼å䏿°æ®åºååæ¶çæ°æ®ä¸è´æ§ï¼](#å¦ä½ä¿è¯ç¼å䏿°æ®åºååæ¶çæ°æ®ä¸è´æ§ï¼) - [åèï¼](#åèï¼) ### redis ç®ä» ç®åæ¥è¯´ redis å°±æ¯ä¸ä¸ªæ°æ®åºï¼ä¸è¿ä¸ä¼ ç»æ°æ®åºä¸åçæ¯ redis çæ°æ®æ¯åå¨å åä¸çï¼æä»¥ååé度é常快ï¼å æ¤ redis 被广æ³åºç¨äºç¼åæ¹åãå¦å¤ï¼redis ä¹ç»å¸¸ç¨æ¥ååå¸å¼éãredis æä¾äºå¤ç§æ°æ®ç±»åæ¥æ¯æä¸åçä¸å¡åºæ¯ã餿¤ä¹å¤ï¼redis æ¯æäºå¡ ãæä¹ åãLUAèæ¬ãLRU驱å¨äºä»¶ãå¤ç§éç¾¤æ¹æ¡ã ### 为ä»ä¹è¦ç¨ redis /为ä»ä¹è¦ç¨ç¼å 主è¦ä»â髿§è½âåâé«å¹¶åâè¿ä¸¤ç¹æ¥çå¾ è¿ä¸ªé®é¢ã **髿§è½ï¼** åå¦ç¨æ·ç¬¬ä¸æ¬¡è®¿é®æ°æ®åºä¸çæäºæ°æ®ãè¿ä¸ªè¿ç¨ä¼æ¯è¾æ ¢ï¼å 为æ¯ä»ç¡¬çä¸è¯»åçãå°è¯¥ç¨æ·è®¿é®çæ°æ®å卿°ç¼åä¸ï¼è¿æ ·ä¸ä¸æ¬¡å访é®è¿äºæ°æ®çæ¶åå°±å¯ä»¥ç´æ¥ä»ç¼åä¸è·åäºãæä½ç¼åå°±æ¯ç´æ¥æä½å åï¼æä»¥é度ç¸å½å¿«ãå¦ææ°æ®åºä¸çå¯¹åºæ°æ®æ¹åçä¹åï¼åæ¥æ¹åç¼åä¸ç¸åºçæ°æ®å³å¯ï¼  **é«å¹¶åï¼** ç´æ¥æä½ç¼åè½å¤æ¿åçè¯·æ±æ¯è¿è¿å¤§äºç´æ¥è®¿é®æ°æ®åºçï¼æä»¥æä»¬å¯ä»¥èèææ°æ®åºä¸çé¨åæ°æ®è½¬ç§»å°ç¼åä¸å»ï¼è¿æ ·ç¨æ·çä¸é¨å请æ±ä¼ç´æ¥å°ç¼åè¿éèä¸ç¨ç»è¿æ°æ®åºã  ### 为ä»ä¹è¦ç¨ redis èä¸ç¨ map/guava åç¼å? >ä¸é¢çå 容æ¥èª segmentfault ä¸ä½ç½åçæé®ï¼å°åï¼https://segmentfault.com/q/1010000009106416 ç¼åå为æ¬å°ç¼åååå¸å¼ç¼åã以 Java 为ä¾ï¼ä½¿ç¨èªå¸¦ç map æè guava å®ç°çæ¯æ¬å°ç¼åï¼æä¸»è¦çç¹ç¹æ¯è½»é以åå¿«éï¼çå½å¨æéç jvm ç鿝èç»æï¼å¹¶ä¸å¨å¤å®ä¾çæ åµä¸ï¼æ¯ä¸ªå®ä¾é½éè¦åèªä¿åä¸ä»½ç¼åï¼ç¼åä¸å ·æä¸è´æ§ã ä½¿ç¨ redis æ memcached ä¹ç±»ç称为åå¸å¼ç¼åï¼å¨å¤å®ä¾çæ åµä¸ï¼åå®ä¾å ±ç¨ä¸ä»½ç¼åæ°æ®ï¼ç¼åå ·æä¸è´æ§ãç¼ºç¹æ¯éè¦ä¿æ redis æ memcachedæå¡çé«å¯ç¨ï¼æ´ä¸ªç¨åºæ¶æä¸è¾ä¸ºå¤æã ### redis å memcached çåºå« å¯¹äº redis å memcached ææ»ç»äºä¸é¢åç¹ãç°å¨å ¬å¸ä¸è¬é½æ¯ç¨ redis æ¥å®ç°ç¼åï¼èä¸ redis èªèº«ä¹è¶æ¥è¶å¼ºå¤§äºï¼ 1. **redisæ¯ææ´ä¸°å¯çæ°æ®ç±»åï¼æ¯ææ´å¤æçåºç¨åºæ¯ï¼**ï¼Redisä¸ä» ä» æ¯æç®åçk/vç±»åçæ°æ®ï¼åæ¶è¿æä¾listï¼setï¼zsetï¼hashçæ°æ®ç»æçåå¨ãmemcacheæ¯æç®åçæ°æ®ç±»åï¼Stringã 2. **Redisæ¯ææ°æ®çæä¹ åï¼å¯ä»¥å°å åä¸çæ°æ®ä¿æå¨ç£çä¸ï¼éå¯çæ¶åå¯ä»¥å次å è½½è¿è¡ä½¿ç¨,èMemecacheææ°æ®å ¨é¨åå¨å åä¹ä¸ã** 3. **é群模å¼**ï¼memcached没æåççé群模å¼ï¼éè¦ä¾é 客æ·ç«¯æ¥å®ç°å¾é群ä¸åçåå ¥æ°æ®ï¼ä½æ¯ redis ç®åæ¯åçæ¯æ cluster 模å¼ç. 4. **Memcachedæ¯å¤çº¿ç¨ï¼éé»å¡IOå¤ç¨çç½ç»æ¨¡åï¼Redis使ç¨å线ç¨çå¤è·¯ IO å¤ç¨æ¨¡åã** > æ¥èªç½ç»ä¸çä¸å¼ å¾ï¼è¿éå享ç»å¤§å®¶ï¼  ### redis å¸¸è§æ°æ®ç»æä»¥å使ç¨åºæ¯åæ #### 1. String > **常ç¨å½ä»¤:** set,get,decr,incr,mget çã Stringæ°æ®ç»ææ¯ç®åçkey-valueç±»åï¼valueå ¶å®ä¸ä» å¯ä»¥æ¯Stringï¼ä¹å¯ä»¥æ¯æ°åã 常è§key-valueç¼ååºç¨ï¼ 常è§è®¡æ°ï¼å¾®åæ°ï¼ç²ä¸æ°çã #### 2.Hash > **常ç¨å½ä»¤ï¼** hget,hset,hgetall çã Hash æ¯ä¸ä¸ª string ç±»åç field å value çæ å°è¡¨ï¼hash ç¹å«éåç¨äºåå¨å¯¹è±¡ï¼åç»æä½çæ¶åï¼ä½ å¯ä»¥ç´æ¥ä» ä» ä¿®æ¹è¿ä¸ªå¯¹è±¡ä¸çæä¸ªå段çå¼ã æ¯å¦æä»¬å¯ä»¥Hashæ°æ®ç»ææ¥åå¨ç¨æ·ä¿¡æ¯ï¼ååä¿¡æ¯ççãæ¯å¦ä¸é¢æå°±ç¨ hash ç±»ååæ¾äºææ¬äººçä¸äºä¿¡æ¯ï¼ ``` key=JavaUser293847 value={ âidâ: 1, ânameâ: âSnailClimbâ, âageâ: 22, âlocationâ: âWuhan, Hubeiâ } ``` #### 3.List > **常ç¨å½ä»¤:** lpush,rpush,lpop,rpop,lrangeç list å°±æ¯é¾è¡¨ï¼Redis list çåºç¨åºæ¯é常å¤ï¼ä¹æ¯Redisæéè¦çæ°æ®ç»æä¹ä¸ï¼æ¯å¦å¾®åçå ³æ³¨å表ï¼ç²ä¸åè¡¨ï¼æ¶æ¯å表çåè½é½å¯ä»¥ç¨Redisç list ç»ææ¥å®ç°ã Redis list çå®ç°ä¸ºä¸ä¸ªååé¾è¡¨ï¼å³å¯ä»¥æ¯æå忥æ¾åéåï¼æ´æ¹ä¾¿æä½ï¼ä¸è¿å¸¦æ¥äºé¨åé¢å¤çå åå¼éã å¦å¤å¯ä»¥éè¿ lrange å½ä»¤ï¼å°±æ¯ä»æä¸ªå ç´ å¼å§è¯»åå¤å°ä¸ªå ç´ ï¼å¯ä»¥åºäº list å®ç°å页æ¥è¯¢ï¼è¿ä¸ªå¾æ£çä¸ä¸ªåè½ï¼åºäº redis å®ç°ç®åç髿§è½å页ï¼å¯ä»¥å类似微åé£ç§ä¸æä¸æå页çä¸è¥¿ï¼ä¸é¡µä¸é¡µçå¾ä¸èµ°ï¼ï¼æ§è½é«ã #### 4.Set > **常ç¨å½ä»¤ï¼** sadd,spop,smembers,sunion ç set 坹夿ä¾çåè½ä¸list类似æ¯ä¸ä¸ªå表çåè½ï¼ç¹æ®ä¹å¤å¨äº set æ¯å¯ä»¥èªå¨æéçã å½ä½ éè¦åå¨ä¸ä¸ªåè¡¨æ°æ®ï¼åä¸å¸æåºç°é夿°æ®æ¶ï¼setæ¯ä¸ä¸ªå¾å¥½çéæ©ï¼å¹¶ä¸setæä¾äºå¤ææä¸ªæåæ¯å¦å¨ä¸ä¸ªsetéåå çéè¦æ¥å£ï¼è¿ä¸ªä¹æ¯listæä¸è½æä¾çãå¯ä»¥åºäº set è½»æå®ç°äº¤éãå¹¶éãå·®éçæä½ã æ¯å¦ï¼å¨å¾®ååºç¨ä¸ï¼å¯ä»¥å°ä¸ä¸ªç¨æ·ææçå ³æ³¨äººåå¨ä¸ä¸ªéåä¸ï¼å°å ¶ææç²ä¸åå¨ä¸ä¸ªéåãRediså¯ä»¥é常æ¹ä¾¿çå®ç°å¦å ±åå ³æ³¨ãå ±åç²ä¸ãå ±åå好çåè½ãè¿ä¸ªè¿ç¨ä¹å°±æ¯æ±äº¤éçè¿ç¨ï¼å ·ä½å½ä»¤å¦ä¸ï¼ ``` sinterstore key1 key2 key3 å°äº¤éåå¨key1å ``` #### 5.Sorted Set > **常ç¨å½ä»¤ï¼** zadd,zrange,zrem,zcardç åsetç¸æ¯ï¼sorted setå¢å äºä¸ä¸ªæéåæ°scoreï¼ä½¿å¾éåä¸çå ç´ è½å¤æscoreè¿è¡æåºæåã **举ä¾ï¼** å¨ç´æç³»ç»ä¸ï¼å®æ¶æè¡ä¿¡æ¯å å«ç´æé´å¨çº¿ç¨æ·å表ï¼åç§ç¤¼ç©æè¡æ¦ï¼å¼¹å¹æ¶æ¯ï¼å¯ä»¥çè§£ä¸ºææ¶æ¯ç»´åº¦çæ¶æ¯æè¡æ¦ï¼çä¿¡æ¯ï¼éåä½¿ç¨ Redis ä¸ç SortedSet ç»æè¿è¡åå¨ã ### redis è®¾ç½®è¿ææ¶é´ Redisä¸æä¸ªè®¾ç½®æ¶é´è¿æçåè½ï¼å³å¯¹åå¨å¨ redis æ°æ®åºä¸çå¼å¯ä»¥è®¾ç½®ä¸ä¸ªè¿ææ¶é´ãä½ä¸ºä¸ä¸ªç¼åæ°æ®åºï¼è¿æ¯é常å®ç¨çã妿们ä¸è¬é¡¹ç®ä¸ç token æè ä¸äºç»å½ä¿¡æ¯ï¼å°¤å ¶æ¯çä¿¡éªè¯ç 齿¯ææ¶é´éå¶çï¼æç §ä¼ ç»çæ°æ®åºå¤çæ¹å¼ï¼ä¸è¬é½æ¯èªå·±å¤æè¿æï¼è¿æ ·æ çä¼ä¸¥éå½±åé¡¹ç®æ§è½ã æä»¬ set key çæ¶åï¼é½å¯ä»¥ç»ä¸ä¸ª expire timeï¼å°±æ¯è¿ææ¶é´ï¼éè¿è¿ææ¶é´æä»¬å¯ä»¥æå®è¿ä¸ª key å¯ä»¥åæ´»çæ¶é´ã 妿åè®¾ä½ è®¾ç½®äºä¸æ¹ key åªè½åæ´»1ä¸ªå°æ¶ï¼é£ä¹æ¥ä¸æ¥1å°æ¶åï¼redisæ¯æä¹å¯¹è¿æ¹keyè¿è¡å é¤çï¼ **宿å é¤+æ°æ§å é¤ã** éè¿åå大æ¦å°±è½çåºè¿ä¸¤ä¸ªå 餿¹å¼çææäºã - **宿å é¤**ï¼redisé»è®¤æ¯æ¯é 100ms å°±**éæºæ½å**ä¸äºè®¾ç½®äºè¿ææ¶é´çkeyï¼æ£æ¥å ¶æ¯å¦è¿æï¼å¦æè¿æå°±å é¤ã注æè¿éæ¯éæºæ½åçã为ä»ä¹è¦éæºå¢ï¼ä½ æ³ä¸æ³åå¦ redis åäºå åä¸ä¸ª key ï¼æ¯é100mså°±éåææçè®¾ç½®è¿ææ¶é´ç key çè¯ï¼å°±ä¼ç» CPU 带æ¥å¾å¤§çè´è½½ï¼ - **æ°æ§å é¤** ï¼å®æå é¤å¯è½ä¼å¯¼è´å¾å¤è¿æ key å°äºæ¶é´å¹¶æ²¡æè¢«å 餿ãæä»¥å°±æäºæ°æ§å é¤ãåå¦ä½ çè¿æ keyï¼é 宿å 餿²¡æè¢«å 餿ï¼è¿åçå¨å åéï¼é¤éä½ çç³»ç»å»æ¥ä¸ä¸é£ä¸ª keyï¼æä¼è¢«redisç»å 餿ãè¿å°±æ¯æè°çæ°æ§å é¤ï¼ä¹æ¯å¤æçåï¼ ä½æ¯ä» ä» éè¿è®¾ç½®è¿ææ¶é´è¿æ¯æé®é¢çãæä»¬æ³ä¸ä¸ï¼å¦æå®æå 餿¼æäºå¾å¤è¿æ keyï¼ç¶åä½ ä¹æ²¡åæ¶å»æ¥ï¼ä¹å°±æ²¡èµ°æ°æ§å é¤ï¼æ¤æ¶ä¼æä¹æ ·ï¼å¦æå¤§éè¿ækeyå 积å¨å åéï¼å¯¼è´rediså ååèå°½äºãæä¹è§£å³è¿ä¸ªé®é¢å¢ï¼ **redis å åæ·æ±°æºå¶ã** ### redis å åæ·æ±°æºå¶ï¼MySQLéæ2000wæ°æ®ï¼Redisä¸åªå20wçæ°æ®ï¼å¦ä½ä¿è¯Redisä¸çæ°æ®é½æ¯çç¹æ°æ®ï¼ï¼ redis é ç½®æä»¶ redis.conf 䏿ç¸å ³æ³¨éï¼æè¿éå°±ä¸è´´äºï¼å¤§å®¶å¯ä»¥èªè¡æ¥é æè éè¿è¿ä¸ªç½åæ¥çï¼ [http://download.redis.io/redis-stable/redis.conf](http://download.redis.io/redis-stable/redis.conf) **redis æä¾ 6ç§æ°æ®æ·æ±°çç¥ï¼** 1. **volatile-lru**ï¼ä»å·²è®¾ç½®è¿ææ¶é´çæ°æ®éï¼server.db[i].expiresï¼ä¸æéæè¿æå°ä½¿ç¨çæ°æ®æ·æ±° 2. **volatile-ttl**ï¼ä»å·²è®¾ç½®è¿ææ¶é´çæ°æ®éï¼server.db[i].expiresï¼ä¸æéå°è¦è¿æçæ°æ®æ·æ±° 3. **volatile-random**ï¼ä»å·²è®¾ç½®è¿ææ¶é´çæ°æ®éï¼server.db[i].expiresï¼ä¸ä»»æéæ©æ°æ®æ·æ±° 4. **allkeys-lru**ï¼å½å åä¸è¶³ä»¥å®¹çº³æ°åå ¥æ°æ®æ¶ï¼å¨é®ç©ºé´ä¸ï¼ç§»é¤æè¿æå°ä½¿ç¨çkeyï¼è¿ä¸ªæ¯æå¸¸ç¨çï¼. 5. **allkeys-random**ï¼ä»æ°æ®éï¼server.db[i].dictï¼ä¸ä»»æéæ©æ°æ®æ·æ±° 6. **no-eviction**ï¼ç¦æ¢é©±éæ°æ®ï¼ä¹å°±æ¯è¯´å½å åä¸è¶³ä»¥å®¹çº³æ°åå ¥æ°æ®æ¶ï¼æ°åå ¥æä½ä¼æ¥éãè¿ä¸ªåºè¯¥æ²¡äººä½¿ç¨å§ï¼ **夿³¨ï¼ å ³äº redis è®¾ç½®è¿ææ¶é´ä»¥åå åæ·æ±°æºå¶ï¼æè¿éåªæ¯ç®åçæ»ç»ä¸ä¸ï¼åé¢ä¼ä¸é¨åä¸ç¯æç« æ¥æ»ç»ï¼** ### redis æä¹ åæºå¶ï¼æä¹ä¿è¯ redis ææä¹ååé坿°æ®å¯ä»¥è¿è¡æ¢å¤ï¼ å¾å¤æ¶åæä»¬éè¦æä¹ åæ°æ®ä¹å°±æ¯å°å åä¸çæ°æ®åå ¥å°ç¡¬çéé¢ï¼å¤§é¨ååå æ¯ä¸ºäºä¹åéç¨æ°æ®ï¼æ¯å¦é坿ºå¨ãæºå¨æ éä¹åå夿°æ®ï¼ï¼æè æ¯ä¸ºäºé²æ¢ç³»ç»æ éèå°æ°æ®å¤ä»½å°ä¸ä¸ªè¿ç¨ä½ç½®ã Redisä¸åäºMemcachedçå¾éä¸ç¹å°±æ¯ï¼Redisæ¯ææä¹ åï¼è䏿¯æä¸¤ç§ä¸åçæä¹ åæä½ã**Redisçä¸ç§æä¹ åæ¹å¼å«å¿«ç §ï¼snapshottingï¼RDBï¼,å¦ä¸ç§æ¹å¼æ¯åªè¿½å æä»¶ï¼append-only file,AOFï¼**.è¿ä¸¤ç§æ¹æ³åæåç§ï¼ä¸é¢æä¼è¯¦ç»è¿ä¸¤ç§æä¹ åæ¹æ³æ¯ä»ä¹ï¼æä¹ç¨ï¼å¦ä½éæ©éåèªå·±çæä¹ åæ¹æ³ã **å¿«ç §ï¼snapshottingï¼æä¹ åï¼RDBï¼** Rediså¯ä»¥éè¿åå»ºå¿«ç §æ¥è·å¾åå¨å¨å åéé¢çæ°æ®å¨æä¸ªæ¶é´ç¹ä¸ç坿¬ãRedisåå»ºå¿«ç §ä¹åï¼å¯ä»¥å¯¹å¿«ç §è¿è¡å¤ä»½ï¼å¯ä»¥å°å¿«ç §å¤å¶å°å ¶ä»æå¡å¨ä»èåå»ºå ·æç¸åæ°æ®çæå¡å¨å¯æ¬ï¼Redis主ä»ç»æï¼ä¸»è¦ç¨æ¥æé«Redisæ§è½ï¼ï¼è¿å¯ä»¥å°å¿«ç §çå¨åå°ä»¥ä¾¿é坿å¡å¨çæ¶å使ç¨ã å¿«ç §æä¹ 忝Redisé»è®¤éç¨çæä¹ åæ¹å¼ï¼å¨redis.confé ç½®æä»¶ä¸é»è®¤ææ¤ä¸é ç½®ï¼ ```conf save 900 1 #å¨900ç§(15åé)ä¹åï¼å¦æè³å°æ1个keyåçååï¼Rediså°±ä¼èªå¨è§¦åBGSAVEå½ä»¤åå»ºå¿«ç §ã save 300 10 #å¨300ç§(5åé)ä¹åï¼å¦æè³å°æ10个keyåçååï¼Rediså°±ä¼èªå¨è§¦åBGSAVEå½ä»¤åå»ºå¿«ç §ã save 60 10000 #å¨60ç§(1åé)ä¹åï¼å¦æè³å°æ10000个keyåçååï¼Rediså°±ä¼èªå¨è§¦åBGSAVEå½ä»¤åå»ºå¿«ç §ã ``` **AOFï¼append-only fileï¼æä¹ å** ä¸å¿«ç §æä¹ åç¸æ¯ï¼AOFæä¹ å ç宿¶æ§æ´å¥½ï¼å æ¤å·²æä¸ºä¸»æµçæä¹ åæ¹æ¡ãé»è®¤æ åµä¸Redis没æå¼å¯AOFï¼append only fileï¼æ¹å¼çæä¹ åï¼å¯ä»¥éè¿appendonlyåæ°å¼å¯ï¼ ```conf appendonly yes ``` å¼å¯AOFæä¹ å忝æ§è¡ä¸æ¡ä¼æ´æ¹Redisä¸çæ°æ®çå½ä»¤ï¼Rediså°±ä¼å°è¯¥å½ä»¤åå ¥ç¡¬çä¸çAOFæä»¶ãAOFæä»¶çä¿åä½ç½®åRDBæä»¶çä½ç½®ç¸åï¼é½æ¯éè¿diråæ°è®¾ç½®çï¼é»è®¤çæä»¶åæ¯appendonly.aofã å¨Redisçé ç½®æä»¶ä¸åå¨ä¸ç§ä¸åç AOF æä¹ åæ¹å¼ï¼å®ä»¬å嫿¯ï¼ ```conf appendfsync always #æ¯æ¬¡ææ°æ®ä¿®æ¹åçæ¶é½ä¼åå ¥AOFæä»¶,è¿æ ·ä¼ä¸¥ééä½Redisçé度 appendfsync everysec #æ¯ç§é忥䏿¬¡ï¼æ¾ç¤ºå°å°å¤ä¸ªåå½ä»¤åæ¥å°ç¡¬ç appendfsync no #让æä½ç³»ç»å³å®ä½æ¶è¿è¡åæ¥ ``` 为äºå ¼é¡¾æ°æ®ååå ¥æ§è½ï¼ç¨æ·å¯ä»¥èè appendfsync everysecé项 ï¼è®©Redisæ¯ç§åæ¥ä¸æ¬¡AOFæä»¶ï¼Redisæ§è½å 乿²¡åå°ä»»ä½å½±åãèä¸è¿æ ·å³ä½¿åºç°ç³»ç»å´©æºï¼ç¨æ·æå¤åªä¼ä¸¢å¤±ä¸ç§ä¹å 产ççæ°æ®ãå½ç¡¬çå¿äºæ§è¡åå ¥æä½çæ¶åï¼Redisè¿ä¼ä¼é çæ¾æ ¢èªå·±çé度以便éåºç¡¬ççæå¤§åå ¥é度ã **Redis 4.0 å¯¹äºæä¹ åæºå¶çä¼å** Redis 4.0 å¼å§æ¯æ RDB å AOF çæ··åæä¹ åï¼é»è®¤å ³éï¼å¯ä»¥éè¿é 置项 `aof-use-rdb-preamble` å¼å¯ï¼ã å¦æææ··åæä¹ åæå¼ï¼AOF éåçæ¶åå°±ç´æ¥æ RDB çå 容åå° AOF æä»¶å¼å¤´ãè¿æ ·åç好夿¯å¯ä»¥ç»å RDB å AOF çä¼ç¹, å¿«éå è½½åæ¶é¿å 丢失è¿å¤çæ°æ®ãå½ç¶ç¼ºç¹ä¹æ¯æçï¼ AOF éé¢ç RDB é¨åæ¯åç¼©æ ¼å¼ä¸åæ¯ AOF æ ¼å¼ï¼å¯è¯»æ§è¾å·®ã **è¡¥å å 容ï¼AOF éå** AOFéåå¯ä»¥äº§çä¸ä¸ªæ°çAOFæä»¶ï¼è¿ä¸ªæ°çAOFæä»¶ååæçAOFæä»¶æä¿åçæ°æ®åºç¶æä¸æ ·ï¼ä½ä½ç§¯æ´å°ã AOFé忝ä¸ä¸ªææ§ä¹çååï¼è¯¥åè½æ¯éè¿è¯»åæ°æ®åºä¸çé®å¼å¯¹æ¥å®ç°çï¼ç¨åºæ é¡»å¯¹ç°æAOFæä»¶è¿è¡ä»»ä¼ºè¯»å ¥ãåææè åå ¥æä½ã 卿§è¡ BGREWRITEAOF å½ä»¤æ¶ï¼Redis æå¡å¨ä¼ç»´æ¤ä¸ä¸ª AOF éåç¼å²åºï¼è¯¥ç¼å²åºä¼å¨åè¿ç¨å建æ°AOFæä»¶æé´ï¼è®°å½æå¡å¨æ§è¡çææåå½ä»¤ãå½åè¿ç¨å®æå建æ°AOFæä»¶çå·¥ä½ä¹åï¼æå¡å¨ä¼å°éåç¼å²åºä¸çææå 容追å å°æ°AOFæä»¶çæ«å°¾ï¼ä½¿å¾æ°æ§ä¸¤ä¸ªAOFæä»¶æä¿åçæ°æ®åºç¶æä¸è´ãæåï¼æå¡å¨ç¨æ°çAOFæä»¶æ¿æ¢æ§çAOFæä»¶ï¼ä»¥æ¤æ¥å®æAOFæä»¶éåæä½ **æ´å¤å 容å¯ä»¥æ¥çæçè¿ç¯æç« ï¼** - [https://github.com/Snailclimb/JavaGuide/blob/master/æ°æ®åå¨/Redis/Redisæä¹ å.md](https://github.com/Snailclimb/JavaGuide/blob/master/æ°æ®åå¨/Redis/Redisæä¹ å.md) ### redis äºå¡ Redis éè¿ MULTIãEXECãWATCH çå½ä»¤æ¥å®ç°äºå¡(transaction)åè½ãäºå¡æä¾äºä¸ç§å°å¤ä¸ªå½ä»¤è¯·æ±æå ï¼ç¶å䏿¬¡æ§ãæé¡ºåºå°æ§è¡å¤ä¸ªå½ä»¤çæºå¶ï¼å¹¶ä¸å¨äºå¡æ§è¡æé´ï¼æå¡å¨ä¸ä¼ä¸æäºå¡èæ¹å»æ§è¡å ¶ä»å®¢æ·ç«¯çå½ä»¤è¯·æ±ï¼å®ä¼å°äºå¡ä¸çææå½ä»¤é½æ§è¡å®æ¯ï¼ç¶åæå»å¤çå ¶ä»å®¢æ·ç«¯çå½ä»¤è¯·æ±ã å¨ä¼ ç»çå ³ç³»å¼æ°æ®åºä¸ï¼å¸¸å¸¸ç¨ ACID æ§è´¨æ¥æ£éªäºå¡åè½çå¯é æ§åå®å ¨æ§ãå¨ Redis ä¸ï¼äºå¡æ»æ¯å ·æååæ§ï¼Atomicity)ãä¸è´æ§(Consistency)åé离æ§ï¼Isolationï¼ï¼å¹¶ä¸å½ Redis è¿è¡å¨æç§ç¹å®çæä¹ 忍¡å¼ä¸æ¶ï¼äºå¡ä¹å ·ææä¹ æ§ï¼Durabilityï¼ã ### ç¼åéªå´©åç¼åç©¿éé®é¢è§£å³æ¹æ¡ **ç¼åéªå´©** ç®ä»ï¼ç¼åå䏿¶é´å¤§é¢ç§¯ç失æï¼æä»¥ï¼åé¢ç请æ±é½ä¼è½å°æ°æ®åºä¸ï¼é ææ°æ®åºçæ¶é´å æ¿å大é请æ±èå´©æã è§£å³åæ³ï¼ä¸åç³æèå¸å¨ä»çè§é¢ä¸æå°è¿ï¼è§é¢å°å卿åä¸ä¸ªé®é¢ä¸ææå°ï¼ï¼ - äºåï¼å°½éä¿è¯æ´ä¸ª redis é群çé«å¯ç¨æ§ï¼åç°æºå¨å®æºå°½å¿«è¡¥ä¸ãéæ©åéçå åæ·æ±°çç¥ã - äºä¸ï¼æ¬å°ehcacheç¼å + hystrixéæµ&é级ï¼é¿å MySQLå´©æ - äºåï¼å©ç¨ redis æä¹ åæºå¶ä¿åçæ°æ®å°½å¿«æ¢å¤ç¼å  **ç¼åç©¿é** ç®ä»ï¼ä¸è¬æ¯é»å®¢æ æå»è¯·æ±ç¼åä¸ä¸åå¨çæ°æ®ï¼å¯¼è´ææç请æ±é½è½å°æ°æ®åºä¸ï¼é ææ°æ®åºçæ¶é´å æ¿å大é请æ±èå´©æã è§£å³åæ³ï¼ æå¾å¤ç§æ¹æ³å¯ä»¥ææå°è§£å³ç¼åç©¿éé®é¢ï¼æå¸¸è§ç忝éç¨å¸éè¿æ»¤å¨ï¼å°ææå¯è½åå¨çæ°æ®åå¸å°ä¸ä¸ªè¶³å¤å¤§çbitmapä¸ï¼ä¸ä¸ªä¸å®ä¸åå¨çæ°æ®ä¼è¢« è¿ä¸ªbitmapæ¦æªæï¼ä»èé¿å äºå¯¹åºå±åå¨ç³»ç»çæ¥è¯¢ååãå¦å¤ä¹æä¸ä¸ªæ´ä¸ºç®åç²æ´çæ¹æ³ï¼æä»¬éç¨çå°±æ¯è¿ç§ï¼ï¼å¦æä¸ä¸ªæ¥è¯¢è¿åçæ°æ®ä¸ºç©ºï¼ä¸ç®¡æ¯æ° æ®ä¸åå¨ï¼è¿æ¯ç³»ç»æ éï¼ï¼æä»¬ä»ç¶æè¿ä¸ªç©ºç»æè¿è¡ç¼åï¼ä½å®çè¿ææ¶é´ä¼å¾çï¼æé¿ä¸è¶ è¿äºåéã åèï¼ - [https://blog.csdn.net/zeb_perfect/article/details/54135506](https://blog.csdn.net/zeb_perfect/article/details/54135506) ### å¦ä½è§£å³ Redis çå¹¶åç«äº Key é®é¢ æè° Redis çå¹¶åç«äº Key çé®é¢ä¹å°±æ¯å¤ä¸ªç³»ç»åæ¶å¯¹ä¸ä¸ª key è¿è¡æä½ï¼ä½æ¯æåæ§è¡ç顺åºåæä»¬ææç顺åºä¸åï¼è¿æ ·ä¹å°±å¯¼è´äºç»æçä¸åï¼ æ¨èä¸ç§æ¹æ¡ï¼åå¸å¼éï¼zookeeper å redis é½å¯ä»¥å®ç°åå¸å¼éï¼ãï¼å¦æä¸åå¨ Redis çå¹¶åç«äº Key é®é¢ï¼ä¸è¦ä½¿ç¨åå¸å¼éï¼è¿æ ·ä¼å½±åæ§è½ï¼ åºäºzookeeperä¸´æ¶æåºèç¹å¯ä»¥å®ç°çåå¸å¼éãå¤§è´ææ³ä¸ºï¼æ¯ä¸ªå®¢æ·ç«¯å¯¹æä¸ªæ¹æ³å éæ¶ï¼å¨zookeeperä¸çä¸è¯¥æ¹æ³å¯¹åºçæå®èç¹çç®å½ä¸ï¼çæä¸ä¸ªå¯ä¸çç¬æ¶æåºèç¹ã 夿æ¯å¦è·åéçæ¹å¼å¾ç®åï¼åªéè¦å¤ææåºèç¹ä¸åºå·æå°çä¸ä¸ªã å½éæ¾éçæ¶åï¼åªéå°è¿ä¸ªç¬æ¶èç¹å é¤å³å¯ãåæ¶ï¼å ¶å¯ä»¥é¿å æå¡å®æºå¯¼è´çéæ æ³éæ¾ï¼è产ççæ»éé®é¢ã宿ä¸å¡æµç¨åï¼å é¤å¯¹åºçåèç¹éæ¾éã å¨å®è·µä¸ï¼å½ç¶æ¯ä»ä»¥å¯é æ§ä¸ºä¸»ãæä»¥é¦æ¨Zookeeperã åèï¼ - https://www.jianshu.com/p/8bddd381de06 ### å¦ä½ä¿è¯ç¼å䏿°æ®åºååæ¶çæ°æ®ä¸è´æ§ï¼ ä½ åªè¦ç¨ç¼åï¼å°±å¯è½ä¼æ¶åå°ç¼å䏿°æ®åºååå¨ååï¼ä½ åªè¦æ¯ååï¼å°±ä¸å®ä¼ææ°æ®ä¸è´æ§çé®é¢ï¼é£ä¹ä½ å¦ä½è§£å³ä¸è´æ§é®é¢ï¼ ä¸è¬æ¥è¯´ï¼å°±æ¯å¦æä½ çç³»ç»ä¸æ¯ä¸¥æ ¼è¦æ±ç¼å+æ°æ®åºå¿ é¡»ä¸è´æ§çè¯ï¼ç¼åå¯ä»¥ç¨å¾®çè·æ°æ®åºå¶å°æä¸ä¸è´çæ åµï¼æå¥½ä¸è¦åè¿ä¸ªæ¹æ¡ï¼è¯»è¯·æ±åå请æ±ä¸²è¡åï¼ä¸²å°ä¸ä¸ªå åéåéå»ï¼è¿æ ·å°±å¯ä»¥ä¿è¯ä¸å®ä¸ä¼åºç°ä¸ä¸è´çæ åµ ä¸²è¡åä¹åï¼å°±ä¼å¯¼è´ç³»ç»çååéä¼å¤§å¹ 度çéä½ï¼ç¨æ¯æ£å¸¸æ åµä¸å¤å åçæºå¨å»æ¯æçº¿ä¸çä¸ä¸ªè¯·æ±ã **åèï¼** - Javaå·¥ç¨å¸é¢è¯çªå»ç¬¬1å£ï¼å¯è½æ¯å²ä¸æå¥½çJavaé¢è¯çªå»è¯¾ç¨ï¼-ä¸åç³æèå¸ãè§é¢å°åè§ä¸é¢ï¼ - 龿¥ï¼ https://pan.baidu.com/s/18pp6g1xKVGCfUATf_nMrOA - å¯ç ï¼5i58 ### åèï¼ - redis设计ä¸å®ç°(第äºç)