Springboot整合redis

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Springboot整合redis

文章目录

redis简介

redis常用的命令

set get

setnx

springboot中使用redis

引入依赖

配置redis

redis服务类接口

redis服务实现类

controller测试

分布式session共享

配置session的存储类型

配置session

session控制类

测试

redis简介

Redis是一个开源的内存数据结构存储数据库,用作数据库,缓存等。提供了字符串,散列,列表,集合等数据结构。常用的场景有分布式session共享,缓存数据,临时存储如购物车等。

redis常用的命令

set get

set key value

84499b1312514bbca35d217724760a54.png

setnx

setnx key value :

将 key 的值设为 value ,当且仅当 key 不存在。

若给定的 key 已经存在,则 SETNX 不做任何动作。

127.0.0.1:6379> set k1 v1

OK

127.0.0.1:6379>  

127.0.0.1:6379> setnx k1 v2

(integer) 0

127.0.0.1:6379> set k2 v2

OK

127.0.0.1:6379>  

这里就不在多介绍,详细参考官网命令。

springboot中使用redis

引入依赖

 <!--添加redis依赖-->

   <dependency>

     <groupId>org.springframework.boot</groupId>

     <artifactId>spring-boot-starter-redis</artifactId>

     <version>1.4.7.RELEASE</version>

   </dependency>

   <!--分布式session-->

   <dependency>

     <groupId>org.springframework.session</groupId>

     <artifactId>spring-session-data-redis</artifactId>

     <version>2.3.1.RELEASE</version>

   </dependency>

配置redis

 #配置redis

 redis:

   host: redis服务器地址

   database: 0  #配置数据库0

   port: 6379 #端口

   #password:

   #配置连接池

   jedis:

     pool:

       max-active: 8

       max-idle: 8

       min-idle: 0

       max-wait: -1 #ms

redis服务类接口

/**

* 定义访问redis的接口类

*

*/

public interface RedisService {

   /**

    * 保存key value

    * @param key

    * @param value

    */

    void saveKeyValue(String key,Object value);

   /**

    * 保存key value

    * @param key

    * @param value

    */

   void saveKeyValue(String key,Object value,int expiration);

   /**

    * 根据key获取value

    * @param key

    * @return

    */

   String getValueByKey(String key);

   /**

    * 根据key删除缓存

    * @param key

    */

   void delete(String key);

   /**

    * 清空所有缓存

    */

   void flushdb();

}


redis服务实现类

/**

* redis 实现类

*/

@Service

public class RedisServiceImpl implements RedisService {

   @Autowired

   RedisTemplate redisTemplate;

   /**

    * 保存key value

    * @param key

    * @param value

    */

   @Override

   public void saveKeyValue(String key, Object value) {

       redisTemplate.opsForValue().set(key, value);

   }

   /**

    * 设置过期时间

    * @param key

    * @param value

    * @param expiration 过期时间

    */

   @Override

   public void saveKeyValue(String key, Object value, int expiration) {

       redisTemplate.opsForValue().set(key, value);

       redisTemplate.expire(key, expiration, TimeUnit.MINUTES);

   }

   /**

    * 根据key获取value

    * @param key

    * @return

    */

   @Override

   public String getValueByKey(String key) {

       try {

           String value = redisTemplate.opsForValue().get(key).toString();

           return value;

       } catch (Exception e) {

           return "";

       }

   }

   /**

    * 删除缓存

    * @param key

    */

   @Override

   public void delete(String key) {

       redisTemplate.delete(key);

   }

   /**

    * 清空所有的缓存

    */

   @Override

   public void flushdb() {

       redisTemplate.getConnectionFactory().getConnection().flushDb();

   }

}

controller测试

@RestController

public class RedisController {

   //引入缓存操作

   @Autowired

   RedisService redisService;

   @GetMapping("/redistest")

   public String hello(){

       return "hello,spring integration with redis";

   }

   @GetMapping("/redis/{key}/{val}")

   public String savekeyValue(@PathVariable("key") String key, @PathVariable("val") Object val){

       redisService.saveKeyValue(key,val);

       return key+"="+redisService.getValueByKey(key);

   }

   @GetMapping("/redis/{key}")

   public String getValueByKey(@PathVariable("key") String key){

       return redisService.getValueByKey(key);

   }

   @GetMapping("/redis/delete/{key}")

   public String delete(@PathVariable("key") String key){

      redisService.delete(key);

      return redisService.getValueByKey(key);

   }

}

c31831d03c4b4753b6022f93510414ec.png

2ab1dcc6e77e448688993a171cb3f2de.png

分布式session共享

配置session的存储类型

 #指定session的存储方式

spring:

 session:

   store-type: redis

配置session

@Configuration

//@EnableRedisHttpSession

//配置失效时间

@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 60) //1分钟失效

public class SessionConfig {

}

session控制类

/**

* session控制类

*/

@RestController

public class SessionController {

   //设置session

   @GetMapping("/setSession/{username}")

   public String setSession(HttpSession httpSession,@PathVariable("username") String username){

       httpSession.setAttribute("username",username);

       return "OK";

   }

   //获取session

   @GetMapping("/getSession")

   public Object getSession(HttpSession httpSession){

       Object username = httpSession.getAttribute("username");

       return username;

   }

}


IDEA中,我们可以改下端口重启两个服务,分布访问。

测试

968c88432b364dc482dee611a9b2e13d.png

2dd3e90198f0476daa6e754cdf7cc542.png

超过1分钟之后,可以看到session失效。

f50ed16b61354c49b2cf775dc13913b6.png


相关实践学习
基于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
相关文章
|
24天前
|
缓存 NoSQL Java
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
这篇文章是关于如何在SpringBoot应用中整合Redis并处理分布式场景下的缓存问题,包括缓存穿透、缓存雪崩和缓存击穿。文章详细讨论了在分布式情况下如何添加分布式锁来解决缓存击穿问题,提供了加锁和解锁的实现过程,并展示了使用JMeter进行压力测试来验证锁机制有效性的方法。
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
|
13天前
|
编解码 NoSQL Java
使用Spring Boot + Redis 队列实现视频文件上传及FFmpeg转码的技术分享
【8月更文挑战第30天】在当前的互联网应用中,视频内容的处理与分发已成为不可或缺的一部分。对于视频平台而言,高效、稳定地处理用户上传的视频文件,并对其进行转码以适应不同设备的播放需求,是提升用户体验的关键。本文将围绕使用Spring Boot结合Redis队列技术来实现视频文件上传及FFmpeg转码的过程,分享一系列技术干货。
49 3
|
24天前
|
缓存 NoSQL Java
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解、如何添加锁解决缓存击穿问题?分布式情况下如何添加分布式锁
这篇文章介绍了如何在SpringBoot项目中整合Redis,并探讨了缓存穿透、缓存雪崩和缓存击穿的问题以及解决方法。文章还提供了解决缓存击穿问题的加锁示例代码,包括存在问题和问题解决后的版本,并指出了本地锁在分布式情况下的局限性,引出了分布式锁的概念。
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解、如何添加锁解决缓存击穿问题?分布式情况下如何添加分布式锁
|
24天前
|
NoSQL Java Redis
Redis6入门到实战------ 八、Redis与Spring Boot整合
这篇文章详细介绍了如何在Spring Boot项目中整合Redis,包括在`pom.xml`中添加依赖、配置`application.properties`文件、创建配置类以及编写测试类来验证Redis的连接和基本操作。
Redis6入门到实战------ 八、Redis与Spring Boot整合
|
21天前
|
Web App开发 前端开发 关系型数据库
基于SpringBoot+Vue+Redis+Mybatis的商城购物系统 【系统实现+系统源码+答辩PPT】
这篇文章介绍了一个基于SpringBoot+Vue+Redis+Mybatis技术栈开发的商城购物系统,包括系统功能、页面展示、前后端项目结构和核心代码,以及如何获取系统源码和答辩PPT的方法。
|
14天前
|
缓存 NoSQL Java
惊!Spring Boot遇上Redis,竟开启了一场缓存实战的革命!
【8月更文挑战第29天】在互联网时代,数据的高速读写至关重要。Spring Boot凭借简洁高效的特点广受开发者喜爱,而Redis作为高性能内存数据库,在缓存和消息队列领域表现出色。本文通过电商平台商品推荐系统的实战案例,详细介绍如何在Spring Boot项目中整合Redis,提升系统响应速度和用户体验。
40 0
|
18天前
|
缓存 NoSQL Java
【Azure Redis 缓存】定位Java Spring Boot 使用 Jedis 或 Lettuce 无法连接到 Redis的网络连通性步骤
【Azure Redis 缓存】定位Java Spring Boot 使用 Jedis 或 Lettuce 无法连接到 Redis的网络连通性步骤
|
24天前
|
NoSQL JavaScript Java
SpringBoot+Vue+Redis实现验证码功能、一个小时只允许发三次验证码。一次验证码有效期二分钟。SpringBoot整合Redis
这篇文章介绍了如何使用SpringBoot结合Vue和Redis实现验证码功能,包括验证码的有效期控制和一小时内发送次数的限制。
|
27天前
|
存储 NoSQL Java
基于SpringBoot+Redis实现查找附近用户的功能
使用Redis的GEO命令结合SpringBoot实现查找附近用户的功能,通过`GEOADD`命令添加地理位置信息和`GEORADIUS`命令查询附近用户。
47 0
|
27天前
|
存储 NoSQL Redis
基于SpringBoot+Redis实现点赞/排行榜功能,可同理实现收藏/关注功能,可拓展实现共同好友/共同关注/关注推送功能
在SpringBoot项目中使用Redis的Set和ZSet集合实现点赞和排行榜功能,并通过示例代码展示了如何使用`stringRedisTemplate`操作Redis来完成这些功能。
107 0