字符串键值结构:
key | value |
hello | world |
counter | 1 |
bits | 10111101 |
json | { "product": { "id": "2951", "name": "testing 01", "quantity": 4 } } |
字符串的value的大小限制为512M
字符串命令
set、get、del
自增incr
假如没有定义 则默认是0
假如非数值类型 则报错
decr:自减
如果key不存在,默认是0,自减后变为-1
incrby:指定增量值
incrby key value value表示增长的数目
如果key不存在,默认是0,自增后变为value
decrby:指定减量值
decrby key value value表示减少的数目
如果key不存在,默认是0,自减后变为-value
实战:
1.记录网站每个用户个人主页的访问量???
incr userid:pageview(单线程:无竞争)
2.缓存视频的基本信息(数据源在MySQL中)???
伪代码:
public VideoInfo get(long id) {
String redisKey = redisPrefix + id;
VideoInfo videoInfo = redis.get(redisKey);
if (videoInfo == null) {
videoInfo = mysql.get(id);
if (videoInfo != null) {
//序列化
redis.set(redisKey, serialize(videoInfo));
}
}
return videoInfo;
}
3.分布式id生成器 ???
set 、setnx 、set xx
set key value #不管key是否存在,都设置
setnx key value #key不存在,才设置
set key value xx #key存在,才设置(相当于更新操作)
mget mset
mget key1 key2 key3...
#批量获取key,原子操作
mset key1 value1 key2 value2 key3 value3
#批量设置key-value
getset、append、strlen
getset key newvalue
#set key newvalue并返回旧的value
append key value
#将value追加到旧的value
strlen key
#返回字符串的长度(注意中文)
incrbyfloat、getrange、setrange
incrbyfloat key 3.5
#增加key对应的值3.5
getrange key start end
#获取字符串指定下标所有的值
setrange key index value
#设置指定下标所有对应的值