redis-string

215 阅读4分钟

[TOC]

1. 介绍

字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等。在Redis中字符串类型的Value最多可以容纳的数据长度是==512M==。

2. 命令

2.1 赋值

命令:==SET key value==

命令说明:如果不存在指定Keyd的映射,那么增加这个映射,否则更新映射的值。

返回值:OK

image-20200714190140584

2.2 取值

命令:==GET key==

命令说明:获取指定Key的值,如果值不是String类型,那么返回错误

返回值:如果key存在,返回key的值,否则返回null

image-20200714190422278

2.3 获取并更新

命令:==GETSET key value==

命令说明:首先获取key的值,然后用value覆盖原值。这是一个原子操作。

返回值:如果原来不存在key的映射的值,那么返回null,否则返回key原来的值。

image-20200714190722375

2.4 递增

命令:==INCR key==

命令说明:将指定key的值递增1后返回。key对应的值必须是数字,或者可以转为数字,否则执行失败。该操作具有原子性。

返回值:key对应的值递增后的值,如果key不存在,那么原值为0.

image-20200714191120514

2.5 递减

命令:==DECR key==

命令说明:将指定key的值递减1后返回。key对应的值必须是数字,或者可以转为数字,否则执行失败。该操作具有原子性。

返回值:key对应的值递减后的值,如果key不存在,那么原值为0.

image-20200714191611299

2.6 增加

命令:==INCRBY key value==

命令说明:将指定key的值增加指定的值value后返回。key对应的值必须是数字,或者可以转为数字,否则执行失败。该操作具有原子性。

返回值:key对应的值增加后的值,如果key不存在,那么原值为0.

image-20200714191957001

2.7 减少

命令:==DECRBY key value==

命令说明:将指定key的值减少指定的值value后返回。key对应的值必须是数字,或者可以转为数字,否则执行失败。该操作具有原子性。

返回值:key对应的值减少后的值,如果key不存在,那么原值为0.

2.8 超时赋值

命令:==SETEX key seconds value==

命令说明:设置key的值为value,同时设置该key存活时间为seconds.该操作具有原子性。

返回值:OK(如果key有原值,将会被覆盖)

image-20200714193513124

2.9 存在赋值

命令:==SETNX key value==

命令说明:如果key不存在,那么增加key的映射,以及key的值为value;如果key存在,那么什么都不做。

返回值:1:设置成功;0:设置失败。

image-20200714193920938

2.10 追加

命令:==APPEND key value==

命令说明:将value追加到key的值的后面,如果key不存在,那么初始值为空。

返回值:追加后value的长度。

image-20200714194227149

2.11 获取长度

命令:==STRLEN key value==

命令说明:返回指定key的值的字符串的长度。如果key不存在,长度为0.

返回值:长度。

image-20200714195346962

2.12 批量赋值

命令:==MSET key0 value0[key1 value1...]==

命令说明:批量赋值key指定的value。该操作具有原子性。

返回值:OK

image-20200714195753948

2.13 批量取值

命令:==MGET key0 [key1 ...]==

命令说明:批量取值key。如果key不存在,或者不是字符串,返回空(Nil)

返回值:values 列表

image-20200714200142731

2.14 批量存在赋值

命令:==MSETNX key1 value1 [key2 value2 ...]==

命令说明:批量设置值,不存在设置,如果任意一个key已经存在,那么该次操作失败,该次全部操作回滚。

返回值:1:成功;0:失败。

image-20200714200518955

3. 示例

3.1 秒杀

背景:618活动,在线1W人,秒杀10件商品。

  1. 商品初始化
  2. 秒杀
  3. 结束

设置商品数量:

image-20200714200852118

然后每个线程都使用递减操作:

image-20200714200926420

因为递减是原子操作,所以只要最后线程得到的结果大于0,那么就是秒杀成功的线程

3.2 缓存

背景:将Redis作为数据库的缓存,将经常使用的数据放到redis中。

修改的时候使用==获取并更新==操作。

image-20200714201402041

当然可以设置缓存过期时间:

image-20200714201500388