Redis 5种数据结构及其使用场景举例--STRING

版权声明:转载请注明出处 https://blog.csdn.net/u011936655/article/details/81413505

String 数据结构是简单的 key-value 类型,value 不仅可以是 String,也可以是数字(当数字类型用 Long 可以表示的时候encoding 就是整型,其他都存储在 sdshdr 当做字符串)。

一、应用场景举例

String类型的是Redis所有数据结构中使用最为频繁的,也是最简单的数据结构,正所谓大道至简。

1、使用key-value来缓存一些不常改变的数据或,以减轻数据库的压力,如缓存组织架构信息、缓存权限配置信息、缓存用户访问次数、单点登录缓存用户sessionKey等,这种方式比较简单。

2、使用redis的原子性特性进行访问控制,如限制用户点击频率(每10秒可以点击一次)可用以下方式:

127.0.0.1:6379> setnx "order:confirm:{userId}" 1
(integer) 1

127.0.0.1:6379> expire "order:confirm:{userId}" 10
(integer) 1

以上操作中只有setnx 成功的线程才允许继续执行下去,否则,将直接提示用户“点击频率过快”

因为 setnx是原子操作,所以只有一个线程可以设置成功,其它线程设置失败,符合要求

当线程setnx 成功后,将可以执行接下来的操作,并为缓存key设置过期时间,过期后刚才设置的缓存失效,可以进行下一次点击

3、使用setbit和getbit命令来实现布隆过滤器,例如缓存所有商品id,防止缓存击穿问题

将所有商品编号n存到bitmap的第n位,1表示存在,这里假设有两个商品(12345,12346)

127.0.0.1:6379> setbit goodsIds 12345 1
(integer) 0
127.0.0.1:6379> setbit goodsIds 12346 1
(integer) 0

判断商品id是否存在

127.0.0.1:6379> getbit goodsIds 12345
(integer) 1
127.0.0.1:6379> getbit goodsIds 12347
(integer) 0
127.0.0.1:6379> 
 

二、下表列出了 redis string基本的相关命令:

序号

命令

举例

1

SET key value 

设置指定 key 的值

127.0.0.1:6379> set name 'xiaoming'

OK

2

GET key 

获取指定 key 的值。

127.0.0.1:6379> get name

"xiaoming"

3

GETRANGE key start end 

返回 key 中字符串值的子字符

127.0.0.1:6379> getrange name 4 8

"ming"

4

GETSET key value

将给定 key 的值设为 value ,并返回 key 的旧值(old value)。

127.0.0.1:6379> getset name 'xiaohong'

"xiaoming"

5

GETBIT key offset

对 key 所储存的字符串值,获取指定偏移量上的位(bit)。

127.0.0.1:6379> setbit video 100 1

(integer) 0

127.0.0.1:6379> getbit video 100

(integer) 1

6

MGET key1 [key2..]

获取所有(一个或多个)给定 key 的值。

127.0.0.1:6379> mget name name1

1) "xiaoming"

2) "xiaohong"

7

SETBIT key offset value

对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。

127.0.0.1:6379> setbit video 100 1

(integer) 0

127.0.0.1:6379> getbit video 100

(integer) 1

8

SETEX key seconds value

将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。

127.0.0.1:6379> setex name 10 xiaoming

OK

9

SETNX key value

只有在 key 不存在时设置 key 的值。

127.0.0.1:6379> setnx xiaoming_age 10

(integer) 1

127.0.0.1:6379> setnx xiaoming_age 18

(integer) 0

10

SETRANGE key offset value

用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。

127.0.0.1:6379> setrange name 3 le

(integer) 8

127.0.0.1:6379> get name

"xialeing"

11

STRLEN key

返回 key 所储存的字符串值的长度。

127.0.0.1:6379> strlen name

(integer) 8

12

MSET key value [key value ...]

同时设置一个或多个 key-value 对。

127.0.0.1:6379> mset name xiaoming name1 xiaohong

OK

13

MSETNX key value [key value ...] 

同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。

127.0.0.1:6379> msetnx name xiaoming name5 xiaogang

(integer) 0

127.0.0.1:6379> get name5

(nil)

14

PSETEX key milliseconds value

这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。

127.0.0.1:6379> psetex name 1000 xiaoming

OK

15

INCR key

将 key 中储存的数字值增一。

127.0.0.1:6379> set age 10

OK

127.0.0.1:6379> incr age

(integer) 11

16

INCRBY key increment

将 key 所储存的值加上给定的增量值(increment) 。

127.0.0.1:6379> set age 10

OK

127.0.0.1:6379> incrby age 2

(integer) 12

17

INCRBYFLOAT key increment

将 key 所储存的值加上给定的浮点增量值(increment) 。

127.0.0.1:6379> set weight 40

OK

127.0.0.1:6379> incrbyfloat weight 1.5

"41.5"

18

DECR key

将 key 中储存的数字值减一。

127.0.0.1:6379> set age 10

OK

127.0.0.1:6379> decr age

(integer) 9

19

DECRBY key decrement

key 所储存的值减去给定的减量值(decrement) 。

127.0.0.1:6379> set age 18

OK

127.0.0.1:6379> decrby age 8

(integer) 10

20

APPEND key value

如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾。

127.0.0.1:6379> append name -xionghaizi

(integer) 19

127.0.0.1:6379> get name

"xiaoming-xionghaizi"

猜你喜欢

转载自blog.csdn.net/u011936655/article/details/81413505