Redis数据类型之String
一、Redis五种数据类型
一、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的操作都是原子性的,可用作计数器,商品库存,微博点赞数等。
例如:
每阅读一次文章就添加一个阅读量
INCR article:readcount:文章id
GET article:readcount:文章id
2.对象缓存
(1)SET user:1 value(json格式数据)
例如:
(2)MSET user:1:name zhuge user:1:balance 1888
例如:
可以看出redis可视化工具自动帮我们分配好了对象。
3.实现分布式锁
SETNX key value
例如:
实现商品库存的增减
在一些大型的商城中,一般会部署多个服务器:
一般减库存方法:
(1)查询商品id的库存
(2)减库存
(3)重新把减完剩余的库存更新回数据库
可能会出现的问题:
在查询库存和减库存中可能会出现并发问题,例如库存还剩1时,第一个进程查询到库存且还未开始进行减操作时,另一个进程也去查询库存,此时也是1,所以此时两个进程对库存进行相减可能会出现-1的情况。
解决思路:
进程1:SETNX product:10001(例如商品id为10001) true //返回1代表获取锁成功
进程2:SETNX product:10001(例如商品id为10001) true //返回0代表获取锁失败
。。。执行业务操作(即减库存)
DEL product:10001 //执行完业务释放锁
有时候怕执行业务操作中间出现异常直接挂掉而未释放掉锁,一般会给锁加个过期时间(expire key)
4.Web集群session共享
spring session +redis 实现session共享
例如:
可以把session信息存储到redis进行共享,需要就取出来进行判断是否登陆。
5.分布式系统全局***
INCRBY orderid 1000 //redis 批量生成***提升性能。