详解Redis SET命令:设置一个 key-value 对

Redis SET命令是用于在redis中设置指定键的值。它可以执行以下操作:

1. SET key value [EX seconds] [PX milliseconds] [NX|XX]

设置键key的值为value。如果键不存在,就创建这个键并将值设为value。如果键已存在,它的值就被覆盖。
可选项:

  • EX seconds:键的过期时间(秒),到期后键会被自动删除。
  • PX milliseconds: 键的过期时间(毫秒),到期后键会被自动删除。
  • NX:只有当键不存在时才设置值。
  • XX:只有当键已经存在时才设置值。

例:

> SET mykey "Hello World"
OK
> GET mykey
"Hello World"
> SET mykey "Hello Redis" EX 60
OK
> TTL mykey   # 查看键的过期时间
(integer) 57

在上面的例子中,首先设置键mykey的值为"Hello World",然后将其覆盖为"Hello Redis",并设置了过期时间为60秒,最后用TTL命令查看mykey还有57秒过期。

2. SETNX key value

如果键key不存在,就设置它的值为value,否则什么也不做。
例:

> SETNX mykey "Hello"
(integer) 1
> SETNX mykey "Hello World"
(integer) 0
> GET mykey
"Hello"

在上面的例子中,首先设置mykey的值为"Hello",因为mykey不存在,SETNX返回1。接着再次使用SETNX命令设置mykey的值为"Hello World",但这次返回0,因为mykey已经存在了。

3. SETEX key seconds value

设置键key的值为value,并设置过期时间为seconds秒。和SET命令不同的是,SETEX是一个原子操作,它不需要使用EXPIRE命令单独设置过期时间。
例:

> SETEX mykey 10 "Hello"
OK
> GET mykey
"Hello"
> TTL mykey
(integer) 10

在上面的例子中,设置mykey的值为"Hello",并将其过期时间设置为10秒。

实例1:缓存结果

Redis可以用来做缓存,缓存的结果可以设置过期时间,避免缓存占用过多内存。

import redis

# 连接redis
r = redis.StrictRedis(host='localhost', port=6379, db=0)

def get_data_from_db(key):
    # TODO: 从数据库获取数据
    # ...
    data = ['data1', 'data2', 'data3']
    return data

def get_data(key):
    # 先查找缓存中是否有值
    data = r.get(key)
    if data is None:
        # 缓存中没有,从数据库获取并保存到缓存
        data = get_data_from_db(key)
        r.setex(key, 60, data)  # 缓存60秒
    return data

以上代码中,get_data函数先尝试从缓存中获取数据,如果没有则从数据库中获取并保存到缓存中,过期时间为60秒。

实例2:分布式锁

Redis可以利用它的SETNX命令实现分布式锁,用于控制多个进程/线程对同一共享资源的并发访问。

import redis

# 连接redis
r = redis.StrictRedis(host='localhost', port=6379, db=0)

def acquire_lock(lockname, timeout=10):
    '''
    请求获得锁
    '''
    end = time.time() + timeout
    while time.time() < end:
        if r.setnx(lockname, 1):
            return True
        time.sleep(0.001)
    return False

def release_lock(lockname):
    '''
    释放锁
    '''
    r.delete(lockname)

以上代码中,acquire_lock函数请求获得锁,如果获得成功则返回True,如果超时则返回False。release_lock函数用于释放锁。锁的实现就是利用Redis的setnx命令在key不存在时设置key的值,如果返回1表示成功获得锁,如果返回0表示锁已经被其他进程/线程占用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Redis SET命令:设置一个 key-value 对 - Python技术站

(0)
上一篇 2023年3月31日
下一篇 2023年3月31日

相关文章

  • 详解Redis SUNION命令:获取所有给定集合的并集

    Redis SUNION命令概述 Redis SUNION命令用于计算给定key的数据的并集,返回一个集合。该命令可以操作多个集合,而不仅限于两个集合的计算。需要注意的是,集合的本质是无序的,重复的元素只会出现一次。 语法:SUNION key [key …] Redis SUNION命令实例 操作两个集合的并集 示例数据: set key1 1 2 3…

    redis-function 2023年4月1日
    00
  • 详解Redis HEXISTS命令:检查哈希表中是否存在指定字段

    Redis HEXISTS命令的作用 Redis中的HEXISTS命令用于检查一个指定的字段是否存在于一个指定的键值对中。在Redis中,键值对中可以包含多个字段,每个字段保存一个值,HEXISTS命令可以帮助用户检查这些字段是否存在。 Redis HEXISTS命令的使用方法 HEXISTS命令的语法如下所示: HEXISTS key field 其中,k…

    redis-function 2023年4月1日
    00
  • 详解Redis EXPIRE命令:设置 key 的过期时间(单位命令:秒)

    Redis EXPIRE命令的作用是为键设置过期时间,让Redis数据库自动删除过期的键。 使用方法: EXPIRE key seconds 将键值对key的过期时间设置为seconds秒后自动删除。如果键不存在或者没有生存时间,返回0;如果设置成功,返回1。 可以通过TTL命令查看键的剩余存活时间。 实例1 redis> SET mykey &quo…

    redis-function 2023年3月31日
    00
  • 详解Redis TYPE命令:获取一个 key 的数据类型

    Redis TYPE命令的作用是返回key的数据类型。它接受一个参数,即要进行类型判断的key值,返回值可能为string、list、set、zset、hash五种数据类型中的一种。 使用方法: TYPE key 实例一: > SET key1 "hello" OK > TYPE key1 string 实例二: > LPUSH key2…

    redis-function 2023年3月31日
    00
  • 详解Redis SUNIONSTORE命令:将所有给定集合的并集存储在目标集合中

    Redis SUNIONSTORE命令是用于获取多个集合的并集并存储到一个新的集合中的命令。它的语法如下: SUNIONSTORE destination_key key [key …] 其中,destination_key表示新集合的KEY名称,key表示要求取并集的集合的KEY名称。 使用SUNIONSTORE命令,可以方便地合并多个集合,得到一个包…

    redis-function 2023年4月1日
    00
  • 详解Redis LSET命令:将列表中指定位置的元素设置为新值

    Redis LSET命令的作用: Redis LSET命令用于在Redis列表中设置指定索引位置的元素的值。如果该索引位置不存在元素,则LSET命令会返回错误。如果查询范围超过列表长度,将抛出错误,但不会改变现有元素。 Redis LSET命令的使用方法: LPUSH key value [value …] 第1步:使用LPUSH命令将元素添加到列表中。 R…

    redis-function 2023年4月1日
    00
  • 详解Redis RPOPLPUSH命令:弹出列表 source 的尾部元素,插入到列表 destination 的头部,并返回被弹出的元素

    Redis RPOPLPUSH 命令的作用 RPOPLPUSH 命令用于从一个列表的末尾弹出一个元素,同时将该元素插入到另一个列表的开头。 该命令是 RPOP 和 LPUSH 命令的结合体。它可以避免在两个列表之间进行多次操作,从而提高操作的效率。 Redis RPOPLPUSH 命令的使用方法 RPOPLPUSH 命令需要指定两个参数:源列表和目标列表。 …

    redis-function 2023年4月1日
    00
  • 详解Redis DECRBY命令:将一个 key 的值减少一个指定的整数

    Redis DECRBY命令是一个递减操作命令,作用是将键对应的值减去指定的整数值。它是DECR命令的增强版,允许用户自定义减少的值。 DECRBY key decrement 示例: 实现计数器 一个简单的示例是实现一个计数器,记录每个用户浏览某个网页的次数。首先,我们需要使用INCRBY命令初始化计数器: > INCRBY page_view:1001 …

    redis-function 2023年3月31日
    00
合作推广
合作推广
分享本页
返回顶部