和redis_Redis 缓存
生活随笔
收集整理的這篇文章主要介紹了
和redis_Redis 缓存
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
使用場景#
- Redis 通常用作web應(yīng)用的內(nèi)存緩存,和Django,Ruby-on-Rails,Node.js以及Flask框架結(jié)合
- Redis在存儲新的數(shù)據(jù)的過程中可以清除陳舊的數(shù)據(jù)。
- Redis使用Less Recently Used(LRU)策略,可以為每個健設(shè)置過期時間
- Redis 存儲指標(biāo)數(shù)據(jù)用于量化網(wǎng)站的使用情況和用戶行為數(shù)據(jù)
- Redis可用作不同系統(tǒng)之間的通訊層,通過訂閱推送消息模型
數(shù)據(jù)模型#
- 字符串 簡單動態(tài)字符串,Redis底層使用的一種簡單動態(tài)字符串的抽象類型。
優(yōu)點:
- 可以O(shè)(1)獲取存儲的鍵值的長度
- 杜絕緩沖區(qū)溢出
- 減少修改字符串帶來的內(nèi)存重分配次數(shù)【【【【【【【
- 列表 列表的底層實現(xiàn)就是一個鏈表,鏈表的每個節(jié)點保存一個鍵值。
示例:
127.0.0.1:6379> RPUSH integers 0 1 2 3 4 5 6(integer) 7127.0.0.1:6379> LLEN integers(integer) 7127.0.0.1:6379> LRANGE integers 0 101) "0"2) "1"3) "2"4) "3"5) "4"6) "5"7) "6"- 字典 Redis的字典使用哈希表作為底層實現(xiàn),一個哈希表里可以有多個哈希表節(jié)點,每個哈希表節(jié)點就保存了字典中的 一個鍵值對。
當(dāng)有一個新的鍵值對添加到字典中時,字典會對鍵進(jìn)行哈希,得到哈希值后在和掩碼進(jìn)行與運算得到最終的哈希值 當(dāng)有兩個以上的鍵被分配到同一個哈希表數(shù)組的同一個索引上時,此時會產(chǎn)生鍵沖突。一般解決沖突有兩種方法, 一種是Rehash,一種是鏈地址法。
- 鏈地址法: 每個哈希表都有一個next指針,多個哈希表節(jié)點可以用next指針構(gòu)成一個單向鏈表,被分配到同一個 索引上的多個節(jié)點可以用這個單向鏈表連接起來
- Rehash: 隨著哈希表中鍵值對增多和減少,為了使負(fù)載因子維持在一個合理的范圍,需要對哈希表進(jìn)行Rehash - 擴(kuò)展,申請ht[1]的大小為大于ht[0].used*2的第一個2的次方的數(shù),收縮,ht[1]為ht[0].used的第一個2的N次方的數(shù)。 - 執(zhí)行rehash將ht[0]中的數(shù)值映射到ht[1]上 - 將ht[1]設(shè)置為ht[0],ht[1]新建一個空白哈希表
- 跳躍表 跳躍表是一種有序數(shù)據(jù)結(jié)構(gòu),它通過在每個節(jié)點中維持多個指向其他節(jié)點的指針,從而達(dá)到快速訪問節(jié)點的目.Redis使用跳躍表來實現(xiàn)有序集合鍵,和集群節(jié)點中的內(nèi)部數(shù)據(jù)結(jié)構(gòu). redis使用的是zskiplist結(jié)構(gòu)
zskiplist包含以下屬性: header: 指向跳躍表的表頭節(jié)點 tail: 指向跳躍表的表尾節(jié)點 level: 記錄目前跳躍表內(nèi),層數(shù)最大的那個節(jié)點的層數(shù) length: 記錄跳躍表的長度即跳躍表目前包含的節(jié)點的數(shù)量
typedef struct zskiplistNode { struct zskiplistLevel { struct zskiplistNode *forward; unsigned int span; } level[]; struct zskiplistNode *backward; double score; robj *obj} zskiplistNodetypedef struct zskiplist{ structz skiplistNode *header, *tail; unsigned long length; int level;} zskiplist;常用命令#
在設(shè)計Redis存儲結(jié)構(gòu)的時候,主要要考慮鍵和數(shù)據(jù)結(jié)構(gòu)兩方面 如果使用SET或者GETSET命令去更新鍵值, 鍵值的過期時間會被清除
127.0.0.1:6379> EXPIRE tea/1/box1/bag/8 300(integer) 1127.0.0.1:6379> TTL tea/1/box1/bag/8(integer) 260127.0.0.1:6379> SET tea/1/box1/bag/8 brewOK127.0.0.1:6379> TTL tea/1/box1/bag/8(integer) -1總結(jié)
以上是生活随笔為你收集整理的和redis_Redis 缓存的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动易sitefactory 数据库 my
- 下一篇: python3图片转代码_python3