原文:http://tianyalong.icu/content.html?id=43
redis的五种数据类型
string、Hash、List、Set、Zset
解决的问题
性能
:数据库的操作一般需要几十毫秒,而redis的读操作一般仅需不到1毫秒,通常只要把数据库的数据缓存到redis,就能有几十倍甚至上百倍的性能提升。并发
:在高并发情况下,所有的请求直接访问到数据库,数据库会出现连接异常,甚至卡死在数据库中。为了解决高并发卡死的问题,一般的做法是采用redis做一个缓冲操作,先让请求直接访问到redis,而不是数据库。
string
常用场景:
1. 存储json对象
set key value [NX/XX/EX/PX]
- NX:表示key
不存在
才设置,如果存在则返回NULL - XX:表示key
存在
时才设置,如果不存在则返回NULL - EX seconds:设置过期时间,过期时间精确为
秒
-
PX millsecond:设置过期时间,过期时间精确为
毫秒
-
SETNX key value
等同于set key value NX -
SETEX key expire value
等同于set key value EX expire -
PSETEX key expire value
等同于set key value PX expire -
MSET key1 value1 key2 value2 ...
批量设置 -
MGET key1 key2 key3
查询key1,key2,key3的值 -
getset key value
先查出key的值并返回,再将其设置为value -
setrange key offset value
从key的第offset下标处,开始修改赋值为value,下标从0开始 -
getrange key st ed
提取key[st:ed]包含ed -
append key value
给key追加value -
substr key st ed
提取key[st:ed]包含ed
Number
使用场景:
1. 点赞
2. 浏览量
3. 商品计数、减数
-
INCR key
指定的key加1,必须为整型,否则返回错误,修改成功返回操作后的值。 -
DECR key
指定的key减1,必须为整型,否则返回错误,修改成功返回操作后的值。 -
INCRBY key num
给key加上数值num -
DECRBY key num
给key减去数值num -
incrbyfloat key floatnum
给key加上一个浮点数floatnum
场景一:阅读量
- 场景:每个用户阅读过一篇文章,阅读量就+1
- 原理:INCR(increment)命令,用途计数器,
incr article:1
,给id为1的文章增加一个访问量。 - 缺点:会大量的操作redis,一般中小型公司都够用了,除非是双十一类似场景会使用zset处理