SpringBoot整合RedisTemplate实现缓存信息监控的步骤

网友投稿 554 2022-09-02


SpringBoot整合RedisTemplate实现缓存信息监控的步骤

SpringBoot 整合 Redis 数据库实现数据缓存的本质是整合 Redis 数据库,通过对需要“缓存”的数据存入 Redis 数据库中,下次使用时先从 Redis 中获取,Redis 中没有再从数据库中获取,这样就实现了 Redis 做数据缓存。

按照惯例,下面一步一步的实现 Springboot 整合 Redis 来存储数据,读取数据。

1.项目添加依赖首页第一步还是在项目添加 Redis 的环境, Jedis。

org.springframework.boot

spring-boot-starter-data-redis

redis.clients

jedis

2. 添加redis的参数

spring:

### Redis Configuration

redis:

pool:

max-idle: 10

min-idle: 5

max-total: 20

hostName: 127.0.0.1

port: 6379

3.编写一个 RedisConfig 注册到 Spring 容器

package com.config;

import org.springframework.boot.context.properties.ConfigurationProperties;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;

import org.springframework.data.redis.core.RedisTemplate;

import org.springframework.data.redis.serializer.StringRedisSerializer;

import redis.clients.jedis.JedisPoolConfig;

/**

* 描述:Redis 配置类

*/

@Configuration

public class RedisConfig {

/**

* 1.创建 JedisPoolConfig 对象。在该对象中完成一些连接池的配置

*/

@Bean

@ConfigurationProperties(prefix="spring.redis.pool")

public JedisPoolConfig jedisPoolConfig() {

JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();

return jedisPoolConfig;

}

/**

* 2.创建 JedisConnectionFactory:配置 redis 连接信息

*/

@Bean

@ConfigurationProperties(prefix="spring.redis")

public JedisConnectionFactory jedisConnectionFactory(JedisPoolConfig jedisPoolConfig) {

JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(jedisPoolConfig);

return jedisConnectionFactory;

}

/**

* 3.创建 RedisTemplate:用于执行 Redis 操作的方法

*/

@Bean

public RedisTemplate redisTemplate(JedisConnectionFactory jedisConnectionFactory) {

RedisTemplate redisTemplate = new RedisTemplate<>();

// 关联

redisTemplate.setConnectionFactory(jedisConnectionFactory);

// 为 key 设置序列化器

redisTemplate.setKeySerializer(new StringRedisSerializer());

// 为 value 设置序列化器

redisTemplate.setValueSerializer(new StringRedisSerializer());

return redisTemplate;

}

}

4.使用redisTemplate

package com.controller;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.data.redis.core.RedisTemplate;

import org.springframework.data.redis.serializer.Jackson2jsonRedisSerializer;

import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import com.bean.Users;

/**

* @Description 整合 Redis 测试Controller

* @version V1.0

*/

@RestController

public class RedisController {

@Autowired

private RedisTemplate redisTemplate;

@RequestMapping("/redishandle")

public String redishandle() {

//添加字符串

redisTemplate.opsForValue().set("author", "欧阳");

//获取字符串

String value = (String)redisTemplate.opsForValue().get("author");

System.out.println("author = " + value);

//添加对象

//重新设置序列化器

redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());

redisTemplate.opsForValue().set("users", new Users("1" , "张三"));

//获取对象

//重新设置序列化器

redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());

Users user = (Users)redisTemplate.opsForValue().get("users");

System.out.println(user);

//以json格式存储对象

//重新设置序列化器

redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(Users.class));

redisTemplate.opsForValue().set("usersJson", new Users("2" , "李四"));

//以json格式获取对象

//重新设置序列化器

redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(Users.class));

user = (Users)redisTemplate.opsForValue().get("usersJson");

System.out.println(user);

return "home";

}

}

5.项目实战中redisTemplate的使用

/**

*

*/

package com.shiwen.lujing.service.impl;

import java.util.List;

import java.util.concurrent.TimeUnit;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.annotation.Qualifier;

import org.springframework.data.redis.core.RedisTemplate;

import org.springframework.data.redis.core.ValueOperations;

import org.springframework.stereotype.Service;

import com.fasterxml.jackson.core.JsonProcessingException;

import com.fasterxml.jackson.databind.ObjectMapper;

import com.shiwen.lujing.dao.mapper.WellAreaDao;

import com.shiwen.lujing.service.WellAreaService;

import com.shiwen.lujing.util.RedisConstants;

/**

* @author zhangkai

*

*/

@Service

public class WellAreaServiceImpl implements WellAreaService {

@Autowired

private WellAreaDao wellAreaDao;

@Autowired

private RedisTemplate stringRedisTemplate;

/*

* (non-Javadoc)

*

* @see com.shiwen.lujing.service.WellAreaService#getAll()

*/

@Override

public String getAll() throws JsonProcessingException {

//redis中key是字符串

ValueOperations opsForValue = stringRedisTemplate.opsForValue();

//通过key获取redis中的数据

String wellArea = opsForValue.get(RedisConstants.REDIS_KEY_WELL_AREA);

//如果没有去查数据库

if (wellArea == null) {

List wellAreaList = wellAreaDao.getAll();

wellArea = new ObjectMapper().writeValueAsString(wellAreaList);

//将查出来的数据存储在redis中

opsForValue.set(RedisConstants.REDIS_KEY_WELL_AREA, wellArea, RedisConstants.REDIS_TIMEOUT_1, TimeUnit.DAYS);

// set(K key, V value, long timeout, TimeUnit unit)

//timeout:过期时间; unit:时间单位

//使用:redisTemplate.opsForValue().set("name","tom",10, TimeUnit.SECONDS);

//redisTemplate.opsForValue().get("name")由于设置的是10秒失效,十秒之内查询有结

//果,十秒之后返回为null

}

return wellArea;

}

}

6.redis中使用的key

package com.shiwen.lujing.util;

/**

* redis 相关常量

*

*

*/

public interface RedisConstants {

/**

* 井首字

*/

String REDIS_KEY_JING_SHOU_ZI = "JING-SHOU-ZI";

/**

* 井区块

*/

String REDIS_KEY_WELL_AREA = "WELL-AREA";

/**

*

*/

long REDIS_TIMEOUT_1 = 1L;

}

补充:SpringBoot整合RedisTemplate实现缓存信息监控

1、CacheController接口代码

@RestController

@RequestMapping("/monitor/cache")

public class CacheController

{

@Autowired

private RedisTemplate redisTemplate;

@PreAuthorize("@ss.hasPermi('monitor:cache:list')")// 自定义权限注解

@GetMapping()

public AjaxResult getInfo() throws Exception

{

// 获取redis缓存完整信息

//Properties info = redisTemplate.getRequiredConnectionFactory().getConnection().info();

Properties info = (Properties) redisTemplate.execute((RedisCallback) connection -> connection.info());

// 获取redis缓存命令统计信息

//Properties commandStats = redisTemplate.getRequiredConnectionFactory().getConnection().info("commandstats");

Properties commandStats = (Properties) redisTemplate.execute((RedisCallback) connection -> connection.info("commandstats"));

// 获取redis缓存中可用键Key的总数

//Long dbSize = redisTemplate.getRequiredConnectionFactory().getConnection().dbSize();

Object dbSize = redisTemplate.execute((RedisCallback) connection -> connection.dbSize());

Map result = new HashMap<>(3);

result.put("info", info);

result.put("dbSize", dbSize);

List> pieList = new ArrayList<>();

commandStats.stringPropertyNames().forEach(key -> {

Map data = new HashMap<>(2);

String property = commandStats.getProperty(key);

data.put("name", StringUtils.removeStart(key, "cmdstat_"));

data.put("value", StringUtils.substringBetween(property, "calls=", ",usec"));

pieList.add(data);

});

result.put("commandStats", pieList);

return AjaxResult.success(result);

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Python学习笔记之Centos6.9安装Python3.6
下一篇:Python面试题之Python正则表达式re模块(菜鸟教程python正则表达式)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~