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

yizhihongxing

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 GETSET命令:将 key 的值设置为新值,并返回旧值

    Redis GETSET命令的作用与使用方法: Redis GETSET命令用于将给定键的值设置为新值,并返回旧值。如果键不存在,则返回nil。 语法:GETSET key value 参数:key – 键值对的键,value – 键值对的新值 返回值:返回旧值或nil 使用方法 例如,我们有一个键为“name”的值为“john”的键值对,我们想将其更新为“…

    redis-function 2023年3月31日
    00
  • 详解Redis MSETNX命令:仅在所有给定 key 都不存在时,设置多个 key-value 对

    Redis MSETNX命令是用于设置多个key-value对的命令,它与MSET命令的区别在于,如果其中任意一个key已经存在,那么整个操作都会失败,并且不会修改数据。 MSETNX命令的基本使用方法如下: MSETNX key1 value1 [key2 value2 …] 其中,key1、key2等表示要设置的key,value1、value2等表…

    redis-function 2023年3月31日
    00
  • 详解Redis SCAN命令:迭代数据库中的 key

    Redis SCAN命令简介 Redis是一个基于内存的key-value数据库,支持多种数据结构和高效的数据访问。Redis SCAN命令是一个迭代器,用于在Redis数据库中搜索所有key。不同于keys命令需要在数据库中扫描所有key来查找所需的key,SCAN命令则通过一系列步骤逐步扫描数据库中的key,从而减少了Redis服务器的压力,提高了性能。…

    redis-function 2023年3月31日
    00
  • 详解Redis SUNION命令:获取所有给定集合的并集

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

    redis-function 2023年4月1日
    00
  • 详解Redis SRANDMEMBER命令:随机获取集合中一个或多个成员

    Redis的SRANDMEMBER命令用于从集合(set)、列表(list)、有序集合(sorted set)中随机返回一个元素,并不修改原数据结构。命令格式如下: SRANDMEMBER key [count] 其中,key是要操作的数据结构的名称,count是随机返回元素的个数。如果count为正数,那么SRANDMEMBER会随机返回count个元素;…

    redis-function 2023年4月1日
    00
  • 详解Redis HVALS命令:获取哈希表中所有字段的值

    Redis HVALS 命令用于返回哈希表中所有字段的值。在键值对应用中,哈希表是一个非常常见的数据结构,在哈希表中存储了一个键下的多个字段和其对应的值。HVALS 命令返回这些字段的值,可以直接用于读取哈希表中的所有数据。 使用方法: HVALS key 实例1 例如,我们有一个哈希表存储了学生的姓名和年龄,我们可以使用 HVALS 命令读取哈希表中所有学…

    redis-function 2023年3月31日
    00
  • 详解Redis SMEMBERS命令:获取集合中的所有成员

    SMEMBERS命令作用及使用方法 SMEMBERS命令用于获取集合中的所有成员。它的用法非常简单:SMEMBERS key,其中key是集合的键名。 例如,我们可以使用以下命令获取名为“myset”的集合中的所有成员: SMEMBERS myset 该命令将返回一个包含集合所有成员的列表。 实例1:获取集合中的所有成员 为了更好地理解SMEMBERS命令的…

    redis-function 2023年4月1日
    00
  • 详解Redis LREM命令:从列表中删除指定的元素

    Redis LREM命令的作用是删除列表中的指定元素。该命令的语法如下: LREM key count value 其中,key是列表的键名;count表示要删除的元素数量,可以为正数、负数或0;value表示要删除的元素值。 如果count是大于0的正整数,LREM命令将从列表的左侧开始查找与value相等的元素,并删除count个匹配的元素;如果coun…

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