redis 支持 json_Spring Boot 中集成 Redis

b61912fdfe51f3424c25798b406d41f7.png

阅读本文约需要5分钟

大家好,我是你们的导师,我每天都会在这里给大家分享一些干货内容(当然了,周末也要允许老师休息一下哈)。上次老师跟大家分享了 Spring Boot 中的拦截器,今天跟大家分享下 Spring Boot 集成 redis。

Redis 介绍

Redis 是一种非关系型数据库(NoSQL),NoSQL 以 Key-Value 形式存储,与传统关系型数据库不一样,不一定遵循传统数据库的基本要求,比如说 SQL 标准、ACID 属性、表结构等等。非关系型、分布式、开源、水平可扩展,是这类数据库的主要特点。NoSQL 使用场景主要有对数据高并发读写、对海量数据的高效率存储和访问、对数据的高可扩展性和高可用性等等。

Redis 的 Key 可以是字符串、哈希、链表、集合和有序集合。Value 类型很多,包括 String、List、Set、ZSet 等。这些数据类型都支持 Push/Pop、Add/Remove、取交集和并集以及更多更丰富的操作,Redis 也支持各种不同方式的排序。为了保证效率,数据都缓存在内存中,它也可以周期性地把要更新的数据写入磁盘或者把修改操作写入追加的记录文件中。

Redis安装

我们选择在 VMvare 虚拟机中安装 Redis(CentOS 7)。如果您有自己的阿里云服务器,也可以在阿里云中安装。只要能 Ping 的通云主机或者虚拟机的 IP,并在虚拟机或者云主机中放行对应的端口(或者关掉防火墙)即可访问 Redis。

下面介绍下安装过程。

1. 安装 gcc 编译

安装 Redis 时需要编译,我们要事先安装好 gcc 编译,命名如下所示。阿里云主机已经默认安装了 gcc,就无需这一步。

yum install gcc-c++

2. 下载 Redis

有两种方式下载安装包,一种是到官网上下载,并将安装包拷贝到 Centos 中,另一种方法是直接使用 wget 下载:

wget http://download.redis.io/releases/redis-3.2.8.tar.gz

如果没有安装过 wget,可以通过如下命令安装:

yum install wget

3. 解压安装

解压安装包:tar –vzxf redis-3.2.8.tar.gz

将解压的文件夹 redis-3.2.8 放到 /usr/local/ 目录下(一般安装软件都会放在 /usr/local 下)。之后进入 /usr/local/redis-3.2.8/ 文件夹下,执行 make 命令即可完成安装。

如果 make 命令执行失败,可尝试如下命令:

make MALLOC=libc

make install

4. 修改配置文件

安装成功之后,需要修改一下配置文件,包括允许接入的 IP 、允许后台执行、设置密码等等。

打开 Redis 配置文件:vi redis.conf,在命令模式下输入 /bind 查找 bind 配置,按 n 查找下一个,找到配置后,将 bind 配置成 0.0.0.0,允许任意服务器访问 Redis,即:bind 0.0.0.0

使用同样的方法,将 daemonize 改成 yes(默认为 no),允许 Redis 在后台执行。

将 requirepass 注释打开,并设置密码为 123456(密码自己设置)。

5. 启动redis

在 Redis-3.2.8 目录下,指定刚刚修改好的配置文件 redis.conf 来启动 Redis :

redis-server ./redis.conf

再启动 Redis 客户端:redis-cli

由于我们设置了密码,在启动客户端之后,输入 auth 123456 即可登录进入客户端。然后我们测试一下,往 Redis 中插入一条数据:

set name CSDN

之后获取 name :get name

如果正常获取到 CSDN,则说明没有问题。

Spring Boot集成Redis

1. 依赖导入

Spring Boot 集成 Redis 很方便,只需要导入一个 Redis 的 starter 依赖即可。如下:

0990041fff62359c96a04894c919def8.png

这里,我们也引入了阿里巴巴推出的 Fastjson。后面要存储实例,该工具可以很方便地将实体转换成 JSON 字符串进行存储。

2. Redis的配置

导入依赖之后,我们在 application.yml 文件里配置 Redis :

ef71746a6dcd2d00bac001709b3b326f.png

3. 常用API介绍

Spring Boot 对 Redis 的支持已经非常完善,丰富的 API 足够我们日常的开发,这里我介绍几个最常用的供大家学习,其他 API 希望大家自己多学习,多研究,用到会去查即可。

目前有两个 Redis 模板:RedisTemplate 和 StringRedisTemplate。这里不推荐使用 RedisTemplate,因为 RedisTemplate 提供的是操作对象,我们通常以 JSON 格式存储该对象,存储时,会使用 Redis 默认的内部序列化器,易导致存储内容出现乱码。当然了,我们可以自定义序列化,但比较麻烦。所以多会使用 StringRedisTemplate 模板。StringRedisTemplate 为我们提供了字符串操作,将实体类转换成 JSON 字符串进行存储,等取出来后,再将其转换成相应的对象,这也就是我在上面导入了阿里巴巴 Fastjson 的原因。

Redis:String 类型

新建一个 RedisService,注入 StringRedisTemplate,使用 stringRedisTemplate.opsForValue() 可以获取 ValueOperations 对象,通过该对象即可读写 Redis 数据库。如下:

public class RedisService {

    @Resource
    private StringRedisTemplate stringRedisTemplate;

    public void setString(String key, String value){
        ValueOperations valueOperations = stringRedisTemplate.opsForValue();
        valueOperations.set(key, value);
    }    public String getString(String key){        return stringRedisTemplate.opsForValue().get(key);
    }

该对象操作的是 String,我们也可以存实体类,只需要将实体类转换成 JSON 字符串即可。下面来测试一下:

@RunWith(SpringRunner.class)
@SpringBootTest
public class Course14ApplicationTests {

    private static final Logger logger = LoggerFactory.getLogger(Course14ApplicationTests.class);

    @Resource
    private RedisService redisService;

    @Test
    public void contextLoads() {
        //测试 Redis 的 string 类型
        redisService.setString("weichat","程序员的笔记本");
        logger.info("我的微信公众号为:{}", redisService.getString("weichat"));

        // 如果是个实体,我们可以使用 JSON 工具转成 JSON 字符串,
        User user = new User("金迅教育", "123456");
        redisService.setString("userInfo", JSON.toJSONString(user));
        logger.info("用户信息:{}", redisService.getString("userInfo"));
    }
}

先启动 Redis,然后运行这个测试用例,观察控制台打印的日志如下:

我的微信公众号为:程序员的笔记本

用户信息:{"password":"123456","username":"金迅教育"}

Redis:Hash 类

Hash 类型的原理其实和 String 一样,但 Hash 有两个 Key,使用 stringRedisTemplate.opsForHash() 可以获取 HashOperations 对象。比如我们要存储订单信息,所有订单信息都放在 order 下,针对不同用户的订单实体,可以通过用户的 id 来区分,这就相当于两个 Key 了。

@Service
public class RedisService {

    @Resource
    private StringRedisTemplate stringRedisTemplate;

    public void setHash(String key, String filedKey, String value){
        HashOperations<String, Object, Object> hashOperations = stringRedisTemplate.opsForHash();
        hashOperations.put(key,filedKey, value);
    }

    public String getHash(String key, String filedkey){
        return (String) stringRedisTemplate.opsForHash().get(key, filedkey);
    }
}

可以看出,Hash 和 String 没啥两样,只不过多了个参数,Spring Boot 中操作 Redis 非常简单方便。来测试一下:

e8c96b9ea33899d2e3ba0a02e402f6d3.png

Redis:list 类型

使用 stringRedisTemplate.opsForList() 可以获取 ListOperations listOperations Redis 列表对象,该列表是个简单的字符串列表,可以支持从左侧添加,也可以支持从右侧添加,一个列表最多包含 2^32-1232−1 个元素。

@Service
public class RedisService {

    @Resource
    private StringRedisTemplate stringRedisTemplate;

    public long setList(String key, String value){
        ListOperations listOperations = stringRedisTemplate.opsForList();        return listOperations.leftPush(key, value);
    }    public ListgetList(String key, long start, long end){        return stringRedisTemplate.opsForList().range(key, start, end);
    }
}

可以看出,这些 API 具有相同的形式,方便记忆和使用。更多的 API 细节我就不展开了,大家可以自己看文档。其实,根据参数和返回值,也可判断出这些 API 用途。我们来测试一下:

5b388179eaf7f8df7f038de1a87eb164.png

总结

本文主要介绍了 Redis 的使用场景、安装过程,以及 Spring Boot 中集成 Redis 的详细步骤。在实际项目中,通常都将 Redis 作为缓存,在查询数据库的时候,会先从 Redis 中查找,如果有信息,则从 Redis 中取;如果没有,则从数据库中查,并且同步到 Redis 中,这样下次再访问 Redis 时就有数据了。更新和删除也是如此,都需要同步到 Redis。Redis 在高并发场景下运用得较多。

今天就分享到这,今日留言话题:Springboot中使用Redis大家会用了吗?对有价值的留言,我们都会一一回复的。如果觉得对你有一丢丢帮助,请点右下角【在看】,让更多人看到该文章。

【我们直招】很苦逼,但工资超级高!

896c099bdc472cfcf2760f15d9aa0339.png

31cbdbd0736fd41e9ba57589dae2adf7.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要使用Redis实现Spring Boot应用程序的会话共享,您需要执行以下步骤: 1. 添加Redis依赖项 在您的Spring Boot项目添加spring-boot-starter-data-redis依赖项,这将为您提供Redis客户端和Spring Session依赖项。 2. 配置Redis 在application.properties文件添加Redis配置,包括Redis服务器的主机名、端口和密码。 3. 启用Spring Session 在Spring Boot应用程序启用Spring Session,您需要将@EnabaleRedisHttpSession注释添加到Spring Boot主应用程序类上。 4. 配置会话超时 您可以在application.properties文件设置会话超时时间,例如:spring.session.timeout=30m。 5. 测试 最后,您可以测试您的Spring Boot应用程序是否正在使用Redis进行会话共享,通过多个实例运行应用程序,并在每个实例访问同一URL并查看结果是否相同。 通过这些步骤,您应该能够在Spring Boot应用程序使用Redis进行会话共享。 ### 回答2: 在Spring Boot使用Redis实现session共享可以通过以下步骤实现: 1. 首先,确保在pom.xml文件添加以下依赖项以在Spring Boot使用Redis: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> ``` 2. 在application.properties文件配置Redis连接信息: ```properties spring.redis.host=your-redis-host spring.redis.port=your-redis-port spring.redis.password=your-redis-password ``` 3. 创建一个配置类(如RedisConfig.java),用于配置与Redis的连接以及序列化的设置: ```java import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; @Configuration @EnableRedisHttpSession(maxInactiveIntervalInSeconds = 86400) // 设置session的有效时间,单位为秒 public class RedisConfig { @Bean public RedisSerializer<Object> redisSerializer() { // 使用JSON序列化器,存储到Redis的Session以JSON格式保存,方便阅读 return new GenericJackson2JsonRedisSerializer(); } @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(redisConnectionFactory); // 设置key和value的序列化器 template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(redisSerializer()); template.setHashKeySerializer(new StringRedisSerializer()); template.setHashValueSerializer(redisSerializer()); return template; } } ``` 4. 在需要使用session的地方注入`HttpSession`,并使用它来获取、设置和删除session的属性: ```java import javax.servlet.http.HttpSession; // 注入HttpSession @Autowired private HttpSession session; // 获取session的属性 Object attributeValue = session.getAttribute("attributeName"); // 设置session的属性 session.setAttribute("attributeName", attributeValue); // 删除session的属性 session.removeAttribute("attributeName"); ``` 这样,通过以上步骤,就可以在Spring Boot使用Redis实现session共享了。注意,由于Redis是内存数据库,需要设置session的有效时间以避免占用过多的内存资源。 ### 回答3: 使用Spring Boot实现Session共享的方法有两种:使用Spring Session和使用RedisTemplate。 第一种方法是使用Spring Session来实现Session共享。Spring Session是一个用于在分布式环境下管理Session的Spring项目,它提供了一种基于Spring的Session管理解决方案。要使用Spring Session,需要在pom.xml文件添加相关依赖,然后在Spring Boot配置类加上@EnableRedisHttpSession注解,配置Redis连接信息。这样,Spring Session会将Session信息存储到Redis,实现了Session的共享。 第二种方法是使用RedisTemplate来实现Session共享。RedisTemplate是Spring Data Redis提供的一个用于操作Redis的模板类,可以方便地进行Redis的读写操作。要使用RedisTemplate实现Session共享,首先需要在pom.xml文件添加相关依赖,然后在Spring Boot配置类创建一个RedisConnectionFactory实例,并将其注入到RedisTemplate。通过RedisTemplate,可以将Session信息存储到Redis,并实现Session的共享。 无论是使用Spring Session还是使用RedisTemplate,都需要在Spring Boot配置文件配置Redis连接信息,包括Redis服务器的IP地址、端口号和密码(如果有)。此外,还可以配置Redis的连接池参数,以提高性能和并发能力。 总结起来,要使用Spring Boot实现Redis的Session共享,可以使用Spring Session或RedisTemplate两种方式。通过配置相关依赖和连接信息,将Session信息存储到Redis,实现Session的共享。这样,在分布式环境下,不同的应用实例之间就能够共享Session,并实现会话的跨应用访问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值