1. Redis入门
- Redis是一款基于键值对的NoSQL数据库,它的值支持多种数据结构: 字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等。
- Redis将所有的数据都存放在内存中,所以它的读写性能十分惊人。 同时,Redis还可以将内存中的数据以快照或日志的形式保存到硬盘上,以保证数据的安全性。
- Redis典型的应用场景包括:缓存、排行榜、计数器、社交网络、消息队列等。
官网:
- https://redis.io
- https://github.com/microsoftarchive/redis
- 命令行参考:http://doc.redisfans.com/
2. Spring整合Redis
引入依赖
- spring-boot-starter-data-redis
- 配置Redis RedisConfig类
- 配置数据库参数
- 编写配置类,构造RedisTemplate,Spring中的RedisTemplate的key是Object类型,我们一般使用的是String类型,因此就需要重写配置类
- 将key设置成String形式
- 将value设置成JSON形式
访问Redis
点赞LikeController
- 支持对帖子、评论点赞。
- 第1次点赞,第2次取消点赞。
- 存放在Redis中set集合中,存放的是点赞人的id
- 查看当前用户对该实体的点赞状态,只需要到set集合中查找是否含有该id即可
- 首页点赞数量
- 统计帖子的点赞数量
详情页点赞数量
重构点赞功能LikeService类
- 点赞或取消点赞的动作需要更新以实体为key的set集合和以实体作者id为key的数量,因此要保证事务
- 以用户为key,记录点赞数量
- increment(key),decrement(key)
开发个人主页
需求FollowController
- 开发关注、取消关注功能。
- 统计用户的关注数、粉丝数。
- 以zset集合存储,存储粉丝和目标,score用来存放时间
关注
业务层
- 查询某个用户关注的人,支持分页。
- 查询某个用户的粉丝,支持分页。
- 点击关注和取消关注都要同时更新以用户关注的人为key的zset集合和以用户粉丝为key的zset集合
- zset集合的score为当前关注的时间
表现层
使用Redis存储验证码
- 验证码需要频繁的访问与刷新,对性能要求较高。
- 验证码不需永久保存,通常在很短的时间后就会失效。
- 生成验证码时,生成验证码凭证,将凭证存入cookie(存活时间1分钟)
- 以验证码凭证为key,存放验证码到Redis,存放时间60s
- 登录时查询cookie获得登录凭证,通过查询redis校验验证码
- 分布式部署时,存在Session共享的问题。
- 使用Redis存储登录凭证(MySQL中的登录表可以作废)
- 处理每次请求时,都要查询用户的登录凭证,访问的频率非常高。
- 以登录凭证为key,存储登录信息
- 使用Redis缓存用户信息UserService
- 处理每次请求时,都要根据凭证查询用户信息,访问的频率非常高。
- 写流程:先删除缓存,删除之后再更新DB,再异步将数据刷回缓存。如果先更新数据库再更新缓存,更新数据库时,程序访问缓存时还是旧的数据。
- 读流程:先读缓存,如果缓存没读到,则去读DB,之后再异步将数据刷回缓存。