详解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 INCRBYFLOAT命令:将一个 key 的值增加一个指定的浮点数

    Redis INCRBYFLOAT命令的作用与使用方法 INCRBYFLOAT命令用于将指定键的值增加指定的浮点数值(支持负数),如果键不存在,则创建一个新键并将其值设为0。如果键存在,但其值不是浮点数,则抛出错误。 命令格式如下: INCRBYFLOAT key increment 其中,key为指定的键名,increment是增加的浮点数值。 使用方法:…

    redis-function 2023年3月31日
    00
  • 详解Redis EXISTS命令:检查 key 是否存在

    Redis的EXISTS命令的作用是检查一个key是否存在于Redis数据库中。如果该key存在,则返回1;如果该key不存在,则返回0。 使用方法: EXISTS key 实例1: 127.0.0.1:6379> SET key1 "value1" OK 127.0.0.1:6379> EXISTS key1 (intege…

    redis-function 2023年4月1日
    00
  • 详解Redis SUBSTR命令:获取 key 的子字符串

    Redis SUBSTR命令的作用是获取指定字符串的子串。它的基本用法是: SUBSTR key start end 其中,key是要获取子串的字符串的Key,start和end是子串的起始和结束位置,它们都是以0为基准的偏移量。根据Redis的规则,end可取的最大值为字符串长度减1。 以下是两个示例: 获取字符串子串 假设有一个Key为“str”,Val…

    redis-function 2023年3月31日
    00
  • 详解Redis UNSUBSCRIBE命令:取消订阅一个或多个频道

    Redis UNSUBSCRIBE命令的作用是取消客户端订阅指定的一个或多个频道。当客户端不再需要接收某个频道的消息时,可以使用UNSUBSCRIBE命令取消订阅,这样客户端将不再接收该频道的任何消息。 UNSUBSCRIBE命令的使用方法如下: UNSUBSCRIBE [channel [channel …]] 其中,channel是要取消订阅的频道名…

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

    Redis SINTERSTORE命令的作用与使用方法 SINTERSTORE命令是Redis的一种集合操作命令,该命令用于求两个或多个集合的交集,并将结果保存到新的集合中。具体来说,这个命令的作用是将给定的所有集合的交集添加到一个新的集合中。 使用方法 SINTERSTORE的基本语法如下: SINTERSTORE destination key [key…

    redis-function 2023年4月1日
    00
  • 详解Redis PERSIST命令:移除 key 的过期时间

    Redis PERSIST命令的作用 Redis是一种内存型数据库,所以所有的数据都是存储在内存中的,这样可以大大加快数据的读写速度。但是一旦Redis重启或崩溃,所有数据都会丢失。为了避免这种情况的发生,Redis提供了PERSIST命令,用于持久化一个键值对,即将一个键值对从内存中持久化到硬盘上。 使用方法 PERSIST命令的语法如下: PERSIST…

    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 HINCRBYFLOAT命令:将哈希表中指定字段的值增加指定的浮点数

    Redis HINCRBYFLOAT命令是用于对哈希表中的指定字段进行浮点数加操作的命令,其作用是将哈希表中指定字段的值增加指定的浮点数值。 使用方法: HINCRBYFLOAT key field increment 参数说明: key:哈希表的键名。 field:要增加值的哈希字段名称。 increment:增加的浮点数值。 返回值:更新后的哈希字段值。…

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