最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

redis?設(shè)置生存和過期時間的原理分析

 更新時間:2022年08月27日 09:54:00   作者:奔跑的海星  
這篇文章主要介紹了redis?設(shè)置生存和過期時間的原理,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

在了解原理前 先來看使用方法

通過EXPIRE命令或者PEXPIRE命令,客戶端可以以秒或者毫秒精度為數(shù)據(jù)庫中的某個鍵設(shè)置生存時間,在經(jīng)過指定的秒數(shù)或者毫秒數(shù)之后,服務(wù)器就會自動刪除生存時間為0的鍵。

SETEX命令可以在設(shè)置一個字符串鍵的同時為鍵設(shè)置過期時間(只能用于字符串鍵)

與EXPIRE命令和PEXPIRE命令類似,客戶端可以通過EXPIREAT命令或PEXPIREAT命令,以秒或者毫秒精度給數(shù)據(jù)庫中的某個鍵設(shè)置過期時間

過期時間是一個UNIX時間戳,當(dāng)鍵的過期時間來臨時,服務(wù)器就會自動從數(shù)據(jù)庫中刪除這個鍵

TTL命令和PTTL命令接受一個帶有生存時間或者過期時間的鍵,返回這個鍵的剩余生存時間,也就是,返回距離這個鍵被服務(wù)器自動刪除還有多長時間

Redis有四個不同的命令可以用于設(shè)置鍵的生存時間(鍵可以存在多久)或過期時間(鍵什么時候會被刪除):

  • EXPIRE<key><ttl>命令用于將鍵key的生存時間設(shè)置為ttl秒。
  • PEXPIRE<key><ttl>命令用于將鍵key的生存時間設(shè)置為ttl毫秒。
  • EXPIREAT<key><timestamp>命令用于將鍵key的過期時間設(shè)置為timestamp所指定的秒數(shù)時間戳。
  • PEXPIREAT<key><timestamp>命令用于將鍵key的過期時間設(shè)置為timestamp所指定的毫秒數(shù)時間戳。

原理

雖然有多種不同單位和不同形式的設(shè)置命令,但實際上EXPIRE、PEXPIRE、EXPIREAT三個命令都是使用PEXPIREAT命令來實現(xiàn)的:

無論客戶端執(zhí)行的是以上四個命令中的哪一個,經(jīng)過轉(zhuǎn)換之后,最終的執(zhí)行效果都和執(zhí)行PEXPIREAT命令一樣。

redisDb結(jié)構(gòu)的expires字典保存了數(shù)據(jù)庫中所有鍵的過期時間,我們稱這個字典為過期字典

過期字典的鍵是一個指針,這個指針指向鍵空間中的某個鍵對象(也即是某個數(shù)據(jù)庫鍵)。

過期字典的值是一個long long類型的整數(shù),這個整數(shù)保存了鍵所指向的數(shù)據(jù)庫鍵的過期時間——一個毫秒精度的UNIX時間戳。

下圖展示了一個帶有過期字典的數(shù)據(jù)庫例子,在這個例子中,鍵空間保存了數(shù)據(jù)庫中的所有鍵值對,而過期字典則保存了數(shù)據(jù)庫鍵的過期時間。

為了展示方便,圖中的鍵空間和過期字典中重復(fù)出現(xiàn)了兩次alphabet鍵對象和book鍵對象。在實際中,鍵空間的鍵和過期字典的鍵都指向同一個鍵對象,所以不會出現(xiàn)任何重復(fù)對象,也不會浪費任何空間。

圖中的過期字典保存了兩個鍵值對:

第一個鍵值對的鍵為alphabet鍵對象,值為1385877600000,這表示數(shù)據(jù)庫鍵alphabet的過期時間為1385877600000(2013年12月1日零時)。

第二個鍵值對的鍵為book鍵對象,值為1388556000000,這表示數(shù)據(jù)庫鍵book的過期時間為1388556000000(2014年1月1日零時)。當(dāng)客戶端執(zhí)行PEXPIREAT命令(或者其他三個會轉(zhuǎn)換成PEXPIREAT命令的命令)為一個數(shù)據(jù)庫鍵設(shè)置過期時間時,服務(wù)器會在數(shù)據(jù)庫的過期字典中關(guān)聯(lián)給定的數(shù)據(jù)庫鍵和過期時間。

在服務(wù)器執(zhí)行以下命令之后

過期字典將新增一個鍵值對,其中鍵為message鍵對象,而值則為1391234400000(2014年2月1日零時),如圖

以下是PEXPIREAT命令的偽代碼定義

PERSIST命令可以移除一個鍵的過期時間

PERSIST命令就是PEXPIREAT命令的反操作:PERSIST命令在過期字典中查找給定的鍵,并解除鍵和值(過期時間)在過期字典中的關(guān)聯(lián)。

過期鍵的判定

通過過期字典,程序可以用以下步驟檢查一個給定鍵是否過期:

1)檢查給定鍵是否存在于過期字典:如果存在,那么取得鍵的過期時間。

2)檢查當(dāng)前UNIX時間戳是否大于鍵的過期時間:如果是的話,那么鍵已經(jīng)過期;否則的話,鍵未過期??梢杂脗未a來描述這一過程:

對于一個過期時間為1385877600000(2013年12月1日零時)的鍵alphabet來說:

如果當(dāng)前時間為1383282000000(2013年11月1日零時),那么調(diào)用is_expired(alphabet)將返回False,因為當(dāng)前時間小于alphabet鍵的過期時間。

另一方面,如果當(dāng)前時間為1385964000000(2013年12月2日零時),那么調(diào)用is_expired(alphabet)將返回True,因為當(dāng)前時間大于alphabet鍵的過期時間。

Redis的過期鍵刪除策略原理

http://m.fzitv.net/article/260852.htm

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • redis?protocol通信協(xié)議及使用詳解

    redis?protocol通信協(xié)議及使用詳解

    這篇文章主要為大家介紹了redis?protocol通信協(xié)議及使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • Redis 數(shù)據(jù)類型的詳解

    Redis 數(shù)據(jù)類型的詳解

    這篇文章主要介紹了Redis 數(shù)據(jù)類型的詳解的相關(guān)資料,支持五種數(shù)據(jù)類型,字符串,哈希,列表,集合及zset,需要的朋友可以參考下
    2017-08-08
  • 為啥懶 Redis 是更好的 Redis

    為啥懶 Redis 是更好的 Redis

    本文是由zicode, 李中凱, 無若翻譯的英文文章Lazy Redis is better Redis,小編認為非常不錯,這里推薦給大家
    2018-07-07
  • Redis集群(cluster模式)搭建過程

    Redis集群(cluster模式)搭建過程

    文章介紹了Redis集群的概念、使用原因和搭建方法,Redis集群通過分區(qū)實現(xiàn)數(shù)據(jù)水平擴容,提供了一定的可用性,文章詳細闡述了集群的連接方式,解釋了如何分配節(jié)點,并提供了詳細的集群搭建步驟,包括創(chuàng)建節(jié)點、清空數(shù)據(jù)、修改配置、啟動節(jié)點、配置集群等
    2024-10-10
  • Redis使用布隆過濾器解決緩存雪崩的問題

    Redis使用布隆過濾器解決緩存雪崩的問題

    布隆過濾器可以幫助我們解決Redis緩存雪崩的問題,那什么是布隆過濾器、布隆過濾器又是如何使用如何解決緩存雪崩的問題的,讓我們帶著這一系列的問題去詳細了解布隆過濾器,感興趣的小伙伴跟著小編一起來看看吧
    2024-02-02
  • Redis中的bitmap詳解

    Redis中的bitmap詳解

    BitMap是通過一個bit位來表示某個元素對應(yīng)的值或者狀態(tài),其中的key就是對應(yīng)元素本身。我們知道8個bit可以組成一個Byte,所以bitmap本身會極大的節(jié)省儲存空間,下面通過本文給大家介紹Redis中的bitmap知識,感興趣的朋友一起看看吧
    2021-10-10
  • Redis?ziplist?壓縮列表的源碼解析

    Redis?ziplist?壓縮列表的源碼解析

    ziplist 是一個經(jīng)過特殊編碼的雙向鏈表,旨在提高內(nèi)存效率,它存儲字符串和整數(shù)值,其中整數(shù)被編碼為實際整數(shù)而不是一系列字符,這篇文章主要介紹了Redis?ziplist?壓縮列表的源碼解析,需要的朋友可以參考下
    2022-06-06
  • Redis GEO實現(xiàn)附近搜索功能

    Redis GEO實現(xiàn)附近搜索功能

    這篇文章主要介紹了Redis GEO實現(xiàn)附近搜索功能,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2024-12-12
  • 在項目中使用redis做緩存的一些思路

    在項目中使用redis做緩存的一些思路

    這篇文章主要介紹了在項目中使用redis做緩存的一些思路,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 一文詳細介紹Redis7持久化機制RDB和AOF

    一文詳細介紹Redis7持久化機制RDB和AOF

    這篇文章主要給大家分享一下Redis的數(shù)據(jù)持久化方式,Reids是一個高性能的緩存中間件,它的高性能是因為它是基于內(nèi)存的,我們知道直接操縱內(nèi)存是比較快的,所以當(dāng)機器發(fā)生宕機,那么數(shù)據(jù)就會完全丟失,所以本文詳細介紹Redis7持久化機制RDB和AOF
    2023-07-07

最新評論

巨野县| 洞口县| 康定县| 庆城县| 福海县| 波密县| 长宁区| 胶州市| 奉节县| 玉树县| 白朗县| 洛浦县| 西和县| 龙江县| 常熟市| 阜平县| 游戏| 翁牛特旗| 泾川县| 沾化县| 新田县| 梧州市| 台前县| 陆良县| 临高县| 增城市| 顺平县| 永顺县| 霍州市| 荥经县| 内丘县| 广南县| 右玉县| 英德市| 日喀则市| 鲁山县| 阳泉市| 武功县| 西乌珠穆沁旗| 鄂托克前旗| 金塔县|