<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
@Configuration
public class RedisConfig {
@Bean
public RedisConnectionFactory redisCF(){
//如果什么参数都不设置,默认连接本地6379端口
JedisConnectionFactory factory = new JedisConnectionFactory();
factory.setPort(6379);
factory.setHostName("localhost");
return factory;
}
}
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = Application.class)
public class RedisTest {
@Autowired
RedisConnectionFactory factory;
@Test
public void testRedis(){
//得到一个连接
RedisConnection conn = factory.getConnection();
conn.set("hello".getBytes(), "world".getBytes());
System.out.println(new String(conn.get("hello".getBytes())));
}
}
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory factory){
//创建一个模板类
RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
//将刚才的redis连接工厂设置到模板类中
template.setConnectionFactory(factory);
return template;
}
@Autowired
RedisTemplate<String, Object> template;
@Test
public void testRedisTemplate(){
template.opsForValue().set("key1", "value1");
System.out.println(template.opsForValue().get("key1"));
}
@Test
public void testRedisTemplateList(){
Pruduct prud = new Pruduct(1, "洗发水", "100ml");
Pruduct prud2 = new Pruduct(2, "洗面奶", "200ml");
//依次从尾部添加元素
template.opsForList().rightPush("pruduct", prud);
template.opsForList().rightPush("pruduct", prud);
//查询索引0到商品总数-1索引(也就是查出所有的商品)
List<Object> prodList = template.opsForList().range("pruduct", 0,template.opsForList().size("pruduct")-1);
for(Object obj:prodList){
System.out.println((Pruduct)obj);
}
System.out.println("产品数量:"+template.opsForList().size("pruduct"));
}
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
// 创建一个模板类
RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
// 将刚才的redis连接工厂设置到模板类中
template.setConnectionFactory(factory);
// 设置key的序列化器
template.setKeySerializer(new StringRedisSerializer());
// 设置value的序列化器
//使用Jackson 2,将对象序列化为JSON
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
//json转对象类,不设置默认的会将json转成hashmap
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
template.setValueSerializer(jackson2JsonRedisSerializer);
return template;
}
/**
* 申明缓存管理器,会创建一个切面(aspect)并触发Spring缓存注解的切点(pointcut)
* 根据类或者方法所使用的注解以及缓存的状态,这个切面会从缓存中获取数据,将数据添加到缓存之中或者从缓存中移除某个值
* @return
*/
@Bean
public RedisCacheManager cacheManager(RedisTemplate redisTemplate) {
return new RedisCacheManager(redisTemplate);
}
@RequestMapping("/getPrud")
@Cacheable("prudCache")
public Pruduct getPrud(@RequestParam(required=true)String id){
System.out.println("如果第二次没有走到这里说明缓存被添加了");
return pruductDao.getPrud(Integer.parseInt(id));
}
@RequestMapping("/deletePrud")
@CacheEvict("pruddeleteCache")
public String deletePrud(@RequestParam(required=true)String id){
return "SUCCESS";
}
@RequestMapping("/savePrud")
@CachePut(value="prudsaveCache",key="#result.id +''")
public Pruduct savePrud(Pruduct prud){
return prud;
}
@RequestMapping("/getPrud2")
@CachePut(value ="prudCache",unless="#result.desc.contains('nocache')")
public Pruduct getPrud2(@RequestParam(required=true)String id){
System.out.println("如果走到这里说明,说明缓存没有生效!");
Pruduct p = new Pruduct(Integer.parseInt(id), "name_nocache"+id, "nocache");
return p;
}
@RequestMapping("/getPrud3")
@Cacheable(value ="prudCache",key="#root.targetClass.getName() + #root.methodName + #id")
public Pruduct getPrud3(@RequestParam(required=true)String id){
System.out.println("如果第二次没有走到这里说明缓存被添加了");
return pruductDao.getPrud(Integer.parseInt(id));
}
@Configuration
@EnableCaching//开启缓存
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public KeyGenerator keyGenerator() {
return new KeyGenerator() {
@Override
public Object generate(Object target, Method method, Object... params) {
StringBuilder sb = new StringBuilder();
sb.append(target.getClass().getName());
sb.append(method.getName());
for (Object obj : params) {
sb.append(obj.toString());
}
return sb.toString();
}
};
}
/**
* 申明缓存管理器,会创建一个切面(aspect)并触发Spring缓存注解的切点(pointcut)
* 根据类或者方法所使用的注解以及缓存的状态,这个切面会从缓存中获取数据,将数据添加到缓存之中或者从缓存中移除某个值
* @return
*/
@Bean
public RedisCacheManager cacheManager(RedisTemplate redisTemplate) {
return new RedisCacheManager(redisTemplate);
}
@Bean
@Primary
public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
// 创建一个模板类
RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
// 将刚才的redis连接工厂设置到模板类中
template.setConnectionFactory(factory);
// 设置key的序列化器
template.setKeySerializer(new StringRedisSerializer());
// 设置value的序列化器
//使用Jackson 2,将对象序列化为JSON
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
//json转对象类,不设置默认的会将json转成hashmap
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
template.setValueSerializer(jackson2JsonRedisSerializer);
return template;
}
}
# REDIS (RedisProperties) # Redis数据库索引(默认为0) spring.redis.database=0 # Redis服务器地址 spring.redis.host=127.0.0.1 # Redis服务器连接端口 spring.redis.port=6379 # Redis服务器连接密码(默认为空) spring.redis.password= # 连接池最大连接数(使用负值表示没有限制) spring.redis.pool.max-active=8 # 连接池最大阻塞等待时间(使用负值表示没有限制) spring.redis.pool.max-wait=-1 # 连接池中的最大空闲连接 spring.redis.pool.max-idle=8 # 连接池中的最小空闲连接 spring.redis.pool.min-idle=0 # 连接超时时间(毫秒) spring.redis.timeout=0
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有