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

Redis中Key過期時間的設置與應用方式

 更新時間:2025年11月19日 09:02:23   作者:沒事學AI  
文章主要介紹了Redis中設置和管理Key過期時間的多種命令,包括EXPIRE、PEXPIRE、EXPIREAT、PEXPIREAT、SET命令結合EX或PX參數、SETEX命令,以及獲取剩余過期時間的TTL和PTTL命令,最后通過緩存、會話管理和分布式鎖等應用場景展示了這些命令的實際應用

一、設置Key過期時間的命令

(一)EXPIRE命令

EXPIRE用于設置一個Key在指定秒數后過期。其語法為:EXPIRE key seconds 。

比如,我們要將名為user:1:session的Key設置為3600秒(1小時)后過期,在Redis客戶端中執(zhí)行:

127.0.0.1:6379> EXPIRE user:1:session 3600
(integer) 1

返回值1表示設置成功,如果Key不存在或設置失敗則返回0 。此命令適用于對時間精度要求不高,以秒為單位設置過期時間的場景,像一般的緩存數據失效時間設置。

(二)PEXPIRE命令

PEXPIRE與EXPIRE類似,不過它是以毫秒為單位設置Key的過期時間,語法為:PEXPIRE key milliseconds 。

若要將message:1這個Key設置為5000毫秒(5秒)后過期,操作如下:

127.0.0.1:6379> PEXPIRE message:1 5000
(integer) 1

該命令適用于對時間精度要求較高的場景,例如某些對消息時效性要求嚴格的消息隊列場景。

(三)EXPIREAT命令

EXPIREAT通過指定一個Unix時間戳(以秒為單位),讓Key在該時間點過期。語法為:EXPIREAT key timestamp 。

假設我們獲取到當前時間戳為1693382400(對應2023年9月1日00:00:00),要讓cache:data這個Key在2023年9月2日00:00:00過期,即時間戳1693468800,則執(zhí)行:

127.0.0.1:6379> EXPIREAT cache:data 1693468800
(integer) 1

這種方式適用于需要在特定時間點讓Key失效的場景,如限時活動相關數據的過期控制。

(四)PEXPIREAT命令

PEXPIREAT同樣是基于時間戳設置過期時間,但時間戳是以毫秒為單位,語法為:PEXPIREAT key milliseconds - timestamp 。

比如要讓token:user1在2023年9月1日00:00:01.500過期,對應的毫秒時間戳為1693382401500,操作如下:

127.0.0.1:6379> PEXPIREAT token:user1 1693382401500
(integer) 1

適用于對過期時間點精度要求極高的場景,如金融交易中某些臨時憑證的過期時間設置。

二、在設置值時同時設置過期時間

(一)SET命令結合EX參數

使用SET key value EX seconds可以在設置Key值的同時指定其在多少秒后過期。

例如,設置product:1:price的值為99.9,并讓它在86400秒(1天)后過期:

127.0.0.1:6379> SET product:1:price 99.9 EX 86400
OK

這種方式在需要創(chuàng)建新的緩存數據并設置過期時間時非常便捷,代碼更簡潔。

(二)SET命令結合PX參數

SET key value PX milliseconds用于在設置Key值時指定毫秒級別的過期時間。

比如設置tmp:data的值為some temp data,并在3000毫秒(3秒)后過期:

127.0.0.1:6379> SET tmp:data "some temp data" PX 3000
OK

適用于對時間精度要求高且在設置值時就確定過期時間的場景。

(三)SETEX命令

SETEX key seconds value專門用于設置一個帶有過期時間(秒為單位)的字符串值。

如設置news:1:content的值為一篇新聞內容,并讓它在7200秒(2小時)后過期:

127.0.0.1:6379> SETEX news:1:content "This is a news" 7200
OK

在只針對字符串類型的Key設置值和過期時間時,SETEX命令更為直觀。

三、獲取Key的剩余過期時間

(一)TTL命令

TTL用于獲取一個Key的剩余過期時間(以秒為單位)。語法為:TTL key

對于之前設置的user:1:session,可以這樣獲取其剩余過期時間:

127.0.0.1:6379> TTL user:1:session
(integer) 3590

返回值3590表示該Key還有3590秒過期。如果Key不存在或已過期,返回-2;如果Key沒有設置過期時間(即永久有效),返回-1 。此命令常用于檢查緩存數據何時失效,以便提前進行數據更新等操作。

(二)PTTL命令

PTTL獲取Key的剩余過期時間(以毫秒為單位),語法為:PTTL key

對于設置了毫秒級過期時間的message:1,獲取剩余過期時間操作如下:

127.0.0.1:6379> PTTL message:1
(integer) 4990

返回值4990表示還有4990毫秒過期。同樣,Key不存在或已過期返回-2,永久有效返回-1 。適用于需要精確了解剩余毫秒級過期時間的場景。

四、移除Key的過期時間

使用PERSIST命令可以移除一個Key的過期時間,使其變?yōu)橛谰糜行АUZ法為:PERSIST key 。

例如,之前設置了過期時間的cache:data,若要讓它永久有效,執(zhí)行:

127.0.0.1:6379> PERSIST cache:data
(integer) 1

返回值1表示操作成功,之后再使用TTL cache:data查詢,會返回-1,表示該Key已變?yōu)橛谰糜行?。在某些情況下,原本設置了過期時間的Key,由于業(yè)務需求變更,需要長期保存時,就可使用PERSIST命令。

五、應用場景及案例

(一)緩存場景

在Web應用中,常使用Redis作為緩存來提升數據讀取速度。例如,電商網站中商品詳情數據的緩存。

假設我們有一個商品詳情頁面,每次查詢數據庫獲取商品詳情數據開銷較大。可以將商品詳情數據緩存到Redis中,并設置合理的過期時間。

import redis

r = redis.Redis(host='localhost', port=6379, db=0)

def get_product_detail(product_id):
    product_key = f'product:{product_id}:detail'
    product_detail = r.get(product_key)
    if product_detail is None:
        # 從數據庫獲取商品詳情數據
        product_detail = get_product_detail_from_db(product_id)
        if product_detail:
            # 將數據緩存到Redis,設置1小時過期
            r.setex(product_key, 3600, product_detail)
    return product_detail

這里使用SETEX命令在設置商品詳情數據時,同時設置了1小時的過期時間。當緩存過期后,下次請求會重新從數據庫獲取數據并更新緩存,保證數據的實時性。

(二)會話管理場景

在Web應用的用戶會話管理中,Redis可用于存儲用戶會話信息。

例如,用戶登錄成功后,將用戶的會話信息存儲在Redis中,并設置過期時間,以自動清理長時間未活動的會話。

import redis
import uuid

r = redis.Redis(host='localhost', port=6379, db=0)

def create_session(user_id):
    session_id = str(uuid.uuid4())
    session_key = f'session:{session_id}'
    session_data = {'user_id': user_id}
    # 將會話信息存儲到Redis,設置30分鐘過期
    r.setex(session_key, 1800, str(session_data))
    return session_id

def get_session(session_id):
    session_key = f'session:{session_id}'
    session_data = r.get(session_key)
    if session_data:
        return eval(session_data.decode('utf - 8'))
    return None

上述代碼中,CREATE_SESSION函數創(chuàng)建用戶會話時,使用SETEX設置會話信息在30分鐘后過期。GET_SESSION函數用于獲取會話信息,若會話已過期,GET操作返回None,提示用戶重新登錄。

(三)分布式鎖場景

在分布式系統(tǒng)中,使用Redis實現分布式鎖時,設置Key的過期時間可防止死鎖。

import redis
import time

r = redis.Redis(host='localhost', port=6379, db=0)

def acquire_lock(lock_key, expire_time=10):
    lock_value = str(uuid.uuid4())
    success = r.set(lock_key, lock_value, ex=expire_time, nx=True)
    return success, lock_value

def release_lock(lock_key, lock_value):
    pipe = r.pipeline()
    while True:
        try:
            pipe.watch(lock_key)
            if pipe.get(lock_key).decode('utf - 8') == lock_value:
                pipe.multi()
                pipe.delete(lock_key)
                pipe.execute()
                return True
            pipe.unwatch()
            break
        except redis.WatchError:
            continue
    return False

ACQUIRE_LOCK函數中,使用SET命令結合EX參數設置鎖的過期時間為10秒。如果持有鎖的進程在10秒內未完成操作并釋放鎖,Redis會自動刪除鎖Key,防止其他進程永遠無法獲取鎖,即避免死鎖。

總結

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

相關文章

  • Redis中的配置文件,數據持久化,事務

    Redis中的配置文件,數據持久化,事務

    這篇文章主要介紹了Redis中的配置文件,數據持久化,事務問題,具有很好的參考價值,希望對大家有所幫助。
    2022-12-12
  • 關于Redis解決Session共享問題

    關于Redis解決Session共享問題

    這篇文章主要介紹了Redis解決Session共享問題,本文結合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • 解決redis修改requirepass后不生效的問題

    解決redis修改requirepass后不生效的問題

    今天小編就為大家分享一篇解決redis修改requirepass后不生效的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • redis集群部署方案和redis常用命令

    redis集群部署方案和redis常用命令

    本文介紹了部署Redis集群的詳細步驟以及常用命令和管理操作,同時提醒了生產環(huán)境中的注意事項,如配置持久化、密碼認證和時鐘同步,本文給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • Ubuntu下安裝redis的2種方法分享

    Ubuntu下安裝redis的2種方法分享

    redis是一個開源的、使用C語言編寫的、支持網絡交互的、可基于內存也可持久化的Key-Value數據庫。這篇文章對redis就不進行詳細的介紹了,這篇文章主要給大家介紹了Ubuntu下安裝redis的兩種方法,有需要的朋友們可以參考學習,下面來一起看看吧。
    2016-12-12
  • Redis中key過期策略的實現

    Redis中key過期策略的實現

    Key的過期機制是Redis保持高可用性的重要策略,過期策略分為惰性過期和定期過期,惰性過期在每次訪問key時檢查是否過期,定期過期則由serverCron方法定時清理過期key,本文就來詳細的介紹一下,感興趣的可以了解一下
    2024-09-09
  • Redis基于Bitmap實現用戶簽到功能

    Redis基于Bitmap實現用戶簽到功能

    很多應用上都有用戶簽到的功能,尤其是配合積分系統(tǒng)一起使用。本文主要介紹了Redis基于Bitmap實現用戶簽到功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • redis哈希和集合_動力節(jié)點Java學院整理

    redis哈希和集合_動力節(jié)點Java學院整理

    這篇文章主要為大家詳細介紹了redis哈希和集合的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • redis中hash表內容刪除的方法代碼

    redis中hash表內容刪除的方法代碼

    在本篇文章里小編給各位整理了關于redis中hash表內容怎么刪除的方法以及技巧代碼,需要的朋友們分享下。
    2019-07-07
  • 使用Redis實現會話管理的示例代碼

    使用Redis實現會話管理的示例代碼

    文章介紹了如何使用Redis實現會話管理,包括會話的創(chuàng)建、讀取、更新和刪除操作,通過設置會話超時時間并重置,可以確保會話在用戶持續(xù)活動期間不會過期,此外,展示了使用Redis的Hashes存儲更多信息,并使用Redis集群提高系統(tǒng)的可用性和擴展性,感興趣的朋友跟隨小編一起看看吧
    2025-12-12

最新評論

垦利县| 三明市| 岳西县| 珠海市| 宁国市| 澎湖县| 平乐县| 普宁市| 江阴市| 岑巩县| 辽宁省| 西城区| 禹城市| 淮阳县| 舟曲县| 宿迁市| 忻城县| 安远县| 南溪县| 长阳| 铜山县| 富川| 盐亭县| 都匀市| 丁青县| 香港| 合水县| 九台市| 宁都县| 兖州市| 兰溪市| 临海市| 酒泉市| 南溪县| 海南省| 潼南县| 运城市| 山东| 太保市| 葫芦岛市| 黔江区|