编程知识 cdmana.com

Spring Boot整合Redis

1. redis介绍

Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。

2. 安装Redis

自行安装

3. Spring Boot整合Redis

3.1 依赖导入

 <!--引入redis依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <version>2.4.0</version>
        </dependency>

<!--由于使用到了fastJson,所以引入相关的依赖-->
 <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.60</version>
        </dependency>

3.2 在Application.yml配置redis

spring:
  redis:
    host: 127.0.0.1  #配置redis的主机地址,需要修改成自己的
    database: 5
    port: 6379
    password: #设置自己的密码
    jedis:
      pool:
        max-active: 50 # 如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool 的状态为exhausted(耗尽)
        max-idle: 20 # 连接池中的最大空闲连接,默认值也是8
        min-idle: 5  # 连接池中的最小空闲连接,默认值也是0
       # max-wait: 5 # 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接 抛出JedisConnectionException

3.3 redis常用APi介绍

redis提供了RedisTemplate 和 StringRedisTemplate模板。我下面使用的是StringRedisTemplate进行演示:

@Component
public class RedisService {
   
   
    @Resource
    private StringRedisTemplate stringRedisTemplate;

    //string 类型
    /*

	新建一个 RedisService,注入 StringRedisTemplate,使用 		stringRedisTemplate.opsForValue()
可以获取 ValueOperations<String, String> 对象,通过该对象即可读写 redis 数据库了。
*/
    public void setRediskv(String key,String value){
   
   
        ValueOperations<String, String> forValue = stringRedisTemplate.opsForValue();
        forValue.set(key,value);


    }
    public String getRediskv(String key){
   
   
        String s = stringRedisTemplate.opsForValue().get(key);
        return s;
    }


    //String类型存储对象,存储前要把对象转化为json数据类型
    public void setRedisObj(User user){
   
   

        ValueOperations<String, String> stringStringValueOperations = stringRedisTemplate.opsForValue();
        stringStringValueOperations.set("user", JSON.toJSONString(user));

    }
    public User getRedisObj(){
   
   
        ValueOperations<String, String> stringStringValueOperations = stringRedisTemplate.opsForValue();
        String user = stringStringValueOperations.get("user");
        User user1 = JSONObject.parseObject(user, User.class);
        return user1;
    }

    //list类型
/*

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

*/
    public void setRedisList(){
   
   

        ListOperations<String, String> stringStringListOperations = stringRedisTemplate.opsForList();
       stringStringListOperations.leftPush("list","ljz1");
       stringStringListOperations.leftPush("list","ljz2");
       stringStringListOperations.leftPush("list","ljz3");
       stringStringListOperations.leftPush("list","ljz4");
    }
    public String getRedisList(){
   
   
        ListOperations<String, String> stringStringListOperations = stringRedisTemplate.opsForList();
        String list = stringStringListOperations.leftPop("list");
        return list;
    }


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


*/
    public void setRedisHash(){
   
   
        HashOperations<String, Object, Object> stringObjectObjectHashOperations = stringRedisTemplate.opsForHash();
        stringObjectObjectHashOperations.put("hash0","name0","ljz0");
        stringObjectObjectHashOperations.put("hash1","name1","ljz1");
        stringObjectObjectHashOperations.put("hash2","name2","ljz2");


    }
    public Object getRedisHash(){
   
   
        HashOperations<String, Object, Object> stringObjectObjectHashOperations = stringRedisTemplate.opsForHash();
        Object o = stringObjectObjectHashOperations.get("hash0", "name0");
        return o;
    }
}

测试用例:

package liz.com.springtest.controller;

import liz.com.springtest.entity.User;
import liz.com.springtest.redis.RedisService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


/**
 * @author linjiazeng
 * @version 1.0
 * @date 2020/12/23 10:52
 **/
@RestController
@RequestMapping("redis")
public class RedisController {
   
   

    @Autowired
    private RedisService redisService;

    //测试String类型
    @GetMapping("setRedis/{key}/{name}")
    public String setReids(@PathVariable String key,@PathVariable String name ){
   
   
        redisService.setRediskv(key,name);
        return "success";
    }

    @GetMapping("getRedis/{key}")
    public String getReids(@PathVariable String key){
   
   
        String redis = redisService.getRediskv(key);
        return redis;
    }

    //测试对象类型
    @GetMapping("setRedisObj")
    public String setRedisObj(){
   
   
        User user = new User();
        user.setName("ljz");
        user.setAge("18");
        user.setSex("男");
        redisService.setRedisObj(user);
        return "success";
    }

    @GetMapping("getRedisObj")
    public User getRedisObj(){
   
   
        return redisService.getRedisObj();
    }

    //测试list类型
    @GetMapping("setRedisList")
    public String setRedisList(){
   
   
        redisService.setRedisList();
        return "success";
    }

    @GetMapping("getRedisList")
    public String getRedisList(){
   
   
        return redisService.getRedisList();
    }

    //测试hash
    @GetMapping("getRedisHash")
    public Object getRedisHash(){
   
   
        return redisService.getRedisHash();
    }

    @GetMapping("setRedisHash")
    public String setRedisHash(){
   
   
        redisService.setRedisHash();
        return  "success";
    }
}

部分测试结果如下:
测试的时候现使用http://localhost:8080/redis/setRedisObj把数据缓存到reids,然后再访问http://localhost:8080/redis/getRedisObj
在这里插入图片描述

版权声明
本文为[osc_eijjkem1]所创,转载请带上原文链接,感谢
https://my.oschina.net/u/4419100/blog/4839854

Scroll to Top