设置键为hello,值为world的键值对:
127.0.0.1:6379> set hello world
OK
因为键hello已存在,所以setnx失败,返回结果为0:
127.0.0.1:6379> setnx hello redis
(integer) 0
因为键hello已存在,所以set xx成功,返回结果为OK:
127.0.0.1:6379> set hello jedis xx
OK
setnx和setxx在实际使用中有什么应用场景吗?以setnx命令为例子,由于Redis的单线程命令处理机制,如果有多个客户端同时执行setnx key value,根据setnx的特性只有一个客户端能设置成功,setnx可以作为分布式锁的一种实现方案,Redis官方给出了使用setnx实现分布式锁的方法:Distributed locks with Redis – Redis
2、获取值
get key
下面操作获取键hello的值:
127.0.0.1:6379>
《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》
【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享
get hello
“world”
如果要获取的键不存在,则返回nil(空):
127.0.0.1:6379> get not_exist_key
(nil)
3、批量设置值
mset key value [key value …]
下面操作通过mset命令一次性设置4个键值对:
127.0.0.1:6379> mset a 1 b 2 c 3 d 4
OK
4、批量获取值
mget key [key …]
下面操作批量获取了键a、b、c、d的值:
127.0.0.1:6379> mget a b c d
-
“1”
-
“2”
-
“3”
-
“4”
如果有些键不存在,那么它的值为nil(空),结果是按照传入键的顺序返回:
127.0.0.1:6379> mget a b c f
-
“1”
-
“2”
-
“3”
-
(nil)
批量操作命令可以有效提高开发效率,假如没有mget这样的命令,要执行n次get命令,图示如下:
使用mget命令后,要执行n次get命令操作,图示如下:
Redis可以支撑每秒数万的读写操作,但是这指的是Redis服务端的处理能力,对于客户端来说,一次命令除了命令时间还是有网络时间,假设网络时间为1毫秒,命令时间为0.1毫秒(按照每秒处理1万条命令算),那么执行1000次get命令和1次mget命令的区别图示如下,因为Redis的处理能力已经足够高,对于开发人员来说,网络可能会成为性能的瓶颈。
学会使用批量操作,有助于提高业务处理效率,但是要注意的是每次批量操作所发送的命令数不是无节制的,如果数量过多可能造成Redis阻塞或者网络拥塞。
5、计数
incr key
incr命令用于对值做自增操作,返回结果分为三种情况:
·值不是整数,返回错误。
·值是整数,返回自增后的结果。
·键不存在,按照值为0自增,返回结果为1。
例如对一个不存在的键执行incr操作后,返回结果是1:
127.0.0.1:6379> exists key
(integer) 0
127.0.0.1:6379> incr key
(integer) 1
再次对键执行incr命令,返回结果是2:
127.0.0.1:6379> incr key
(integer) 2
如果值不是整数,那么会返回错误: