redis 学习(3)-- String 类型
redis 学习(3)-- String 类型
String-结构
- 结构:Key-Value对
- Value:可以是字符串、数字,也可以是二进制数组
- 限制:Value最大值为512MB
String-常用命令
命令 | 含义 |
---|---|
get key | 获取指定 key 的值 |
set key value | 设置指定 key 的值 |
incr key | 将 key 中存储的数字值增一 |
incrby key increment | 将 key 所存储的数字值加上给定的增量 |
decr key | 将 key 中存储的数字值减一 |
decrby key decrement | 将 key 所存储的数字值减去给定的减量 |
setnx key value | 只有当 key 不存在时才设置 key 的值 |
set key second value | u设置指定 key 的值,同时设置该 key 的过期时间,单位为秒 |
set key value xx | 只有 key 存在时才设置 key 的值 |
mget key1 [key2...] | 获取所有(一个或多个)指定 key 的值 |
mset key1 value1 [key2 value2...] | 同时设置一个或多个 key-value 对 |
1. get key 、incr key、incrby key increment、decr key
演示
实战
1:
实现如下功能:记录网站每个用户个人主页的访问量?
incr userid:pageview
由于 redis 是单线程的,所以非常适合用作计数器,在高并发下没有竞争。
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));
}
}
}
当我们通过 id 查找相关信息,redis 做中间层,当数据缓存在 redis 中时,我们直接返回该数据,如果 redis 中不存在,就到 MYSQL 中查找,查找成功后在返回。
3:
实现如下功能:分布式 id 生成器
incr id
(原子操作)
2. set key value、setnx key value、set key value xx
演示
3. mget key1 [key2...]、mset key1 value1 [key2 value2...]
演示
get 和 mget 的区别
由于 redis 存储在内存中,所以我们可以知道执行命令的速度很快,即命令时间相差不大,但是网络时间涉及到网速快慢的问题,明显 mset 只请求一次网络的时间比 get 方法请求多次网络的时间开销小,效率也更高。