redis使用场景及实现步骤
新闻、文章最新列表
使用到的redis key
public interface RedisKey {
String ARTICLE_LIST = "article:list:all"; // 文章列表
String ARTICLE_LIST_SORT_CREATE_TIME = "article:list:sort:createTime"; // 文章的创建时间
String ARTICLE_LIST_SORT_UPDATE_TIME = "article:list:sort:updateTime";// 文章的更新时间
String ARTICLE_LIST_SORT_VIEWS = "article:list:sort:views";// 文章的浏览数
String ARTICLE_LIST_LOCK = "article:list:lock";// 操作文章的锁
}
步骤:
-
创建文章
-
在数据库中创建
-
存入redis
- key为
article:list:all: + 文章id
,value为值json - redis中存入最新列表,使用sorted set(ZSET),score为文章的更新时间戳。
- redis中存入列表,使用sorted set(ZSET),score为文章的创建时间戳。
- key为
-
-
获取文章列表
- 通过
article:list:sort:createTime
获取文章id列表(按创建时间排序)。 - 通过
redisTemplate.opsForValue().multiGet
获取文章列表,通过传入的参数key,组合成新的List返回前端(手写实现分页功能)。
- 通过
-
获取最新列表
- 通过
article:list:sort:updateTime
获取到最新文章id列表(按更新时间排序)。 - 通过
redisTemplate.opsForValue().multiGet
获取文章列表,通过传入的参数key,组合成新的List返回前端(手写实现分页功能)。
- 通过
-
获取文章
- 从缓存中获取,如果没有,就从数据库中获取,在存进缓存。
- 更新浏览数数列表
article:list:sort:views
。 - 更新缓存。
-
更新文章
- 使用
redisLockUtil
(自定义工具类)加锁,放置并发情况下对统一文章进行更新。 - 更新缓存。
- 更新最新列表(更新时间score)。
- 释放锁。
- 使用
-
删除文章
- 删除数据库。
- 删除缓存。(包括:更新时间列表
article:list:sort:updateTime
,文章列表article:list:all
,点赞数列表article:list:sort:views
,以及对应的文章键值对article:list:all:xxx
。)
redis数据库图:
\
转载自:https://juejin.cn/post/7013283508726530055