redis set nx

set数据结构

-1 永久存在

image

-2 过期已删除或者是键不存在

redis命令参考

https://redis.io/commands/set/

redis键值的计数

  • key先设置值后设置过期时间
clear
flushall
get a
set a 1
get a
ttl a
expire a 10
get a
ttl a

image

  • 使用nx对key进行设置
flushall
get a
ttl a
set a 1 nx ex 10
incr a
get a
ttl a
get a
ttl a

image

  • 若key存在使用setnx设置key的值增加过期时间
flushall
get a
ttl a
set a 10
get a
ttl a
set a 1 nx ex 10
get a
ttl a

setnx中set的值不生效,且设置的过期时间不生效

  • 先setnx 再set
flushall
get a
ttl a
set a 1 nx ex 10
get a
ttl a
set a 10
get a
ttl a
get a
ttl a

image

setnx 中设置的过期时间不生效,后set设置的值生效

incr 自增

  • 原始的键值不存在
flushall
get a
ttl a
incr a
get a
ttl a
incr a
get a
ttl a

image

键若不存在,则键默认值为0,每incr一次+1

  • 原始的键值存在,且不为0
flushall
set a 3
get a
ttl a
incr a
get a
ttl a
incr a
get a
ttl a

image

  • 若健存在,且数据类型为字符串
flushall
set a  k
get a
ttl a
incr a
get a
ttl a
incr a
get a
ttl a

image

  • m分钟n次计数实现
flushall
set a  1
expire a 10
get a
ttl a
incr a
get a
ttl a
incr a
get a
ttl a

image

分析:该操作set 和 expire 将分为两个命令对数据库进行操作

flushall
set a 1 nx ex 10
ttl a
incr a
get a
ttl a
incr a
get a
ttl a

image

分析:该操作将set 和 expire 同时进行执行

posted @ 2023-06-01 16:37  cerofang  阅读(69)  评论(0编辑  收藏  举报