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

Redis設(shè)置鍵的生存時(shí)間或過(guò)期時(shí)間的方法詳解

 更新時(shí)間:2024年03月21日 10:28:18   作者:coffee_babe  
這篇文章主要介紹了Redis如何設(shè)置鍵的生存時(shí)間或過(guò)期時(shí)間,通過(guò)EXPIRE命令或者PEXIPIRE命令,客戶端可以以秒或者毫秒精度為數(shù)據(jù)庫(kù)中的某個(gè)鍵設(shè)置生存時(shí)間,文中有詳細(xì)的代碼供供大家參考,需要的朋友可以參考下

鍵的生存時(shí)間或過(guò)期時(shí)間

概述

通過(guò)EXPIRE命令或者PEXIPIRE命令,客戶端可以以秒或者毫秒精度為數(shù)據(jù)庫(kù)中的某個(gè)鍵設(shè)置生存時(shí)間(Time To Live,TTL),在經(jīng)過(guò)指定的秒數(shù)或者毫秒數(shù)之后,服務(wù)器就會(huì)自動(dòng)刪除生存時(shí)間為0的鍵:

127.0.0.1:6379> SET key value
OK
127.0.0.1:6379> EXPIRE key 5
(integer) 1
// 5秒之內(nèi)
127.0.0.1:6379> GET key
"value"
// 5秒之后
127.0.0.1:6379> GET key
(nil)

注意:

SETEX命令可以在設(shè)置一個(gè)字符串鍵的同時(shí)為鍵設(shè)置過(guò)期時(shí)間,因?yàn)檫@個(gè)命令是一個(gè)類型限定的命令(只能用于字符串鍵)
與EXPIRE命令和PEXPIRE命令類似,客戶端可以通過(guò)EXPIREAT命令或PEXPIREAT命令,以秒或者毫秒精度給數(shù)據(jù)庫(kù)中的某個(gè)鍵設(shè)置過(guò)期時(shí)間(expire time)過(guò)期時(shí)間是一個(gè)UNIX時(shí)間戳,當(dāng)鍵的過(guò)期時(shí)間來(lái)臨時(shí),服務(wù)器就會(huì)自動(dòng)從數(shù)據(jù)庫(kù)中刪除這個(gè)鍵

127.0.0.1:6379> SET key value
OK
127.0.0.1:6379> EXPIREAT key 1710944249
(integer) 1
// 過(guò)期時(shí)間之前
127.0.0.1:6379> GET key
"value"
// 過(guò)期時(shí)間之后
127.0.0.1:6379> GET key
(nil)

TTL和PTTL

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

127.0.0.1:6379> SET key value
OK
127.0.0.1:6379> EXPIRE key 1000
(integer) 1
127.0.0.1:6379> TTL key
(integer) 996

設(shè)置過(guò)期時(shí)間

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

  • 1.EXPIRE 命令用于將鍵key的生存時(shí)間設(shè)置為ttl秒
  • 2.PEXPIRE命令用于將鍵key的生存時(shí)間設(shè)置為ttl毫秒
  • 3.EXPIREAT 命令用于將鍵key的過(guò)期時(shí)間設(shè)置為timestamp所指定的秒數(shù)時(shí)間戳
  • 4.PEXIREAT命令用于將鍵key的過(guò)期時(shí)間設(shè)置為timestamp所指定的毫秒數(shù)時(shí)間戳
    雖然有多種不同單位和不同形式的設(shè)置命令,但實(shí)際上EXPIRE、PEXIPIRE、EXPIREAT三個(gè)命令都是使用PEXIPREAT命令來(lái)實(shí)現(xiàn)的:無(wú)論客戶端執(zhí)行的是以上四個(gè)命令中的哪一個(gè),經(jīng)過(guò)轉(zhuǎn)換之后,最終的執(zhí)行效果都和執(zhí)行PEXIPIREAT命令一樣

內(nèi)部實(shí)現(xiàn)

首先,EXPIRE命令可以轉(zhuǎn)換成PEXIPIRE命令

def EXPIRE(key, ttl_in_sec):
#將TTL從秒轉(zhuǎn)換成毫秒
ttl_in_ms = sec_to_ms(ttl_in_ec)

接著,PEXIRE命令又可以轉(zhuǎn)換成PEXIREAT命令:

def PEXIPRE(key, ttl_in_ms):
# 獲取以毫秒計(jì)算的當(dāng)前UNIX時(shí)間戳
now_ms = get_curent_unix_timestamp_in_ms();
# 當(dāng)前時(shí)間加上TTL,得出毫秒格式的鍵過(guò)期時(shí)間
PEXIREAT(key,now_ms+ttl_in_ms)

并且,EXPIREAT命令也可以轉(zhuǎn)換成PEXIREAT命令:

def EXPIREAT (key, expire_time_in_sec):
# 將過(guò)期時(shí)間從秒轉(zhuǎn)換為毫秒
expire_time_in_ms = sec_to_ms(expire_time_in_sec)
PEXPIREAT(key, expire_tiime_in_ms);

最終,EXPIRE、PEXPIRE和EXPIREAT三個(gè)命令都會(huì)轉(zhuǎn)化成PEXIREAT命令來(lái)執(zhí)行

在這里插入圖片描述

保存過(guò)期時(shí)間

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

  • 1.過(guò)期字典的鍵是一個(gè)指針,這個(gè)指針指向鍵是一個(gè)指針,這個(gè)指針指向鍵空間的某個(gè)鍵對(duì)象(也即是某個(gè)數(shù)據(jù)庫(kù)鍵)
  • 2.過(guò)期字典的值是一個(gè)long long類型的整數(shù)。這個(gè)整數(shù)保存了鍵所指向的數(shù)據(jù)庫(kù)鍵的過(guò)期時(shí)間——一個(gè)毫秒精度的UNIX時(shí)間戳。
typedef struct redisDb {
 // ..
 
 // 過(guò)期字典,保存著鍵的過(guò)期時(shí)間
 dict *expire;
 
 // ...
}redisDb;

例子

在這里插入圖片描述

舉個(gè)例子,圖中的過(guò)期字典保存了兩個(gè)鍵值對(duì):
1.第一個(gè)鍵值對(duì)的鍵為alphabet鍵對(duì)象,值為1385877900000,這表示數(shù)據(jù)庫(kù)鍵alphabet的過(guò)期時(shí)間為1385877600000(2013年12月)
2.第二個(gè)鍵值對(duì)的鍵為book鍵對(duì)象,值為1388556000000,這表示數(shù)據(jù)庫(kù)鍵book的過(guò)期時(shí)間為1388556000000(2014年1月1日零時(shí))當(dāng)客戶端執(zhí)行PEXPIREAT命令(或者其他三個(gè)會(huì)轉(zhuǎn)換成PEXIPREAT命令的命令)為一個(gè)
數(shù)據(jù)庫(kù)鍵設(shè)置過(guò)期時(shí)間時(shí),服務(wù)器會(huì)在數(shù)據(jù)庫(kù)的過(guò)期字典中關(guān)聯(lián)給定的數(shù)據(jù)庫(kù)和過(guò)期時(shí)間

讀寫(xiě)鍵空間時(shí)的維護(hù)操作

當(dāng)使用Redis命令對(duì)數(shù)據(jù)庫(kù)進(jìn)行讀寫(xiě)時(shí),服務(wù)器不僅會(huì)對(duì)鍵空間執(zhí)行指定的讀寫(xiě)操作還會(huì)執(zhí)行一些額外的維護(hù)操作,其中包括

  • 在讀取一個(gè)鍵之后(讀操作和寫(xiě)操作都要對(duì)鍵進(jìn)行讀取),服務(wù)器會(huì)根據(jù)鍵是否存在來(lái)更新服務(wù)器的鍵空間命中(hit)次數(shù)或鍵空間不命中(miss)次數(shù),這兩個(gè)值可以在INFO stats命令的keyspace_hits屬性和keyspace_misses屬性中查看
127.0.0.1:6379> info stats
# Stats
total_connections_received:15
total_commands_processed:1887
instantaneous_ops_per_sec:0
total_net_input_bytes:9624
total_net_output_bytes:2803
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:3
evicted_keys:0
keyspace_hits:38
keyspace_misses:11
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:9925
migrate_cached_sockets:0
127.0.0.1:6379>
  • 在讀取一個(gè)鍵之后,服務(wù)器會(huì)更新鍵的LRU(最后一次使用)時(shí)間,這個(gè)值可以用于計(jì)算鍵的閑置時(shí)間,使用OBJECT idle time key命令可以查看鍵的閑置時(shí)間。
127.0.0.1:6379> set k v
OK
127.0.0.1:6379> OBJECT idletime k
(integer) 6
  • 如果服務(wù)器在讀取一個(gè)鍵時(shí)發(fā)現(xiàn)該鍵已經(jīng)過(guò)期,那么服務(wù)器會(huì)先刪除這個(gè)過(guò)期鍵然后才執(zhí)行余下的操作
  • 如果又客戶端使用WATCH命令監(jiān)視了某個(gè)鍵,那么服務(wù)器在對(duì)被監(jiān)視的鍵進(jìn)行修改之后,會(huì)將這個(gè)鍵標(biāo)記為臟(dirty),從而讓事務(wù)程序注意到這個(gè)鍵已經(jīng)被修改過(guò)
  • 服務(wù)器每次修改一個(gè)鍵之后,都會(huì)對(duì)臟(dirty)鍵計(jì)數(shù)器的值增1,這個(gè)計(jì)數(shù)器會(huì)觸發(fā)服務(wù)器的持久化以及復(fù)制操作
  • 如果服務(wù)器開(kāi)啟了數(shù)據(jù)庫(kù)通知功能,那么在對(duì)鍵進(jìn)行修改之后,服務(wù)器將按配置發(fā)送相應(yīng)的數(shù)據(jù)庫(kù)通知

以上就是Redis設(shè)置鍵的生存時(shí)間或過(guò)期時(shí)間的方法詳解的詳細(xì)內(nèi)容,更多關(guān)于Redis設(shè)置鍵生存或過(guò)期時(shí)間的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Redis設(shè)置鍵的生存時(shí)間或過(guò)期時(shí)間的方法詳解

    Redis設(shè)置鍵的生存時(shí)間或過(guò)期時(shí)間的方法詳解

    這篇文章主要介紹了Redis如何設(shè)置鍵的生存時(shí)間或過(guò)期時(shí)間,通過(guò)EXPIRE命令或者PEXIPIRE命令,客戶端可以以秒或者毫秒精度為數(shù)據(jù)庫(kù)中的某個(gè)鍵設(shè)置生存時(shí)間,文中有詳細(xì)的代碼供供大家參考,需要的朋友可以參考下
    2024-03-03
  • Redis的Spring客戶端使用小結(jié)

    Redis的Spring客戶端使用小結(jié)

    在Spring中使用Redis,可以極大地提升應(yīng)用程序的性能和響應(yīng)速度,本文主要介紹了Redis的Spring客戶端使用小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-04-04
  • Redis如何實(shí)現(xiàn)延遲隊(duì)列

    Redis如何實(shí)現(xiàn)延遲隊(duì)列

    這篇文章主要介紹了Redis如何實(shí)現(xiàn)延遲隊(duì)列問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • windows 64位下redis安裝教程

    windows 64位下redis安裝教程

    這篇文章主要為大家詳細(xì)介紹了windows 64位下redis安裝教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Redis的過(guò)期策略以及內(nèi)存淘汰機(jī)制詳解

    Redis的過(guò)期策略以及內(nèi)存淘汰機(jī)制詳解

    文章詳解Redis的過(guò)期策略(定時(shí)刪除、惰性刪除、定時(shí)掃描)和緩存淘汰算法(如LFU、LRU等),強(qiáng)調(diào)定時(shí)掃描通過(guò)隨機(jī)抽樣處理過(guò)期鍵,惰性刪除在訪問(wèn)時(shí)清除過(guò)期鍵,同時(shí)指出需避免大量鍵同時(shí)過(guò)期,且主從同步延遲可能導(dǎo)致數(shù)據(jù)不一致,建議業(yè)務(wù)中合理設(shè)置過(guò)期時(shí)間與淘汰策略
    2025-08-08
  • Redis常見(jiàn)分布鎖的原理和實(shí)現(xiàn)

    Redis常見(jiàn)分布鎖的原理和實(shí)現(xiàn)

    這篇文章主要介紹了Redis常見(jiàn)分布鎖的原理和實(shí)現(xiàn),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • Redis大key多key拆分實(shí)現(xiàn)方法解析

    Redis大key多key拆分實(shí)現(xiàn)方法解析

    這篇文章主要介紹了Redis大key多key拆分實(shí)現(xiàn)方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 淺談Redis中的緩存更新策略

    淺談Redis中的緩存更新策略

    這篇文章主要介紹了淺談Redis中的緩存更新策略,CacheAsidePatter是我們比較常用的緩存更新策略,其由緩存調(diào)用者在更新數(shù)據(jù)庫(kù)時(shí),在業(yè)務(wù)邏輯中設(shè)置緩存更新,需要的朋友可以參考下
    2023-08-08
  • Redis?Cluster?實(shí)現(xiàn)多key事務(wù)操作的示例

    Redis?Cluster?實(shí)現(xiàn)多key事務(wù)操作的示例

    本文主要介紹了Redis?Cluster?實(shí)現(xiàn)多key事務(wù)操作,包括HashTag+Lua腳本、應(yīng)用層分步操作+補(bǔ)償機(jī)制、異步隊(duì)列+冪等消費(fèi)等方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2026-02-02
  • Redis鎖與DB鎖的使用與區(qū)別小結(jié)

    Redis鎖與DB鎖的使用與區(qū)別小結(jié)

    本文主要介紹了Redis鎖與DB鎖的使用與區(qū)別小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2026-03-03

最新評(píng)論

定襄县| 攀枝花市| 昭平县| 翁牛特旗| 霍山县| 贡觉县| 民乐县| 怀安县| 府谷县| 囊谦县| 沿河| 罗城| 阿图什市| 定安县| 正蓝旗| 虹口区| 兴山县| 两当县| 泸定县| 资溪县| 收藏| 合阳县| 天气| 保靖县| 攀枝花市| 吉木萨尔县| 乌苏市| 浦北县| 福泉市| 张家界市| 讷河市| 辉县市| 新沂市| 美姑县| 昌都县| 始兴县| 华阴市| 贵溪市| 黄大仙区| 信丰县| 江油市|