【Spring】Redis的两个典型应用场景--good

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 原创 BOOT Redis简介 Redis是目前业界使用最广泛的内存数据存储。相比memcached,Redis支持更丰富的数据结构,例如hashes, lists, sets等,同时支持数据持久化。

 

Redis简介

Redis是目前业界使用最广泛的内存数据存储。相比memcached,Redis支持更丰富的数据结构,例如hashes, lists, sets等,同时支持数据持久化。除此之外,Redis还提供一些类数据库的特性,比如事务,HA,主从库。可以说Redis兼具了缓存系统和数据库的一些特性,因此有着丰富的应用场景。本文介绍Redis在Spring Boot中两个典型的应用场景。

场景1:数据缓存

第一个应用场景是数据缓存,最典型的当属缓存数据库查询结果。对于高频读低频写的数据,使用缓存可以第一,加速读取过程,第二,降低数据库压力。通过引入spring-boot-starter-redis依赖和注册RedisCacheManager,Redis可以无缝的集成进Spring的缓存系统,自动绑定@Cacheable, @CacheEvict等缓存注解。

引入依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-redis</artifactId>
</dependency>

Redis配置(application.properties):

# REDIS (RedisProperties)
spring.redis.host=localhost
spring.redis.password=
spring.redis.database=0

注册RedisCacheManager:

@Configuration
@EnableCaching
public class CacheConfig {

    @Autowired
    private JedisConnectionFactory jedisConnectionFactory;

    @Bean
    public RedisCacheManager cacheManager() {
        RedisCacheManager redisCacheManager = new RedisCacheManager(redisTemplate());
        return redisCacheManager;
    }

    @Bean
    public RedisTemplate<Object, Object> redisTemplate() {
        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<Object, Object>();
        redisTemplate.setConnectionFactory(jedisConnectionFactory);
        // 使用String格式序列化缓存键
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        return redisTemplate;
    }

}

@Cachable, @CacheEvict使用,Redis中的存储结构可参见场景2中的配图:

@Cacheable(value="signonCache", key="'petstore:signon:'+#username", unless="#result==null")
public Signon findByName(String username) {
    return dao.fetchOneByUsername(username);
}

@CacheEvict(value="signonCache", key="'petstore:signon:'+#user.username")
public void update(Signon user) {
    dao.update(user);
}
  • @Cacheable: 插入缓存
    • value: 缓存名称
    • key: 缓存键,一般包含被缓存对象的主键,支持Spring EL表达式
    • unless: 只有当查询结果不为空时,才放入缓存
  • @CacheEvict: 失效缓存

Tip: Spring Redis默认使用JDK进行序列化和反序列化,因此被缓存对象需要实现java.io.Serializable接口,否则缓存出错。

Tip: 当被缓存对象发生改变时,可以选择更新缓存或者失效缓存,但一般而言,后者优于前者,因为执行速度更快。

Watchout! 在同一个Class内部调用带有缓存注解的方法,缓存并不会生效。

场景2:共享Session

共享Session是第二个典型应用场景,这是利用了Redis的堆外内存特性。要保证分布式应用的可伸缩性,带状态的Session对象是绕不过去的一道坎。
一种方式是将Session持久化到数据库中,缺点是读写成本太高
另一种方式是去Session化,比如Play直接将Session存到客户端的Cookie中,缺点是存储信息的大小受限。将Session缓存到Redis中,既保证了可伸缩性,同时又避免了前面两者的限制。

引入依赖:

<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
</dependency>

Session配置:

@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 86400)
public class SessionConfig {
}
  • maxInactiveIntervalInSeconds: 设置Session失效时间,使用Redis Session之后,原Boot的server.session.timeout属性不再生效

Redis中的session对象:

小结

上面结合示例代码介绍了数据缓存,共享Session两个Redis的典型应用场景,除此之外,还有分布式锁,全局计数器等高级应用场景,以后在其他文章中再详细介绍。

参考

http://emacoo.cn/blog/spring-redis

 

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
8天前
|
存储 缓存 NoSQL
深入了解Redis键管理:探索Redis键命令及其功能与应用场景
深入了解Redis键管理:探索Redis键命令及其功能与应用场景
|
8天前
|
消息中间件 存储 缓存
探索Redis CLI:功能强大的Redis命令行工具及其应用场景
探索Redis CLI:功能强大的Redis命令行工具及其应用场景
|
8天前
|
存储 缓存 NoSQL
在Python Web开发过程中:数据库与缓存,Redis在Web开发中的常见应用场景有哪些?
Redis在Python Web开发中常用于缓存、会话管理、分布式锁、排行榜、消息队列和实时分析。作为内存数据存储,它提供高效的数据结构(如字符串、哈希、列表、集合、有序集合),支持会话存储、互斥操作、计数与排名、队列实现及实时数据处理。其高速性能和丰富功能使其成为多场景下的理想选择。
26 5
|
8天前
|
存储 NoSQL 关系型数据库
【Redis】Redis的特性和应用场景 · 数据类型 · 持久化 · 数据淘汰 · 事务 · 多机部署
【Redis】Redis的特性和应用场景 · 数据类型 · 持久化 · 数据淘汰 · 事务 · 多机部署
20 0
|
8天前
|
存储 缓存 NoSQL
Redis的特点和应用场景
Redis作为当今最流行的内存数据库,已经成为服务端加速的必备工具之一。
30 4
|
8天前
|
存储 缓存 NoSQL
redis的应用场景
总之,Redis的高性能、多功能和灵活性使其成为各种应用场景中的首选数据存储和处理工具。它广泛用于Web开发、实时分析、消息传递、缓存等各种应用领域。
27 3
|
8天前
|
存储 NoSQL 关系型数据库
redis数据结构与应用场景
Redis 是一款开源、免费的内存数据库,常用于处理高并发和大数据场景下的热点数据访问,以提升性能。它支持 key-value 存储及多种数据结构,如字符串、列表、集合和哈希表。数据可持久化到磁盘,与 MySQL 等传统数据库相比,Redis 作为缓存能提供更快的读写速度。Redis 应用场景包括:使用字符串进行计数(如商品库存、点赞数)、利用列表实现消息队列或展示最新商品、使用集合去重和计算交集等,以及通过有序集合进行自动排序(如商品热度榜)。
|
8天前
|
缓存 NoSQL Java
Redis7的10大应用场景和案例解析
你在项目中使用 Redis 实现了什么应用场景,欢迎一起跟 V 哥讨论。同时也做个小调查,朋多少兄弟是需要了解 Redis 核心源码的,人多的话,下一篇 V 哥写 Redis7的源码分析,人少的话就算了,感谢。
|
8天前
|
监控 Java API
Spring Boot与异步任务:整合与应用场景
【4月更文挑战第29天】异步任务在现代应用程序开发中扮演着重要的角色,它们可以提高应用程序的性能和响应速度,尤其适用于处理长时间运行的任务或需要等待外部资源的场景。Spring Boot提供了强大的支持来简化异步任务的实现。
29 0
|
8天前
|
存储 NoSQL Java
Spring Boot与Redis:整合与实战
【4月更文挑战第29天】Redis,作为一个高性能的键值存储数据库,广泛应用于缓存、消息队列、会话存储等多种场景中。在Spring Boot应用中整合Redis可以显著提高数据处理的效率和应用的响应速度。
31 0