Redis的String类型

Redis 字符串命令

下表列出了常用的 redis 字符串命令:

序号命令及描述
1 SET key value 
设置指定 key 的值
2 GET key 
获取指定 key 的值。
3 GETRANGE key start end 
返回 key 中字符串值的子字符
4 GETSET key value
将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
5 GETBIT key offset
对 key 所储存的字符串值,获取指定偏移量上的位(bit)。
6 MGET key1 [key2..]
获取所有(一个或多个)给定 key 的值。
7 SETBIT key offset value
对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。
8 SETEX key seconds value
将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。
9 SETNX key value
只有在 key 不存在时设置 key 的值。
10 SETRANGE key offset value
用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。
11 STRLEN key
返回 key 所储存的字符串值的长度。
12 MSET key value [key value ...]
同时设置一个或多个 key-value 对。
13 MSETNX key value [key value ...] 
同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
14 PSETEX key milliseconds value
这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。
15 INCR key
将 key 中储存的数字值增一。
16 INCRBY key increment
将 key 所储存的值加上给定的增量值(increment) 。
17 INCRBYFLOAT key increment
将 key 所储存的值加上给定的浮点增量值(increment) 。
18 DECR key
将 key 中储存的数字值减一。
19 DECRBY key decrement
key 所储存的值减去给定的减量值(decrement) 。
20 APPEND key value
如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾。

测试了常用的命令

[root@iZbp143t3oxhfc3ar7jey0Z redis-4.0.12]# redis-cli
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379> set key1 value1
OK
127.0.0.1:6379> get key1
"value1"
127.0.0.1:6379> MSET s1 v1 s1 v2
OK
127.0.0.1:6379> mget s1 key1
1) "v2"
2) "value1"
127.0.0.1:6379> STRLEN s1
(integer) 2
127.0.0.1:6379> APPEND s1 aabbcc
(integer) 8
127.0.0.1:6379> get s1
"v2aabbcc"
127.0.0.1:6379> incr s1
(error) ERR value is not an integer or out of range
127.0.0.1:6379> set num 1
OK
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> get num
"2"
127.0.0.1:6379> incr num
(integer) 3
127.0.0.1:6379> get num
"3"
127.0.0.1:6379> help INCRBY

  INCRBY key increment
  summary: Increment the integer value of a key by the given amount
  since: 1.0.0
  group: string

127.0.0.1:6379> SETEX t1 20 v2
OK
127.0.0.1:6379> get t1
"v2"
127.0.0.1:6379> get t1
(nil)
127.0.0.1:6379>

说几个String类型常用的场景

1.可以当自增主键,具有原子性

  • string在redis内部存储默认就是一个字符串,当遇到增减类操作incr, decr时会转成数值型进行计算。
  • redis所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发带来的数据影响。
  • 注意: 按数值进行操作的数据,如果原始数据不能转成数值,或超越了redis 数值上限范围,将报错。9223372036854775807( java中long型数据最大值, Long.MAX_VALUE)

适用:

  • redis用于控制数据库表主键id,为数据库表主键提供生成策略,保障数据库表的主键唯一性
  • 此方案适用于所有数据库,且支持数据库集群

2.时效性

“最强女生”启动海选投票,只能通过微信投票,每个微信号每 4 小时只能投1票。
电商商家开启热门商品推荐,热门商品不能一直处于热门期,每种商品热门期维持3天, 3天后自动取消热门。

127.0.0.1:6379> SETEX t1 20 v2
OK
127.0.0.1:6379> get t1
"v2"
127.0.0.1:6379> get t1
(nil)
127.0.0.1:6379>

如果发现存在redis中,则无法进行操作 

3.存储信息

在redis中为大V用户设定用户信息,以用户主键和属性值作为key,后台设定定时刷新策略即可

eg: user:id:3506728370:fans → 12210947
eg: user:id:3506728370:blogs → 6164
eg: user:id:3506728370:focuss → 83

在redis中以json格式存储大V用户信息,定时刷新(也可以使用hash类型)
eg: user:id:3506728370 →

{"id":3506728370,"name":"春晚","fans":12210862,"blogs":6164, "focus":83}

注:上面2种各有优缺点,第一种改的方便,第二个查的方便

redis应用于各种结构型和非结构型高热度数据访问加速 

 4.注意事项

  • string 类型数据操作的注意事项

          ① 表示运行结果是否成功
              (integer) 0 → false 失败
              (integer) 1 → true 成功
         ② 表示运行结果值
              (integer) 3 → 3 3个
              (integer) 1 → 1 1个

  • 数据未获取到

            ( nil)等同于null

  • 数据最大存储量

              512MB

  • 数值计算最大范围( java中的long的最大值)

              9223372036854775807

原文地址:https://www.cnblogs.com/dalianpai/p/12482509.html