日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務,提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

redis是一種基于鍵值對(key-value)數(shù)據(jù)庫,其中value可以為string、hash、list、set、zset等多種數(shù)據(jù)結構,可以滿足很多應用場景。還提供了鍵過期,發(fā)布訂閱,事務,流水線,等附加功能

資深架構師總結:Redis內(nèi)存數(shù)據(jù)庫筆記

 

二、Redis特性

  • 1 速度快
  • 2 鍵值對的數(shù)據(jù)結構服務器
  • 3 豐富的功能
  • 4 簡單穩(wěn)定
  • 5 持久化
  • 6 主從復制
  • 8 高可用和分布式轉移
  • 9 客戶端語言多

三、使用場景

  • 1 緩存數(shù)據(jù)庫
  • 2 排行榜
  • 3 計數(shù)器應用
  • 4 社交網(wǎng)絡
  • 5 消息隊列
資深架構師總結:Redis內(nèi)存數(shù)據(jù)庫筆記

 

四、數(shù)據(jù)類型

1.String

字符串類型是redis最基礎的數(shù)據(jù)結構,首先鍵是字符串類型,而且其他幾種結構都是在字符串類型基礎上構建的,所以字符串類型能為其他四種數(shù)據(jù)結構的學習尊定基礎。

字符串類型實際上可以是字符串(簡單的字符串、復雜的字符串(xml、json)、數(shù)字(整數(shù)、浮點數(shù))、二進制(圖片、音頻、視頻)),但最大不能超過512M。

  • 使用實例:
redis 127.0.0.1:6379> SET name "runoob"
OK
redis 127.0.0.1:6379> GET name
"runoob"
復制代碼
  • 使用場景:

緩存功能:字符串最經(jīng)典的使用場景,redis最為緩存層,MySQL作為儲存層,絕大部分請求數(shù)據(jù)都是 redis中獲取,由于redis具有支撐高并發(fā)特性,所以緩存通常能起到加速讀寫和降低 后端壓力的作用。

計數(shù)器:許多運用都會使用redis作為計數(shù)的基礎工具,他可以實現(xiàn)快速計數(shù)、查詢緩存的功能, 同時數(shù)據(jù)可以一步落地到其他的數(shù)據(jù)源。如:視頻播放數(shù)系統(tǒng)就是使用redis作為視頻播放數(shù)計數(shù)的基礎組件。

共享session:出于負載均衡的考慮,分布式服務會將用戶信息的訪問均衡到不同服務器上, 用戶刷新一次訪問可能會需要重新登錄,為避免這個問題可以用redis將用戶session集中管理, 在這種模式下只要保證redis的高可用和擴展性的,每次獲取用戶更新或查詢登錄信息都直接從redis中集中獲取。

限速:處于安全考慮,每次進行登錄時讓用戶輸入手機驗證碼,為了短信接口不被頻繁訪問,會限制用戶每分鐘獲取驗證碼的頻率。

資深架構師總結:Redis內(nèi)存數(shù)據(jù)庫筆記

 

2.Hash(哈希)

在redis中哈希類型是指鍵本身又是一種鍵值對結構,如value={{field1,value1},......{fieldN,valueN}} 。

Redis hash 是一個鍵值(key=>value)對集合。

Redis hash 是一個 string 類型的 field 和 value 的映射表,hash 特別適合用于存儲對象。

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

  • 使用實例
redis> HMSET myhash field1 "Hello" field2 "World"
"OK"
redis> HGET myhash field1
"Hello"
redis> HGET myhash field2
"World"
復制代碼
  • 使用場景

哈希結構相對于字符串序列化緩存信息更加直觀,并且在更新操作上更加便捷。所以常常用于 用戶信息 等管理,但是哈希類型和關系型數(shù)據(jù)庫有所不同,哈希類型是稀疏的,而關系型數(shù)據(jù)庫是完全結構化的,關系型數(shù)據(jù)庫可以做復雜的關系查詢,而redis去模擬關系型復雜查詢,開發(fā)困難,維護成本高。

3.List(列表)

列表類型是用來儲存多個有序的字符串,列表中的每個字符串成為元素(element),一個列表最多可以儲存 2的32次方-1個元素,在redis中,可以隊列表兩端插入(pubsh)和彈出(pop),還可以獲取指定范圍的元素列表、獲取指定索引下表的元素等,列表是一種比較靈活的數(shù)據(jù)結構,它可以充當棧和隊列的角色,實際開發(fā)中有很多應用場景。

列表最多可存儲 232 - 1 元素 (4294967295, 每個列表可存儲40多億)。

  • 使用實例:
redis 127.0.0.1:6379> lpush runoob redis
(integer) 1
redis 127.0.0.1:6379> lpush runoob mongodb
(integer) 2
redis 127.0.0.1:6379> lpush runoob rabitmq
(integer) 3
redis 127.0.0.1:6379> lrange runoob 0 10
1) "rabitmq"
2) "mongodb"
3) "redis"
redis 127.0.0.1:6379>
復制代碼
  • 使用場景

消息對列: redis的lpush+brpop命令組合即可實現(xiàn)阻塞隊列,生產(chǎn)者客戶端是用lupsh從列表左側插入元素,多個消費者客戶端使用brpop命令阻塞時的“搶”列表尾部的元素,多個客戶端保證了消費的負載均衡和高可用性

資深架構師總結:Redis內(nèi)存數(shù)據(jù)庫筆記

 

文章列表:每個用戶都有屬于自己的文章列表,現(xiàn)在需要分頁展示文章列表,此時可以考慮使用列表,列表不但有序,同時支持按照索引范圍獲取元素。

使用技巧:

  • lpush+lpop=Stack(棧)
  • lpush+rpop=Queue(隊列)
  • lpush+ltrim=CApped Collection(有限集合)
  • lpush+brpop=Message Queue(消息隊列)

4.Set (集合)

集合類型也是用來保存多個字符串的元素,但和列表不同的是集合中不允許有重復的元素,并且集合中的元素是無序的,不能通過索引下標獲取元素,redis除了支持集合內(nèi)的增刪改查,同時還支持多個集合取交集、并集、差集,并合理的使用好集合類型,能在實際開發(fā)中解決很多實際問題。

集合是通過哈希表實現(xiàn)的,所以添加,刪除,查找的復雜度都是O(1)。

集合中最大的成員數(shù)為 232 - 1(4294967295, 每個集合可存儲40多億個成員)。

  • 使用實例:
redis 127.0.0.1:6379> sadd runoob redis
(integer) 1
redis 127.0.0.1:6379> sadd runoob mongodb
(integer) 1
redis 127.0.0.1:6379> sadd runoob rabitmq
(integer) 1
redis 127.0.0.1:6379> sadd runoob rabitmq
(integer) 0
redis 127.0.0.1:6379> smembers runoob
1) "redis"
2) "rabitmq"
3) "mongodb"
復制代碼
  • 使用場景

標簽(tag):集合類型比較典型的使用場景,如一個用戶對娛樂、體育比較感興趣,另一個可能對新聞感興 趣,這些興趣就是標簽,有了這些數(shù)據(jù)就可以得到同一標簽的人,以及用戶的共同愛好的標簽,這些數(shù)據(jù)對于用戶體驗以及曾強用戶粘度比較重要。(用戶和標簽的關系維護應該放在一個事物內(nèi)執(zhí)行,防止部分命令失敗造成數(shù)據(jù)不一致)

其他

sadd=tagging(標簽)

spop/srandmember=random item(生成隨機數(shù),比如抽獎)

sadd+sinter=social Graph(社交需求)

5.Zset(sorted set:有序集合)

有序集合和集合有著必然的聯(lián)系,他保留了集合不能有重復成員的特性,但不同得是,有序集合中的元素是可以排序的,但是它和列表的使用索引下標作為排序依據(jù)不同的是,它給每個元素設置一個分數(shù),作為排序的依據(jù)。(有序集合中的元素不可以重復,但是csore可以重復,就和一個班里的同學學號不能重復,但考試成績可以相同)。

  • 使用實例
redis 127.0.0.1:6379> zadd runoob 0 redis
(integer) 1
redis 127.0.0.1:6379> zadd runoob 0 mongodb
(integer) 1
redis 127.0.0.1:6379> zadd runoob 0 rabitmq
(integer) 1
redis 127.0.0.1:6379> zadd runoob 0 rabitmq
(integer) 0
redis 127.0.0.1:6379> > ZRANGEBYSCORE runoob 0 1000
1) "mongodb"
2) "rabitmq"
3) "redis"
復制代碼
  • 使用場景

排行榜:有序集合經(jīng)典使用場景。例如視頻網(wǎng)站需要對用戶上傳的視頻做排行榜,榜單維護可能是多方面:按照時間、按照播放量、按照獲得的贊數(shù)等。

  • 不同類型比較
資深架構師總結:Redis內(nèi)存數(shù)據(jù)庫筆記

 

五、發(fā)布與訂閱功能

redis提供了“發(fā)布、訂閱”模式的消息機制,其中消息訂閱者與發(fā)布者不直接通信,發(fā)布者向指定的頻道(channel)發(fā)布消息,訂閱該頻道的每個客戶端都可以接收到消息。

資深架構師總結:Redis內(nèi)存數(shù)據(jù)庫筆記

 

redis主要提供發(fā)布消息、訂閱頻道、取消訂閱以及按照模式訂閱和取消訂閱。

1.發(fā)布與訂閱命令

  • 發(fā)布消息
publish channel:test "hello world
復制代碼
  • 訂閱消息
subscrible channel:test
復制代碼
  • 查看訂閱數(shù)
pubsub numsub channel:test
復制代碼
  • 取消訂閱
unsubscribe channel:test
復制代碼
  • 按模式訂閱和按模式取消訂閱
psubscribe ch* 
punsubscribe ch*
復制代碼

2.使用場景

  • 1、今日頭條訂閱號、微信訂閱公眾號、新浪微博關注、郵件訂閱系統(tǒng)
  • 2、即使通信系統(tǒng)
  • 3、群聊部落系統(tǒng)(微信群)

六、 Redis持久化

redis是一個支持持久化的內(nèi)存數(shù)據(jù)庫,也就是說redis需要經(jīng)常將內(nèi)存中的數(shù)據(jù)同步到磁盤來保證持久化,持久化可以避免因進程退出而造成數(shù)據(jù)丟失。

資深架構師總結:Redis內(nèi)存數(shù)據(jù)庫筆記

 

1.持久化方式

RDB持久化把當前進程數(shù)據(jù)生成快照(.rdb)文件保存到硬盤的過程,有手動觸發(fā)和自動觸發(fā)。

  • 手動觸發(fā)

save命令:阻塞當前Redis,直到RDB持久化過程完成為止,若內(nèi)存實例比較大會造成長時間阻塞,線上環(huán)境不建議用它.

bgsave命令:redis進程執(zhí)行fork操作創(chuàng)建子線程,由子線程完成持久化,阻塞時間很短(微秒級),是save的優(yōu)化,在執(zhí)行redis-cli shutdown關閉redis服務時,如果沒有開啟AOF持久化,自動執(zhí)行bgsave

  • 自動觸發(fā)

針對RDB不適合實時持久化,redis提供了AOF持久化方式來解決 開啟:redis.conf設置:appendonly yes (默認不開啟,為no) 默認文件名:appendfilename "appendonly.aof"

2.bgSave 運行流程

運行流程示意圖如下:

資深架構師總結:Redis內(nèi)存數(shù)據(jù)庫筆記

 

3.RDB文件的操作

  • 設置RDB的文件保存路徑
config set dir /usr/local # 將dump.rd 保存到/usr/local/目錄下 
復制代碼
  • 開始持久化數(shù)據(jù)
bgsave
復制代碼
  • 恢復數(shù)據(jù)

將dump.rdb放到redis安裝目錄與redis.conf同級目錄,重啟redis即可

優(yōu)點:

1.壓縮后的二進制文,適用于備份、全量復制,用于災難恢復

2.載RDB恢復數(shù)據(jù)遠快于AOF方式

缺點:

1.無法做到實時持久化,每次都要創(chuàng)建子進程,頻繁操作成本過高

2.保存后的二進制文件,存在老版本不兼容新版本rdb文件的問題.

4.AOF持久化

針對RDB不適合實時持久化,redis提供了AOF持久化方式來解決

  • 開始持久化

redis.conf設置:appendonly yes (默認不開啟,為no)

默認文件名:appendfilename "appendonly.aof"

  • AOF持久化流程

1.所有的寫入命令(set hset)會append追加到aof_buf緩沖區(qū)中

2.AOF緩沖區(qū)向硬盤做sync同步

3.隨著AOF文件越來越大,需定期對AOF文件rewrite重寫,達到壓縮

4.當redis服務重啟,可load加載AOF文件進行恢復

資深架構師總結:Redis內(nèi)存數(shù)據(jù)庫筆記

 

命令寫入(append), 文件同步(sync), 文件重寫(rewrite), 重啟加載(load)

  • AOF配置參數(shù)詳解
appendonly yes //啟用aof持久化方式
#appendfsync always //每收到寫命令就立即強制寫入磁盤,最慢的,但是保證完全的持久化,不推薦使用
appendfsync everysec //每秒強制寫入磁盤一次,性能和持久化方面做了折中,推薦
#appendfsync no //完全依賴os,性能最好,持久化沒保證(操作系統(tǒng)自身的同步)
no-appendfsync-on-rewrite yes //正在導出rdb快照的過程中,要不要停止同步aof
auto-aof-rewrite-percentage 100 //aof文件大小比起上次重寫時的大小,增長率100%時,重寫
auto-aof-rewrite-min-size 64mb //aof文件,至少超過64M時,重寫
復制代碼
  • AOF恢復

1.設置appendonly yes

2.將appendonly.aof放到dir參數(shù)指定的目錄

3.啟動Redis,Redis會自動加載appendonly.aof文件

  • AOF與RDB的加載順序

1.當AOF和RDB文件同時存在時,優(yōu)先加載AOF

2.若關閉了AOF,加載RDB文件

3.加載AOF/RDB成功,redis重啟成功

4.AOF/RDB存在錯誤,啟動失敗打印錯誤信息

資深架構師總結:Redis內(nèi)存數(shù)據(jù)庫筆記

 

分享到:
標簽:Redis
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定