Redis实战(五)-字符串,java高并发面试题

设置键为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. “1”

  2. “2”

  3. “3”

  4. “4”

如果有些键不存在,那么它的值为nil(空),结果是按照传入键的顺序返回:

127.0.0.1:6379> mget a b c f

  1. “1”

  2. “2”

  3. “3”

  4. (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

如果值不是整数,那么会返回错误:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值