Redis数据类型之String

一、Redis五种数据类型

Redis数据类型之String

一、String结构

1.字符串常用操作

命令 解释
SET key value 存入字符串键值对
MSET key value 批量存储字符串键值对
SETNX key value 存入一个不存在的字符串键值对
GET key 获取一个字符串键值
MGET key [key…] 批量获取字符串键值
DEL key [key…] 删除一个键
EXPIRE key seconds 设置一个键的过期时间(秒)
PEXPIRE key milliseconds 设置一个键的过期时间(毫秒)

2.字符串原子加减

命令 解释
INCR key 将key中存储的数字值加1
DECR key 将key中存储的数字值减1
INCRBY key increment 将key所存储的值加上 increment
DECRBY key decrement 将key所存储的值减去 decrement

更多操作类型参考:
https://www.runoob.com/redis/redis-strings.html
http://redisdoc.com/

二、String应用场景

1.单值缓存
SET key value
INCRE key
DECRE key
考虑到redis是单线程模式的,所以redis的操作都是原子性的,可用作计数器,商品库存,微博点赞数等。
例如:
每阅读一次文章就添加一个阅读量
Redis数据类型之String
INCR article:readcount:文章id
GET article:readcount:文章id
Redis数据类型之String

2.对象缓存
Redis数据类型之String
(1)SET user:1 value(json格式数据)
例如:
Redis数据类型之String
Redis数据类型之String
(2)MSET user:1:name zhuge user:1:balance 1888
例如:
Redis数据类型之String
Redis数据类型之String
可以看出redis可视化工具自动帮我们分配好了对象。

3.实现分布式锁
SETNX key value
例如:
实现商品库存的增减
在一些大型的商城中,一般会部署多个服务器:
Redis数据类型之String

一般减库存方法:
(1)查询商品id的库存
(2)减库存
(3)重新把减完剩余的库存更新回数据库
可能会出现的问题:
在查询库存和减库存中可能会出现并发问题,例如库存还剩1时,第一个进程查询到库存且还未开始进行减操作时,另一个进程也去查询库存,此时也是1,所以此时两个进程对库存进行相减可能会出现-1的情况。
解决思路:
进程1:SETNX product:10001(例如商品id为10001) true //返回1代表获取锁成功
进程2:SETNX product:10001(例如商品id为10001) true //返回0代表获取锁失败
Redis数据类型之String
。。。执行业务操作(即减库存)
DEL product:10001 //执行完业务释放锁
有时候怕执行业务操作中间出现异常直接挂掉而未释放掉锁,一般会给锁加个过期时间(expire key)
4.Web集群session共享
spring session +redis 实现session共享
例如:
可以把session信息存储到redis进行共享,需要就取出来进行判断是否登陆。
5.分布式系统全局***
INCRBY orderid 1000 //redis 批量生成***提升性能。