国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Redis - 分布式Redis Cluster集群搭建與Redis基本用法

分布式Redis Cluster集群搭建與Redis基本用法

2022-02-24 22:09癡者工良 Redis

這篇文章介紹了分布式Redis Cluster集群搭建與Redis基本用法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

Redis 集群搭建

Redis 是啥

Redis(全稱 REmote DIctionary Server) 是 NoSQL 型數據存儲程序,其使用了內存來存儲數據結構,可以作為數據庫、緩存、消息代理使用。

Redis 使用鍵值來映射數據,其數據結構支持 strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes 等類型。

集群(Cluster)

Redis 集群的官方文檔:https://redis.io/topics/cluster-tutorial

學這個的時候,建議別老是百度,還是好好啃一下官方文檔,一點點學吧。

Redis 支持三種集群模式:

  • 主從模式
  • Sentinel(哨兵)模式
  • Cluster 模式

本章的內容包括搭建、測試和操作 Redis Cluster(集群)。

主從模式,一個 Primary,多個 Secondary ,以及副本節點。

哨兵模式,不會。

Cluster 模式,主要為了提高并發能力和解決性能瓶頸。

Redis Cluster 說明

Redis Cluster 能夠保證 Redis 服務一定程度的可用性,當集群中一部分實例發生故障時,其余實例還能正常運行。但是如果發生較大故障,整個 Redis 集群可能會停止運行。

Redis 集群的每個節點都需要使用兩個 TCP 端口,一個是常規提供給客戶端服務的端口,如 6379;而群集總線需要使用的端口是常規端口加上 10000 ,例如 73479。

Redis Cluster 不支持 NATted 環境,也就是不支持 Docker 重新映射端口,如果要在 Docker 上使用 Redis 集群,則需要使用 Dockers

主機模式,即啟動 Redis 時要附加 --net=host 參數。

Redis Cluster 中,提供服務的都是 主節點(redis-master),從屬節點(redis-slave) 用于備份主節點的數據,當主節點故障時,從屬節點可以替換主節點。

Redis Cluster 節點

Redis 多個 Redis 實例來提供功能,即分片功能,每個 Redis 實例都是主節點。例如 A、B、C 三個節點集組成一個完整的 Redis 系統,redis cluster 自動將數據分片(sharding),在每個節點上放置一部分數據,這三個節點都是主節點。

例如 有 100 條數據,前 40 條在 A中,剩下的在 B、C中。

沒有 primary,每個主節點都可以提供服務,這樣就降低了服務器的壓力,盡量使得流量被多臺節點平均。要刪除 C ,則將 C 的數據分為兩部分,分別推送到 A 和 B 中,這就是數據復制。

但是,如果 C 故障了,那么整個集群則會癱瘓,因為 A、B、C 各自的數據是不同的。這就是 Redis Cluster 的缺點。

更多知識,請打開官方文檔了解 https://redis.io/topics/cluster-tutorial

后面使用 & 符號來代表從屬節點,如 &C,代表 C 的從屬節點。

Redis Cluster 集群模式

Redis Cluster 集群,每個主節點有多個從屬節點,從屬節點的數據于此主節點一致。

前面提到過如果某一個主節點故障,將會導致整個集群故障。因此,每個主節點都應該有一個從屬節點,當 C 故障時,&C (跟 C 具有一致的數據)將代替 C 工作。但是如果 C 和 &C 都故障,則整個系統也是會故障的。

Redis Cluster 的工作依賴于 redis.conf 文件。

下面我們將來一步步手動建立集群,過程會比較慢,如果需要盡快建立集群,可以百度找腳本。

為了真實,筆者使用兩臺服務器搭建服務,共三個主節點和三個從屬節點,組成六個節點群集。

不能保證一致性

當客戶端向 C 節點寫入數據時,C 會向 &C 寫入數據以保證一致性(同步)。但是這個同步過程是異步的,因為用戶跟 C 交互,完成交互即返回,不可能要用戶等待所有的過程完成,所以 Redis 的設計是,用戶到 C 是同步,操作后立即返回;而 C 到 &C 是異步的,完全與用戶無關。

如果客戶端寫入數據到 C 后,C 還沒有同步數據到 &C,C 就故障了,那么這部分數據就會丟失。因此這個從屬節點,并不能保證數據的一致性。

創建和使用 Redis 集群

筆者有兩臺服務器,其理論設計如下:

服務器 節點 port cluster port
服務器1 A 7001 17001
服務器1 B 7002 17002
服務器1 C 7003 17003
服務器2 &A 7001 17001
服務器2 &B 7002 17002
服務器2 &C 7003 17003

實際上,由于啟動集群時,節點是自動分配的,哪個是主節點哪個是從屬節點是機器分配,因此這里只是作為一個設計思路處理,實際情況要看輸出結果。

部署三個主節點

在服務器 1,創建六個目錄:

?
1
2
3
mkdir /var/redis
cd /var/redis
mkdir 7001 7002 7003 A B C

7001、7002、7003 都是以端口命名的,分別存儲 A、B、C 三個節點的配置文件,而 A、B、C 三個文件是為了使用 Docker 啟動時,映射物理文件(備份數據)。如果你不是使用 docker 啟動,則不需要 A、B、C 三個目錄。

三個端口目錄分別創建一個 redis.conf 文件,port 的內容請根據端口填寫,其內容如下:

?
1
2
3
4
5
port 7001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

記得改掉 7001。

如果你只有一臺服務器,就使用 7001-7006 和 A B C D E F 這這目錄。

非 docker

如果不使用 docker 的話, 可以這樣啟動 redis:

?
1
2
3
4
5
6
# 命令
redis-server /var/redis/7001/redis.conf
# 二進制文件
./redis-server /var/redis/7001/redis.conf
 
# 如法炮制

docker 安裝

如果服務器的內存比較低,例如 1G,2G,則需要執行下面的命令,消除 Redis 警告。

查看 /proc/sys/net/core/somaxconn 文件,如果值是 128,則需要修改為 1024。

修改內存限制:

?
1
2
echo "vm.overcommit_memory=1" >>  /etc/sysctl.conf
sysctl vm.overcommit_memory=1

還有一個內核問題:

?
1
echo never > /sys/kernel/mm/transparent_hugepage/enabled

其它問題請參考這里 解決Redis啟動警告問題

拉取最新 redis 鏡像:

?
1
docker pull redis:latest

執行以下三個命令啟動三個 redis 實例:

?
1
docker run -itd --name redisa --net=host -v /var/redis/A:/data -v /var/redis/7001:/etc/redis redis:latest redis-server /etc/redis/redis.conf --appendonly yes
?
1
docker run -itd --name redisb --net=host -v /var/redis/B:/data -v /var/redis/7002:/etc/redis redis:latest redis-server /etc/redis/redis.conf --appendonly yes
?
1
docker run -itd --name redisc --net=host -v /var/redis/C:/data -v /var/redis/7003:/etc/redis redis:latest redis-server /etc/redis/redis.conf --appendonly yes

把本小節的內容,在另一臺服務器上執行相同的操作。如果你是一臺服務器,則也可以在這里修改一下,創建 6 個容器。

命令解析:

--net=host :使用主機網絡,這樣就不需要使用 -p 來映射端口了;

-v /var/redis/B:/data :數據持久化;

/var/redis/7002:/etc/redis :將物理機目錄映射到容器中,里面有個配置文件;

redis-server : 啟動容器時執行的命令;

/etc/redis/redis.conf :一個啟動參數,告訴 redis-server ,要使用哪個配置啟動;

--appendonly yes :總是重啟;

創建集群

如果使用 docker 安裝,則在第一臺服務器執行命令進入容器。

?
1
docker exec -it redisa bash

然后創建集群:

?
1
redis-cli --cluster create {ip}:7001 {ip}:7002 {ip}:7003 {ip}:7001 {ip}:7002 {ip}:7003 --cluster-replicas 1

注:請自行替換 ip 地址。

執行命令后,會自動分配 redis 實例的地位,輸入 yes 同意這種分配:

分布式Redis Cluster集群搭建與Redis基本用法

這種自動分配是最優的,避免三臺主節點都在同一臺服務器中。

集群搭建完畢,我們來開始學習 Redis 中的一些概念,然后使用 C# 創建程序連接 Redis 。

Redis 入門

Redis 中的數據類型

Redis 中,常用的數據類型有以下幾種:

  • String 字符串
  • Hash 散列/哈希
  • List 列表
  • Set 集合
  • Sorted Set 有序集合

所有數據都是 key-value 形式存儲,每個數據都有唯一的 key,以上數據類型是 value。

刪除一個數據的命令:DEL {key} 。

字符串(string)

字符串沒啥好說的,就是 value 為 string。

Redis 命令,要設置或使用字符串類型的數據,則使用SET 或 GET 開頭的命令:

?
1
2
3
4
5
6
7
8
9
10
11
# 設置字符串
SET a AAA
SET b 666
# 其中 a 是 key,AAA 是 value,不需要 "" 包圍字符串
# ------
# 獲取字符串
GET a
# ------
# 獲取多個字符串
MGET a b
# 使用空格分隔 key

因為 redis 沒有值類型,因此使用不加 "" 也會被識別為字符串。建議加上雙引號比較好,提高可讀性。

哈希(Hash)

一個 string 類型,是 key-value 結構,而哈希則是 {key-value} 的集合,key 是 string 類型,value 可以是其它類型。

因此,可以稱 Hash 為鍵值對的集合,就是相當于 C# 中的字典類型,主要存儲有結構的數據。

Redis 中每個 hash 可以存儲 232 - 1 個鍵值對(40多億)。

Hash 使用 HMSET 、 HMGET 、HGETALL 等命令來操作哈希表。

有一個這個的數據:

?
1
2
id:1,
name:"癡者工良"

使用哈希存儲:

?
1
2
# HMSET {key} {filed1} {value1} {filed2} {value2} ... ...
HMSET user id "1" name "癡者工良"

查詢此哈希表的所有鍵值對:

?
1
HGETALL user

查看哈希表的一個字段:

?
1
HGET user id

刪除其中一個字段:

?
1
HDEL user {字段名稱}

列表(Lists)

列表中可以添加多中類型的元素,簡單的就是字符串,列表即是數據結構中的鏈表,使用雙向列表技術實現,越靠近兩側的元素速度越快。

子元素的添加要從頭部或尾部加入,由于列表是棧,因此列表是有序的。因為列表是有序的,因此可以存儲重復的數據。

適合做例如消息記錄(隊列),粉絲關注記錄、訂單記錄等。

列表只能添加字符串。

往一個列表加入數據:

?
1
LPUSH {key} {一個元素值}

例如:

?
1
2
3
LPUSH list a
LPUSH list b
LPUSH list c

列表的命令比較多,自己查詢文檔就好,這里不再贅述。

集合(Set)

列表(List)是有序的,集合(Set)是無序的。集合不能出現重復的數據。

應用場景如網站的訪問IP(去重)記錄、花店中花的種類等。

集合是字符串元素的集合,只能存儲字符串。

使用 SADD 命令往集合中添加一個元素:

?
1
2
3
4
SADD set a
SADD set b
SADD set c
SADD set a b c

有序集合(sorted set)

有序集合跟集合一樣,只是有有序集合會根據元素的值從小到大排序。

有序集合也只能添加字符串。

?
1
2
3
ZADD ss 2 a
ZADD ss 1 b
ZADD ss 4 z

查詢:

?
1
ZRANGE ss 0 10 WITHSCORES

提醒一下,生產環境記得給 Redis 設置密碼。

到此這篇關于分布式Redis Cluster集群搭建與Redis基本用法的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://www.cnblogs.com/whuanle/p/13837153.html

延伸 · 閱讀

精彩推薦
  • RedisRedis如何實現數據庫讀寫分離詳解

    Redis如何實現數據庫讀寫分離詳解

    Redis的主從架構,能幫助我們實現讀多,寫少的情況,下面這篇文章主要給大家介紹了關于Redis如何實現數據庫讀寫分離的相關資料,文中通過示例代碼介紹...

    羅兵漂流記6092019-11-11
  • Redis詳解Redis復制原理

    詳解Redis復制原理

    與大多數db一樣,Redis也提供了復制機制,以滿足故障恢復和負載均衡等需求。復制也是Redis高可用的基礎,哨兵和集群都是建立在復制基礎上實現高可用的...

    李留廣10222021-08-09
  • Redisredis 交集、并集、差集的具體使用

    redis 交集、并集、差集的具體使用

    這篇文章主要介紹了redis 交集、并集、差集的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友...

    xiaojin21cen10152021-07-27
  • RedisRedis全量復制與部分復制示例詳解

    Redis全量復制與部分復制示例詳解

    這篇文章主要給大家介紹了關于Redis全量復制與部分復制的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Redis爬蟲具有一定的參考學習...

    豆子先生5052019-11-27
  • RedisRedis的配置、啟動、操作和關閉方法

    Redis的配置、啟動、操作和關閉方法

    今天小編就為大家分享一篇Redis的配置、啟動、操作和關閉方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 ...

    大道化簡5312019-11-14
  • RedisRedis 事務知識點相關總結

    Redis 事務知識點相關總結

    這篇文章主要介紹了Redis 事務相關總結,幫助大家更好的理解和學習使用Redis,感興趣的朋友可以了解下...

    AsiaYe8232021-07-28
  • Redisredis中如何使用lua腳本讓你的靈活性提高5個逼格詳解

    redis中如何使用lua腳本讓你的靈活性提高5個逼格詳解

    這篇文章主要給大家介紹了關于redis中如何使用lua腳本讓你的靈活性提高5個逼格的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具...

    一線碼農5812019-11-18
  • Redisredis實現排行榜功能

    redis實現排行榜功能

    排行榜在很多地方都能使用到,redis的zset可以很方便地用來實現排行榜功能,本文就來簡單的介紹一下如何使用,具有一定的參考價值,感興趣的小伙伴們...

    乘月歸5022021-08-05
主站蜘蛛池模板: 黄色成人在线观看视频 | 黄色一级片免费播放 | 精品日韩一区 | www.午夜| 91精品国产91久久综合桃花 | 国产乱码精品一区二区三区忘忧草 | 视频一区中文字幕 | 国产精品国产成人国产三级 | 国产成人视屏 | 久久久久久亚洲一区二区三区蜜臀 | 国产欧美一区二区视频 | 自拍视频网站 | 亚洲精品久久久久久一区二区 | 国产精品高潮呻吟久久av野狼 | 欧美日韩免费在线 | 免费欧美 | 樱桃小丸子在线观看 | 久久久久99精品国产片 | 亚洲视频一区 | 久久久国产精品久久久 | 黄色片网站 | 免费日韩成人 | 欧美国产一区二区三区 | 欧美做爰一区二区三区 | 免费视频一区 | 精品无码久久久久国产 | 视频一区中文字幕 | 国产高清自拍视频 | 先锋资源av| 国产高清在线观看 | 久久国产精品久久久久久电车 | 国产视频一区二区在线 | 国产精品一区二区无线 | 欧美精品一区二 | 亚洲乱码国产乱码精品精的特点 | 亚洲最新无码中文字幕久久 | 不卡一区二区三区视频 | 中文精品一区二区 | 国产激情在线观看 | 欧美日一区 | 99久久婷婷国产综合精品电影 |