版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Redis 實戰(zhàn)一、課程目標NoSQLRedisRedis 的安裝Redis 的基本數(shù)據(jù)類型SpringBoot 整合 RedisRedis 主從、安全、哨兵Redis 事物、持久化機制、發(fā)布與訂閱模式Redis 集群二、NoSQLNoSQL 是 Not Only SQL 的縮寫,意即"不僅僅是 SQL"的意思,泛指非關系型的數(shù)據(jù)庫。強調 Key-Value Stores 和文檔數(shù)據(jù)庫的優(yōu)點,而不是單純的RDBMS。NoSQL是傳統(tǒng)關系型數(shù)據(jù)庫的功能版本,通過減少用不到或很少用的功能,來大幅度提高性能NoSQLredis、mongodb Membase、HBase三、Red
2、is 簡介3.1 什么是 Redis?Redis 是完全開源的,遵守 BSD 協(xié)議,是一個高性能的 key-value 數(shù)據(jù)庫。Redis 與其他 key - value 緩存有以下三個特點:Redis 支持數(shù)據(jù)的持久化,可以將內存中的數(shù)據(jù)保存在磁盤中,重啟的時候可以再次加載進行使用。Redis 不僅僅支持簡單的 key-value 類型的數(shù)據(jù),同時還提供 list,set,zset,hash 等數(shù)據(jù)結構的。Redis 支持數(shù)據(jù)的備份,即 master-slave 模式的數(shù)據(jù)備份。3.2 Redis 應用場景主要能夠體現(xiàn) 解決數(shù)據(jù)庫的。例如:時間有效期、session 共享解決方案3.3 Re
3、dis 優(yōu)勢性能極高 Redis 能讀的速度是 110000 次/s,寫的速度是 81000 次/s 。豐富的數(shù)據(jù)類型 Redis 支持二進制案例的 Strings, Lists, Hashes, Sets 及Ordered Sets 數(shù)據(jù)類型操作。原子 Redis 的所有操作都是原子性的,同時 Redis 還支持對幾個操作子性執(zhí)行。后的原豐富的特性 Redis 還支持 publish/subscribe, 通知, key 過期等等特性。3.4 Redis 與其他 key-value有什么不同?Redis 有著更為復雜的數(shù)據(jù)結構并且提供對他們的原子性操作,這是一個不同于其他數(shù)據(jù)庫的進化路徑。R
4、edis 的數(shù)據(jù)類型都是基于基本數(shù)據(jù)結構的同時對程序員透明,無需進行額外的抽象。Redis 運行在內存中但是可以持久化到磁盤,所以在對不同數(shù)據(jù)集進行高速讀寫時需衡內存,因為數(shù)據(jù)量不能大于硬件內存。在內存數(shù)據(jù)庫方面的另一個優(yōu)點是,相比在磁盤上相同的復雜的數(shù)據(jù)結構,在內存中操作起來非常簡單,這樣 Redis 可以做很多內部復雜性很強的事情。同時,在磁盤格式方面他們是緊湊的以追加的方式產生的,因為他們并不需要進行隨機。四、Redis 安裝4.1 windows 安裝 redis4.2 linux 安裝 redisRedis 的Redis 源碼包)Redis 服務器端的默認端口是 6379。(這里的是
5、 Linux 版的是:這里以虛擬機中的 Linux 系統(tǒng)如何安裝 Redis 進行講解。在 windows 系統(tǒng)中好 Redis 的源碼包。1. 通過 WinSCP 工具,將 Redis 的源碼包由 windows 上傳到 Linux 系統(tǒng)的這個目錄/opt/redis (即根目錄下的 lamp 文件夾)。2. 解壓縮。tar -zxf redis-2.6.17.tar.gz3. 切換到解壓后的目錄。cd redis-2.6.17( 一般來說,解壓目錄里的 INSTALL 文件或 README 文件里寫有安裝說明,可參考之)4. 編譯。make(注意,編譯需要 C 語言編譯器 gcc 的支持,
6、如果沒有,需要先安裝 gcc??梢允褂胷pm -q gcc 查看 gcc 是否安裝)(利用 yum安裝 gcc令yum -y install gcc )(如果編譯出錯,請使用 make clean 清除臨時文件。之后,找到出錯的問題后再來重新安裝。 ),解決5. 進入到 src 目錄。cd src6. 執(zhí)行安裝。make install到此就安裝完成。但是,由于安裝 redis 的時候,我們沒有選擇安裝路徑,故是默認位置安裝。在此,我們可以將可執(zhí)行文件和配置文件移動到習慣的目錄。cd /usr/localmkdir -p /usr/local/redis/bin mkdir -p /usr/l
7、ocal/redis/etc cd /lamp/redis-2.6.17cp ./redis.conf /usr/local/redis/etc cd srccp mkreleasehdr.sh redis-benchmark redis-check-aof redis-check- dump redis-cli redis-server redis-sentinel /usr/local/redis/bin7開放 linux 6379 端口1. 編輯 /etc/sysconfig/iptables 文件:vi /etc/sysconfig/iptables加入內容并保存:-A RH-Fire
8、wall-1-INPUT -m state state NEW -m tcp -p tcp dport 6379 -j ACCEPT2. 重啟服務:/etc/init.d/iptables restart 3.查看端口是否開放:/sbin/iptables -L -n比較重要的 3 個可執(zhí)行文件:redis-server:Redis 服務器程序redis-cli:Redis 客戶端程序,它是一個命令行操作工具。也可以使用 telnet 根據(jù)其純文本協(xié)議操作。redis-benchmark:Redis 性能測試工具,測試 Redis 在你的系統(tǒng)及配置下的讀寫性能。4.2.1 Redis 的啟動命
9、令:/usr/local/redis/bin/redis-server或cd /usr/local/redis/bin./redis-server /usr/local/redis/etc/redis.conf為redis-server 指定配置文4.2.2 修改 redis.conf 文件daemonize yes - 修改為 yes啟動requirepass 123456注釋取消掉設置賬號ps aux | grep '6379'- kill -15 9886 - 殺死重置kill -9 9886 - 強制殺死端口service iptables stop 停止防火強4.2.
10、3 redis 命令連接方式./redis-cli -h 127.0.0.1 -p 6379 -a "123456"- redis使用賬號連接PING 結果表示4.2.4 停止 redisredis-cli shutdown 或者 kill redis 進程的 pid4.2.5 關閉五、Redis 客戶端連接方式使用 redisclient-win32.x86.1.5六、Redis 的基本數(shù)據(jù)類型6.1 字符串類型(String)"redis"redis 127.0.0.1:6379> SET mykey "redis" OKr
11、edis 127.0.0.1:6379> GET mykey在上面的例子中,SET 和 GET 是 redis 中令,而mykey 是鍵的名稱。Redis 字符串命令用于管理 Redis 中的字符串值。以下是使用 Redis 字符串命令的語法。redis 127.0.0.1:6379> COMMAND KEY_NAME示例Shell在上面的例子中,SET 和 GET 是 redis 中令,而mykey 是鍵的名稱。Redis 字符串命令下表列出了一些用于在 Redis 中管理字符串的基本命令。編號命令描述說明1SET key value此命令設置指定鍵的值。2GET key獲取指定
12、鍵的值。3GETRANGE key start end獲取在鍵上的字符串的子字符串。4GETSET key value設置鍵的字符串值并返回其舊值。5GETBIT key offset返回在鍵處的字符串值中偏移處的位值。6MGET key1 key2.獲取所有給定鍵的值7SETBIT key offset value在鍵上的字符串值中設置或清除偏移處的位8SETEX key seconds value使用鍵和到期時間來設置值9SETNX key value設置鍵的值,僅當鍵不存在時10SETRANGE key offset value在指定偏移處開始的鍵處覆蓋字符串的一部分11STRLEN k
13、ey獲取在鍵中的值的長度12MSET key value key value 為多個鍵分別設置它們的值13MSETNX key value key value 為多個鍵分別設置它們的值,僅當鍵不存在時14PSETEX key milliseconds value設置鍵的值和到期時間(以毫秒為)15INCR key將鍵的整數(shù)值增加 116INCRBY key increment將鍵的整數(shù)值按給定的數(shù)值增加redis 127.0.0.1:6379> SET mykey "redis" OKredis 127.0.0.1:6379> GET mykey"re
14、dis"Shell6.2 列表類型(List)Redis 列表是簡單的字符串列表,按照順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)一個列表最多可以包含 232 - 1 個元素 (, 每個列表超過 40 億個元素)。Redis 列表命令下表列出了列表相關的基本命令:序號命令及描述1BLPOP key1 key2 timeout移出并獲取列表的第一個元素, 如果列表沒有元素會阻塞列表直到等待超時或發(fā)現(xiàn)可彈出元素為止。2BRPOP key1 key2 timeout移出并獲取列表的最后一個元素, 如果列表沒有元素會阻塞列表直到等待超時或發(fā)現(xiàn)可彈出元素為止。redis 1
15、27.0.0.1:6379> LPUSH runoobkey redis (integer) 1redis 127.0.0.1:6379> LPUSH runoobkey mongodb (integer) 2redis 127.0.0.1:6379> LPUSH runoobkey mysql (integer) 3redis 127.0.0.1:6379> LRANGE runoobkey 0 101) "mysql"2) "mongodb"3) "redis"編號命令描述說明17INCRBYFLOAT k
16、ey increment將鍵的浮點值按給定的數(shù)值增加18DECR key將鍵的整數(shù)值減 119DECRBY key decrement按給定數(shù)值減少鍵的整數(shù)值20APPEND key value將指定值附加到鍵3BRPOPLPUSH source destination timeout從列表出一個值,將彈出的元素到另外一個列表中并返回它; 如果列表沒有元素會阻塞列表直到等發(fā)現(xiàn)可彈出元素為止。4LINDEX key index通過索引獲取列表中的元素5LINSERT key BEFORE|AFTER pivot value在列表的元素前或者后元素6LLEN key獲取列表長度7LPOP key移
17、出并獲取列表的第一個元素8LPUSH key value1 value2將一個或多個值到列表頭部9LPUSHX key value將一個值到已存在的列表頭部10LRANGE key start stop獲取列表指定范圍內的元素11LREM key count value移除列表元素12LSET key index value通過索引設置列表元素的值13LTRIM key start stop對一個列表進行修剪(trim),就是說,讓列表只保留指定區(qū)間內的元素,不在指定區(qū)間之內的元素都將被刪除。6.3 Redis 集合(Set)Redis 的 Set 是 string 類型的無序集合。集員是唯一
18、的,這就意味著集合中不能出現(xiàn)重復的數(shù)據(jù)。Redis 中 集合是通過表實現(xiàn)的,所以添加,刪除,查找的復雜度都是 O(1)。集合中最大的成員數(shù)為232 - 1 (, 每個集合可40 多億個成員)。實例在以上實例中我們通過 SADD 命令向名為 runoobkey 的集合的三個元素。redis 127.0.0.1:6379> SADD runoobkey redis (integer) 1redis 127.0.0.1:6379> SADD runoobkey mongodb (integer) 1redis 127.0.0.1:6379> SADD runoobkey mysql
19、 (integer) 1redis 127.0.0.1:6379> SADD runoobkey mysql (integer) 0redis 127.0.0.1:6379> SMEMBERS runoobkey1) "mysql"2) "mongodb"3) "redis"14RPOP key移除并獲取列表最后一個元素15RPOPLPUSH source destination移除列表的最后一個元素,并將該元素添加到另一個列表并返回16RPUSH key value1 value2在列表中添加一個或多個值17RPUSHX
20、 key value為已存在的列表添加值Redis 集合命令下表列出了 Redis 集合基本命令:序號1命令及描述SADD key member1 member2向集合添加一個或多個成員2SCARD key獲取集合的成員數(shù)3SDIFF key1 key2返回給定所有集合的差集4SDIFFSTORE destination key1 key2返回給定所有集合的差集并在 destination 中5SINTER key1 key2返回給定所有集合的交集6SINTERSTORE destination key1 key2返回給定所有集合的交集并在 destination 中7SISMEMBER ke
21、y membermember 元素是否是集合 key 的成員8SMEMBERS key返回集合中的所有成員9SMOVE source destination member將 member 元素從 source 集合移動到 destination 集合10SPOP key6.4 Redis 有序集合(sorted set)Redis 有序集合和集合一樣也是 string 類型元素的集合,且不重復的成員。不同的是每個元素都會關聯(lián)一個 double 類型的分數(shù)。redis 正是通過分數(shù)來為集合中的成員進行從小到大的排序。有序集合的成員是唯一的,但分數(shù)(score)卻可以重復。集合是通過表實現(xiàn)的,所以
22、添加,刪除,查找的復雜度都是 O(1)。 集合中最大的成員數(shù)232 - 1 (為, 每個集合可40 多億個成員)。實例redis 127.0.0.1:6379> ZADD runoobkey 1 redis(integer) 1redis 127.0.0.1:6379> ZADD runoobkey 2 mongodb(integer) 1redis 127.0.0.1:6379> ZADD runoobkey 3 mysql(integer) 1移除并返回集合中的一個隨機元素11SRANDMEMBER key count返回集合中一個或多個隨機數(shù)12SREM key mem
23、ber1 member2移除集合中一個或多個成員13SUNION key1 key2返回所有給定集合的并集14SUNIONSTORE destination key1 key2所有給定集合的并集在 destination 集合中15SSCAN key cursor MATCH pattern COUNT count迭代集合中的元素在以上實例中我們通過命令 ZADD 向 redis 的有序集合中添加了三個值并關聯(lián)上分數(shù)。Redis 有序集合命令下表列出了 redis 有序集合的基本命令:序號命令及描述1ZADD key score1 member1 score2 member2向有序集合添加一個
24、或多個成員,或者更新已存在成員的分數(shù)2ZCARD key獲取有序集合的成員數(shù)3ZCOUNT key min max計算在有序集合中指定區(qū)間分數(shù)的成員數(shù)4ZINCRBY key increment member有序集合中對指定成員的分數(shù)加上增量 increment5ZINTERSTORE destination numkeys key key .計算給定的一個或多個有序集的交集并將結果集在新的有序集合 key 中6ZLEXCOUNT key min max在有序集合中計算指定字典區(qū)間內成員數(shù)量redis 127.0.0.1:6379> ZADD runoobkey 3 mysql(inte
25、ger) 0redis 127.0.0.1:6379> ZADD runoobkey 4 mysql(integer) 0redis 127.0.0.1:6379> ZRANGE runoobkey 0 10 WITHSCORES1) "redis" 2) "1"3) "mongodb" 4) "2"5) "mysql" 6) "4"7ZRANGE key start stop WITHSCORES通過索引區(qū)間返回有序集指定區(qū)間內的成員8ZRANGEBYLEX k
26、ey min max LIMIT offset count通過字典區(qū)間返回有序集合的成員9ZRANGEBYSCORE key min max WITHSCORES LIMIT通過分數(shù)返回有序集合指定區(qū)間內的成員10ZRANK key member返回有序集合中指定成員的索引11ZREM key member member .移除有序集合中的一個或多個成員12ZREMRANGEBYLEX key min max移除有序集合中給定的字典區(qū)間的所有成員13ZREMRANGEBYRANK key start stop移除有序集合中給定的排名區(qū)間的所有成員14ZREMRANGEBYSCORE key m
27、in max移除有序集合中給定的分數(shù)區(qū)間的所有成員15ZREVRANGE key start stop WITHSCORES返回有序集中指定區(qū)間內的成員,通過索引,分數(shù)從高到底16ZREVRANGEBYSCORE key max min WITHSCORES返回有序集中指定分數(shù)區(qū)間內的成員,分數(shù)從高到低排序17ZREVRANK key member返回有序集合中指定成員的排名,有序集成員按分數(shù)值遞減(從大到小)排序18ZSCORE key member6.5 Redis(Hash)Redis hash 是一個 string 類型的 field 和 value 的表,hash 特別適合用于對象。
28、Redis 中每個 hash 可以232 - 1 鍵值對(40 多億)。實例hset key mapHey MapValue在以上實例中,我們設置了 redis 的一些描述信息(name, description, likes, visitors)到表的 runoobkey 中。Redis hash 命令下表列出了 redis hash 基本的相關命令:序命令及描述號127.0.0.1:6379> HMSET runoobkey name "redis tutorial" description "redis basic commands for cachi
29、ng" likes 20 visitors 23000 OK127.0.0.1:6379> HGL runoobkey1) "name"2) "redis tutorial"3) "description"4) "redis basic commands for caching"5) "likes" 6) "20"7) "visitors" 8) "23000"返回有序集中,成員的分數(shù)值19ZUNIONSTORE des
30、tination numkeys key key .計算給定的一個或多個有序集的并集,并在新的 key 中20ZSCAN key cursor MATCH pattern COUNT count迭代有序集合中的元素(包括元素成員和元素分值)1HDEL key field2 field2刪除一個或多個表字段2HEXISTS key field查看表 key 中,指定的字段是否存在。3HGET key field獲取在表中指定字段的值。4HGL key獲取在表中指定 key 的所有字段和值5HINCRBY key field increment為表 key 中的指定字段的整數(shù)值加上增量 incre
31、ment 。6HINCRBYFLOAT key field increment為表 key 中的指定字段的浮點數(shù)值加上增量 increment 。7HKEYS key獲取所有表中的字段8HLEN key獲取表中字段的數(shù)量9HMGET key field1 field2獲取所有給定字段的值10HMSET key field1 value1 field2 value2 同時將多個 field-value (域-值)對設置到表 key 中。11HSET key field value將表 key 中的字段 field 的值設為 value 。12HSETNX key field value七、Red
32、is jedis7.1 引入 Maven 依賴7.2 Java 代碼public class TestRedis private Jedis jedis;Beforepublic void setup() /連接redis服務器,192.168.0.100:6379 jedis = new Jedis("192.168.0.100", 6379);/權限認證jedis.auth("admin");/* redis字符串*/<!-><dependency><groupId>redis.clients</groupI
33、d><artifactId>jedis</artifactId><version>2.9.0</version></dependency>只有在字段 field 不存在時,設置表字段的值。13HVALS key獲取表中所有值14HSCAN key cursor MATCH pattern COUNT count迭代表中的鍵值對。Testpublic void testString() /添加數(shù)據(jù)jedis.set("name","xinxin");/向key->name中放入了val
34、ue->xinxin System.out.println(jedis.get("name");/執(zhí)行結果:xinxinjedis.append("name", " is my lover"); /拼接System.out.println(jedis.get("name");jedis.del("name"); /刪除某個鍵System.out.println(jedis.get("name");/設置多個鍵值對jedis.mset("name",&
35、quot;liuling","age","23",""); jedis.incr("age"); /進行加1操作System.out.println(jedis.get("name") + "-" + jedis.get("age") + "-" + jedis.get(" ");/* redis操作Map*/ Testpublic void testMap() /添加數(shù)據(jù)Map<String, St
36、ring> map = new HashMap<String, String>(); map.put("name", "xinxin");map.put("age", "22"); map.put("");jedis.hmset("user",map);/取出user中的name,執(zhí)行結果:minxr->注意結果是一個泛型的List/第一個參數(shù)是存入redis中map對象的key,后面跟的是放入map中的對象的key,后面的key可以跟多個,是可變參數(shù)
37、List<String> rsmap = jedis.hmget("user", "name", "age", " ");System.out.println(rsmap);/刪除map中的某個鍵值jedis.hdel("user","age");System.out.println(jedis.hmget("user", "age"); /因為刪除了,所以返回的是null System.out.println(jedis.
38、hlen("user"); /返回key為user的鍵中存放的值的個數(shù)2 System.out.println(jedis.exists("user");/是否存在key為user的返回true System.out.println(jedis.hkeys("user");/返回map對象中的所有key System.out.println(jedis.hvals("user");/返回map對象中的所有valueIterator<String> iter=jedis.hkeys("user&
39、quot;).iterator(); while (iter.hasNext()String key = iter.next(); System.out.println(key+":"+jedis.hmget("user",key);/* jedis操作List*/ Testpublic void testList()/開始前,先移除所有的內容jedis.del("java framework");System.out.println(jedis.lrange("java framework",0,-1);/先向k
40、ey java framework中存放三條數(shù)據(jù)jedis.lpush("java framework","spring"); jedis.lpush("java framework","struts"); jedis.lpush("java framework","hibernate");/再取出所有數(shù)據(jù)jedis.lrange是按范圍取出,/ 第一個是key,第二個是起始位置,第三個是結束位置,jedis.llen獲取長度 -1表示取得所有System.out.print
41、ln(jedis.lrange("java framework",0,-1);jedis.del("java framework"); jedis.rpush("java framework","spring"); jedis.rpush("java framework","struts"); jedis.rpush("java framework","hibernate");System.out.println(jedis.lrang
42、e("java framework",0,-1);/* jedis操作Set*/ Testpublic void testSet()/添加jedis.sadd("user","liuling");jedis.sadd("user","xinxin");jedis.sadd("user","ling"); jedis.sadd("user","zhangxinxin"); jedis.sadd("user&q
43、uot;,"who");/移除nonamejedis.srem("user","who"); System.out.println(jedis.smembers("user");/獲取所有加入的valueSystem.out.println(jedis.sismember("user", "who");/who 是否是user集合的元素System.out.println(jedis.srandmember("user");八、SpringBoot 集成
44、Redis8.1、引入 maven 依賴<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.3.RELEASE</version></parent><dependencies><dependency><groupId>org.springframework.boot</groupId
45、><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency>System.out.println(jedis.scard("user");/返回集合的元素個數(shù)Testpublic void test() throws InterruptedException /jedis 排序/注意,此處的rpush和lpush是List的操作。是一個雙向鏈表(但從表現(xiàn)來看的) jedis.del("a");/先清除
46、數(shù)據(jù),再加入數(shù)據(jù)進試jedis.rpush("a", "1");jedis.lpush("a","6");jedis.lpush("a","3");jedis.lpush("a","9"); System.out.println(jedis.lrange("a",0,-1);/ 9, 3, 6, 1System.out.println(jedis.sort("a"); /1, 3, 6, 9 /輸
47、入排序后結果System.out.println(jedis.lrange("a",0,-1);Testpublic void testRedisPool() RedisUtil.getJedis().set("newname", "中文測試"); System.out.println(RedisUtil.getJedis().get("newname");8.2、新增配置文件信息8.3、Java 代碼Servicepublic class RedisService Autowiredprivate StringR
48、edisTemplate stringRedisTemplate; public void setStr(String key, String value) setStr(key, value, null);public void setStr(String key, String value, Long time) stringRedisTemplate.opsForValue().set(key, value); if (time != null)stringRedisTemplate.expire(key, time, TimeUnit.SECONDS);public Object ge
49、tKey(String key) return stringRedisTemplate.opsForValue().get(key);#Redis (RedisConfiguration) #spring.redis.database=0 spring.redis.host=127.0.0.1 spring.redis.port=6379 spring.redis.password=123456 spring.redis.pool.max-idle=8 spring.redis.pool.min-idle=0 spring.redis.pool.max-active=8 spring.redi
50、s.pool.max-wait=-1spring.redis.timeout=5000<groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web&l
51、t;/artifactId></dependency></dependencies>九、Redis 主從克隆三臺 linux 虛擬機public void delKey(String key) stringRedisTemplate.delete(key);9.1.1、克隆虛擬機9.1.2、生成新的 mack 地址9.1.3、主從配置redis 主從概述1、redis 的功能是支持多個數(shù)據(jù)庫之間的數(shù)據(jù)同步。一類是主數(shù)據(jù)庫(master)一類是從數(shù)據(jù)庫(slave),主數(shù)據(jù)庫可以進行讀寫操作,當發(fā)生寫操作的時候自動將數(shù)據(jù)同步到從數(shù)據(jù)庫,而從數(shù)據(jù)庫一般是只讀的,并接收
52、主數(shù)據(jù)庫同步過來的數(shù)據(jù),一個主數(shù)據(jù)庫可以有多個從數(shù)據(jù)庫,而一個從數(shù)據(jù)庫只能有一個主數(shù)據(jù)庫。2、通過 redis 的功能可以很好的實現(xiàn)數(shù)據(jù)庫的讀寫分離,提高服務器的負載能數(shù)據(jù)庫主要進行寫操作,而從數(shù)據(jù)庫負責讀操作。主從過程主從過程:見下圖過程:1:當一個從數(shù)據(jù)庫啟動時,會向主數(shù)據(jù)庫2:主數(shù)據(jù)庫接收到 sync 命令后會開始在sync 命令,保存快照(執(zhí)行 rdb 操作),并將保存期間接收到令緩存起來3:當快照完成后,redis 會將快照文件和所有緩存令給從數(shù)據(jù)庫。4:從數(shù)據(jù)庫收到后,會載入快照文件并執(zhí)行收到的緩存令。9.1.3.1 修改 redis.conf修改從 redis 中的 redis.
53、conf 文件slaveof 192.168.33.130 6379masterauth 123456- 主 redis 服務器配置了,則需要配置十、Redis 哨兵機制10.1 什么是哨兵機制Redis 的哨兵(sentinel) 系統(tǒng)用于管理多個 Redis 服務器,該系統(tǒng)執(zhí)行以下三個任務:·(Monitoring): 哨兵(sentinel) 會不斷地檢查你的 Master 和 Slave 是否正常。·提醒(Notification):當被的某個 Redis 出現(xiàn)問題時, 哨兵(sentinel) 可通知。以通過 API 向管理員或者其他應用程序·自動故障遷
54、移(Automatic failover):當一個 Master 不能正常工作時,哨兵(sentinel) 會開始一次自動故障遷移操作,它會將失效 Master 的其中一個 Slave 升級為新的 Master, 并讓失效 Master 的其他 Slave 改為新的 Master; 當客戶端試圖連接失效的 Master 時,集群也會向客戶端返回新 Master 的地址,使得集群可以使用 Master代替失效 Master。哨兵(sentinel) 是一個分布式系統(tǒng),你可以在一個架構中運行多個哨兵(sentinel) 進程,這些進程使用流言協(xié)議(gossipprotocols)來接收關于 Mas
55、ter 是否下線的信息,并使用投票協(xié)議(agreement protocols)來決定是否執(zhí)行自動故障遷移,以及選擇哪個 Slave 作為新的 Master.每個哨兵(sentinel) 會向其它哨兵(sentinel)、master、slave 定時消息,以確認對方是否”活”著,如果發(fā)現(xiàn)對方在指定時間(可配置)內未回應,則暫時認為對掛(所謂的”認為宕機” Subjective Down,簡稱 sdown).若“哨兵群”中的多數(shù) sentinel,都報告某一 master 沒響應,系統(tǒng)才認為該 master"徹底"(即:客觀上的真正 down 機,Objective Down,簡稱 odown),通過一定的vote 算法,從剩下的 slave 節(jié)點中,選一臺提升為 master,然后自動修改相關配置
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025土地流轉合同范文
- 養(yǎng)豬產業(yè)鏈一體化2025年度合作協(xié)議模板3篇
- 2025城市綜合體物業(yè)租賃合同
- 2025服務合同香港及境外股市投資咨詢服務協(xié)議
- 2025年度農村房屋產權轉讓及配套設施移交合同2篇
- 二零二五年度企業(yè)培訓與發(fā)展公司管理服務協(xié)議3篇
- 二零二五年度農副產品電商平臺入駐合作協(xié)議3篇
- 2025年度智能化公廁建設與運營管理承包施工合同書模板3篇
- 二零二五農村宅基地買賣與農村土地整治與生態(tài)保護合同
- 二零二五年度農民工工資支付委托及勞務合同管理協(xié)議
- 2024-2030年中國泥炭市場深度調查研究報告
- 組建學?;@球隊方案
- 政務服務中心物業(yè)服務投標方案【新版】(技術方案)
- (正式版)YS∕T 5040-2024 有色金屬礦山工程項目可行性研究報告編制標準
- HJ 179-2018 石灰石石灰-石膏濕法煙氣脫硫工程技術規(guī)范
- JT-T-617.7-2018危險貨物道路運輸規(guī)則第7部分:運輸條件及作業(yè)要求
- 消弧產品規(guī)格標準化規(guī)定
- 2024年長沙民政職業(yè)技術學院單招職業(yè)適應性測試題庫完美版
- 公募基金基礎知識培訓
- 醫(yī)務科工作制度及流程(全套)
- “三基三嚴”培訓與考核制度
評論
0/150
提交評論