在spring boot中使用redis(一):集成redis

在考虑如何集成redis之前,首先需要确保你拥有一个已经安装好的redis环境。

1.redis环境安装(Linux版本)

由于redis官方只支持Linux环境,所以如果你想安装官方版本,那么你就需要准备一台安装了Linux系统的服务器(虚拟机)。

redis安装包下载地址:

http://download.redis.io/releases/

下载好安装包后,就可以把安装包放到Linux服务器中,准备安装了。

我使用的是Xftp工具进行文件传输

传输上去之后,先对tar包进行解压,以上图的目录为例

#  cd /usr/soft ---进入压缩包所在目录

#  tar -zxvf redis-3.2.8.tar.gz --解压压缩包

解压完后,路径下就会出现相应文件夹。

#  cd redis-3.2.8 --进入解压获得的文件夹

#  make --编译

编译完成后,在src目录下会出现服务程序redis-server,还有用于测试的客户端程序redis-cli。

#  cd src --进入src文件夹

#  ./redis-server ../redis.conf --开启redis服务(开启后不要关闭黑窗)

现在就可以对redis服务进行访问了。

2.spring boot集成redis

首先需要引入redis依赖:

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

此时,spring会自动加载两个bean:

@Bean
@ConditionalOnMissingBean(name = "redisTemplate")
public RedisTemplate<Object, Object> redisTemplate(
      RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
   RedisTemplate<Object, Object> template = new RedisTemplate<>();
   template.setConnectionFactory(redisConnectionFactory);
   return template;
}

@Bean
@ConditionalOnMissingBean
public StringRedisTemplate stringRedisTemplate(
      RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
   StringRedisTemplate template = new StringRedisTemplate();
   template.setConnectionFactory(redisConnectionFactory);
   return template;
}

其中上面个bean能够操作所有对象,下面个用于操作key和value都是String的内容。

我们可以直接使用下面个bean进行测试。

测试之前先配置下redis全局配置:

在spring下添加如下配置

redis:
  #redis数据库索引
  database: 0
  #redis数据库主机ip
  host: 192.168.85.129
  #redis服务端口号
  port: 6379
  #redis服务连接密码
  password:
  jedis:
    pool:
      #最大连接数
      max-active: 15
      #最大等待时间(需要自己写单位)
      max-wait: 10000ms
      #最大空闲连接
      max-idle: 8
      #最小空闲连接
      min-idle: 3

注:适用于spring boot2.0之后的版本。

接下来编写自定义操作接口:

@Repository
public class RedisRepository {
    @Autowired
    StringRedisTemplate stringRedisTemplate;

    /**
     * 用于单对象存储
     * @param key
     * @param child
     * @param time
     */
    public void add(String key,Child child,long time){
        Gson gson = new Gson();
        stringRedisTemplate.opsForValue().set(key,gson.toJson(child),time, TimeUnit.MINUTES);
    }

    /**
     * 用于多对象存储
     * @param key
     * @param list
     * @param time
     */
    public void add(String key, List<Child> list,long time){
        Gson gson = new Gson();
        stringRedisTemplate.opsForValue().set(key,gson.toJson(list),time, TimeUnit.MINUTES);
    }

    /**
     * 获取单个对象
     * @param key
     * @return
     */
    public Child getOne(String key){
        String result = stringRedisTemplate.opsForValue().get(key);
        if (isNotBlank(result)){
            return new Gson().fromJson(result,Child.class);
        }
        return null;
    }

    /**
     * 获取集合
     * @param key
     * @return
     */
    public List<Child> getList(String key){
        String result = stringRedisTemplate.opsForValue().get(key);
        if (isNotBlank(result)){
            return new Gson().fromJson(result,new TypeToken<List<Child>>(){
            }.getType());
        }
        return null;
    }

    /**
     * 删除单条记录
     * @param key
     */
    public void delete(String key){
        stringRedisTemplate.opsForValue().getOperations().delete(key);
    }
}

如果系统中不能使用Gson对象,可以考虑加入Gson依赖:

<dependency>
   <groupId>com.google.code.gson</groupId>
   <artifactId>gson</artifactId>
</dependency>

接下来编写测试类进行测试:

@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisTest {
    @Autowired
    RedisRepository redisRepository;
    @Test
    public void test(){
        Child child = new Child();
        child.setName("redisTest");
        child.setMotherName("this is motherName");
        child.setFatherName("this is fatherName");
        child.setAddr("JiNan");
        child.setId("1");
        child.setSort(1);
        String key = "child First";
        long time = 100000l;
        redisRepository.add(key,child,time);
        Child child2 = redisRepository.getOne("child First");
        System.out.println(child2.getFatherName());
        redisRepository.delete("child First");
        List<Child> list = new ArrayList<Child>();
        for (int i = 0;i<10;i++){
            Child c = new Child();
            c.setSort(i);
            c.setFatherName("fatherName"+i);
            c.setName("name"+i);
            c.setMotherName("mother name"+i);
            list.add(c);
        }
        redisRepository.add("childList",list,10000);
        List<Child> sList = redisRepository.getList("childList");
        for (Child child1:sList){
            System.out.println(child1.getFatherName());
        }
    }
    @Before
    public void testBefore(){
        System.out.println("开始测试啦");
    }
    @After
    public void testAfter(){
        System.out.println("结束测试啦");
    }
}

然后直接运行即可。

OVER。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值