三:Springboot整合Redis

Posted smile radiantly

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三:Springboot整合Redis相关的知识,希望对你有一定的参考价值。

一:springboot整合redis

redis版本:3.0.0

运行环境:linux

1.安装redis

1.1安装gcc
    yum install gcc-c++
1.2解压redis.3.0.0.tar.gz压缩包
    tar -zxvf redis-3.0.0.tar.gz
1.3进入解压后的目录进行编译
    cd redis-3.0.0
    make
1.4将redis安装到指定目录
    make PREFIX=/usr/local/redis install
1.5启动redis
    ./redis-server      ctrl+c停止 
1.6复制redis.conf到/usr/local/redis/bin/
    cp redis.conf /usr/local/redis/bin/
1.7编辑复制的redis.conf
    将daemonize no 改为daemonize yes
1.8启动redis服务(6379)
    ./redis-server redis.conf
    ps aux|grep redis   #查看redis是否启动
    ./redis-cli shutdown    #关闭redis服务

2.springboot整合spring data redis

spring data redis是属于spring data下的一个模块.作用就是简化对于redis的操作.

2.1修改pom文件添加redis依赖

<!-- redis的springboot启动器 -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
  <!-- 1.5的版本默认采用的连接池技术是jedis  2.0以上版本默认连接池是lettuce, 在这里采用jedis,所以需要排除lettuce的jar -->
  <exclusions>
    <exclusion>
      <groupId>io.lettuce</groupId>
      <artifactId>lettuce-core</artifactId>
    </exclusion>
  </exclusions>
</dependency>
<!-- 添加jedis客户端 -->
<dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
</dependency>
<!-- 将作为Redis对象序列化器 -->
<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>fastjson</artifactId>
  <version>1.2.47</version>
</dependency>

2.2编写springdataredis的配置类

@Configuration
public class RedisConfig {
  //1.创建JedisPoolConfig对象,在该对象中完成一些连接池配置
  //2.创建JedisConnectionFactory对象,配置redis连接信息
  //@ConfigurationProperties(prefix="spring.redis"):会将前缀相同的内容创建一个实体
  //3.创建RedisTemplate:用于执行Redis操作方法
  @Bean
  public RedisTemplate<String, Object> getRedisTemplate(JedisConnectionFactory factory){
    RedisTemplate<String, Object> template = new RedisTemplate<>();
    //关联连接工厂
    template.setConnectionFactory(factory);
    //为key设置序列化
    template.setKeySerializer(new StringRedisSerializer());
    //为value设置序列化
    template.setValueSerializer(new StringRedisSerializer());
    return template;
  }             
}

2.3编写测试代码

2.3.1修改pom文件添加test依赖

<!-- test的springboot启动器 -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-test</artifactId>
</dependency>

2.3.2编写测试类

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes=Application.class)  //Application是springboot启动类的类名
public class RedisTest {
  @Autowired
  private RedisTemplate<String, Object> redisTemplate;                  
  //添加一个字符串
  @Test
  public void testSet() {
    this.redisTemplate.opsForValue().set("key", "测试redis整合");
  }                 
  //获取一个字符串
  @Test
  public void testGet() {
    String value = (String)this.redisTemplate.opsForValue().get("key");
    System.out.println(value);
  }                     
}

3.提取redis的配置信息

3.1在src/main/resource/目录下新建一个配置文件:application.yaml

@ConfigurationProperties(prefix="spring.redis"):会将前缀相同的内容创建一个实体

# redis配置
spring:
    redis:
#       redis数据库索引(默认为零)
        database: 0
#       host是自己虚拟机的ip地址
        host: 192.168.91.100
        port: 6379
        password: 
    jedis: 
        pool: 
#           连接池最大连接数(使用负值表示没有限制)
            max-active: 8
#           连接池最大阻塞等待时间(使用负值表示没有限制)
            max-wait: -1
#           连接池最大空闲连接
            max-idle: 8
#           连接池最小空闲连接
            min-idle: 0
#   连接超时时间(毫秒)
    timeout: 10000

4.spring Date Redis操作实体对象

4.1创建实体类User

public class User implements Serializable{
    private Integer id;
    private String name;
    private String age;
    public User() {
        // TODO Auto-generated constructor stub
    }
    public User(Integer id, String name, String age) {
        super();
        this.id = id;
        this.name = name;
        this.age = age;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
    }
}

4.2测试代码

//添加user实体类
@Test
public void testSetUser() {
  User user = new User();
  user.setId(1);
  user.setName("zlg");
  user.setAge("18");
  //重新设置序列化器
  this.redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
  this.redisTemplate.opsForValue().set("user", user);
}                   
//根据key获取实体类对象
@Test
public void testGetUser() {
  //反序列化,重新设置序列化器
  this.redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
  User user = (User)this.redisTemplate.opsForValue().get("user");
  System.out.println(user);
}

5.spring data redis以json格式存储实体对象

5.1测试代码

//3.基于json格式存user对象
@Test
public void testSetUserUseJson() {
  User user = new User();
  user.setId(1);
  user.setName("zlg");
  user.setAge("18");
  //重新设置序列化器
  this.redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(User.class));
  this.redisTemplate.opsForValue().set("user_json", user);
}   
//基于json格式取对象
@Test
public void testGetUserUseJson() {
  //反序列化
  this.redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(User.class));
  User user = (User)this.redisTemplate.opsForValue().get("user_json");
  System.out.println(user);
}

以上是关于三:Springboot整合Redis的主要内容,如果未能解决你的问题,请参考以下文章

spring boot 整合 redis

如何用SpringBoot整合Redis(详细讲解~)

Spring Boot 整合Redis 实现缓存

springboot整合三 共享session,集成springsession

docker compose搭建redis7.0.4高可用一主二从三哨兵集群并整合SpringBoot图文完整版

docker compose搭建redis7.0.4高可用一主二从三哨兵集群并整合SpringBoot图文完整版