欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Redis設置鍵的生存時間或過期時間的方法詳解

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

鍵的生存時間或過期時間

概述

通過EXPIRE命令或者PEXIPIRE命令,客戶端可以以秒或者毫秒精度為數(shù)據(jù)庫中的某個鍵設置生存時間(Time To Live,TTL),在經(jīng)過指定的秒數(shù)或者毫秒數(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命令可以在設置一個字符串鍵的同時為鍵設置過期時間,因為這個命令是一個類型限定的命令(只能用于字符串鍵)
與EXPIRE命令和PEXPIRE命令類似,客戶端可以通過EXPIREAT命令或PEXPIREAT命令,以秒或者毫秒精度給數(shù)據(jù)庫中的某個鍵設置過期時間(expire time)過期時間是一個UNIX時間戳,當鍵的過期時間來臨時,服務器就會自動從數(shù)據(jù)庫中刪除這個鍵

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

TTL和PTTL

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

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

設置過期時間

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

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

內(nèi)部實現(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):
# 獲取以毫秒計算的當前UNIX時間戳
now_ms = get_curent_unix_timestamp_in_ms();
# 當前時間加上TTL,得出毫秒格式的鍵過期時間
PEXIREAT(key,now_ms+ttl_in_ms)

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

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

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

在這里插入圖片描述

保存過期時間

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

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

例子

在這里插入圖片描述

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

讀寫鍵空間時的維護操作

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

  • 在讀取一個鍵之后(讀操作和寫操作都要對鍵進行讀取),服務器會根據(jù)鍵是否存在來更新服務器的鍵空間命中(hit)次數(shù)或鍵空間不命中(miss)次數(shù),這兩個值可以在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>
  • 在讀取一個鍵之后,服務器會更新鍵的LRU(最后一次使用)時間,這個值可以用于計算鍵的閑置時間,使用OBJECT idle time key命令可以查看鍵的閑置時間。
127.0.0.1:6379> set k v
OK
127.0.0.1:6379> OBJECT idletime k
(integer) 6
  • 如果服務器在讀取一個鍵時發(fā)現(xiàn)該鍵已經(jīng)過期,那么服務器會先刪除這個過期鍵然后才執(zhí)行余下的操作
  • 如果又客戶端使用WATCH命令監(jiān)視了某個鍵,那么服務器在對被監(jiān)視的鍵進行修改之后,會將這個鍵標記為臟(dirty),從而讓事務程序注意到這個鍵已經(jīng)被修改過
  • 服務器每次修改一個鍵之后,都會對臟(dirty)鍵計數(shù)器的值增1,這個計數(shù)器會觸發(fā)服務器的持久化以及復制操作
  • 如果服務器開啟了數(shù)據(jù)庫通知功能,那么在對鍵進行修改之后,服務器將按配置發(fā)送相應的數(shù)據(jù)庫通知

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

相關文章

  • Redis的4種緩存模式分享

    Redis的4種緩存模式分享

    這篇文章主要介紹了Redis的4種緩存模式分享,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下
    2022-07-07
  • Redis設置key的過期時間

    Redis設置key的過期時間

    本文主要介紹了Redis設置key的過期時間,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • Redis集群詳解

    Redis集群詳解

    這篇文章主要介紹了Redis集群詳解,需要的朋友可以參考下
    2020-07-07
  • redis?哨兵集群搭建的實現(xiàn)

    redis?哨兵集群搭建的實現(xiàn)

    本文主要介紹了redis?哨兵集群搭建的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • Redis事務處理的使用操作方法

    Redis事務處理的使用操作方法

    Redis保證一個事務中的所有命令要么都執(zhí)行,要么都不執(zhí)行(原子性),如果客戶端發(fā)送了EXEC命令,所有的命令就都會被執(zhí)行,即使此后客戶端斷線也沒關系,因為Redis中已經(jīng)記錄了所有要執(zhí)行的命令,下面通過本文給大家介紹Redis事務處理的使用操作,感興趣的朋友一起看看吧
    2021-10-10
  • Redis分布式鎖的幾種實現(xiàn)方法

    Redis分布式鎖的幾種實現(xiàn)方法

    本文主要介紹了Redis分布式鎖的幾種實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-04-04
  • 分布式鎖三種實現(xiàn)方式及對比

    分布式鎖三種實現(xiàn)方式及對比

    這篇文章主要介紹了分布式鎖三種實現(xiàn)方式及對比,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • 如何監(jiān)聽Redis中Key值的變化(SpringBoot整合)

    如何監(jiān)聽Redis中Key值的變化(SpringBoot整合)

    測試過程中我們有一部分常量值放入redis,共大部分應用調(diào)用,但在測試過程中經(jīng)常有人會清空redis,回歸測試,下面這篇文章主要給大家介紹了關于如何監(jiān)聽Redis中Key值變化的相關資料,需要的朋友可以參考下
    2024-03-03
  • 簡介Redis中的showlog功能

    簡介Redis中的showlog功能

    這篇文章主要介紹了簡介Redis中的showlog功能,作者同時對比了DEL命令的性能,需要的朋友可以參考下
    2015-06-06
  • Windows下安裝Redis的流程詳解

    Windows下安裝Redis的流程詳解

    Redis作為常用開源的非關系型數(shù)據(jù)庫,是開發(fā)中常用的數(shù)據(jù)庫之一,很多朋友不清楚Windows下安裝Redis的過程,今天小編通過分享本文給大家介紹詳細過程,一起看看吧
    2021-08-08

最新評論