redis系列(二)—数据结构之字符串

在这里插入图片描述

前言

大家好,牧码心今天给大家推荐一篇redis系列—数据结构之字符串的文章,在实际工作中有很多应用场景,希望对你有所帮助。内容如下:

  • 字符串特点
  • 基本命令
  • 时间复杂度
  • 使用场景

特点

字符串类型是Redis最基础的数据结构。首先键都是字符串类型,而且其他几种数据结构都是在字符串类型基础上构建的,所以字符串类型能为其他四种数据结构的学习奠定基础。字符串类型的值实际可以是字符串(简单的字符串、复杂的字符串(例如JSON、XML))、数字(整数、浮点数),甚至是二进制(图片、音频、视频),但是值最大不能超过512MB。
字符串数据结构图:
字符串数据结构

基本命令

  • 设置值
set key value [ex seconds] [px milliseconds] [nx|xx]

下面操作设置键为hello, 值为world的键值对, 返回结果为OK代表
成功:

127.0.0.1:6379> set hello world

set命令有几个选项:
·ex seconds: 为键设置秒级过期时间。
·px milliseconds: 为键设置毫秒级过期时间。
·nx: 键必须不存在, 才可以设置成功, 用于添加。
·xx: 与nx相反, 键必须存在, 才可以设置成功, 用于更新。
除了set选项, Redis还提供了setex和setnx两个命令

setex key seconds value
setnx key value

下面的例子说明了set、 setnx、 setxx的区别:

1、当前键hello不存在:
127.0.0.1:6379> exists hello
(integer) 0
2、设置键为hello, 值为world的键值对:
127.0.0.1:6379> set hello world
OK
3、因为键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
  • 获取值
get key

下面操作获取键hello的值:

127.0.0.1:6379> get hello
"world”

如果要获取的键不存在, 则返回nil(空)

  • 批量设置值
mset key value [key value ...]

下面操作通过mset命令一次性设置4个键值对:

127.0.0.1:6379> mset a 1 b 2 c 3 d 4
OK
  • 批量获取值
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"

批量操作命令可以有效提高开发效率, 假如没有mget这样的命令, 要执行n次get命令,如图所示,具体耗时如下:

n次get时间 = n次网络时间 + n次命令时间
n次get命令执行模型

使用mget命令后, 要执行n次get命令操作只需要按照图2的方式来完
成, 具体耗时如下:

n次get时间 = 1次网络时间 + n次命令时间
一次mget命令执行模型

Redis可以支撑每秒数万的读写操作, 但是这指的是Redis服务端的处理能力, 对于客户端来说, 一次命令除了命令时间还是有网络时间, 假设网络时间为1毫秒, 命令时间为0.1毫秒(按照每秒处理1万条命令算) , 那么执行1000次get命令和1次mget命令的区别如表, 因为Redis的处理能力已经足够高, 对于开发人员来说, 网络可能会成为性能的瓶颈。
1000次get和1次get对比表
学会使用批量操作, 有助于提高业务处理效率, 但是要注意的是每次批量操作所发送的命令数不是无节制的, 如果数量过多可能造成Redis阻塞或者网络拥塞。

  • 计数
incr key

incr命令用于对值做自增操作, 返回结果分为三种情况:
·值不是整数, 返回错误。
·值是整数, 返回自增后的结果。
·键不存在, 按照值为0自增, 返回结果为1。
除了incr命令, Redis提供了decr( 自减)/incrby( 自增指定数字)/
decrby( 自减指定数字)/ incrbyfloat( 自增浮点数)

时间复杂度

字符串类型命令的时间复杂度, 开发人员可以参考此表, 结合自身业务需求和数据大小选择适合的命令。
字符串类型命令的时间复杂度

使用场景

  • 缓存功能
  • 计数
  • 共享Session
  • 限速
    除了上面介绍的几种使用场景, 字符串还有非常多的适用场景, 开发人员可以结合字符串提供的相应命令充分发挥自己的想象力。

参考

  • 《redis运维与开发》
发布了91 篇原创文章 · 获赞 27 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/xhwwc110/article/details/104808686