参考:http://www.importnew.com/25786.html
1.添加maven
org.springframework.boot spring-boot-starter-redis 1.3.2.RELEASE
2.application.properties(database默认为0,如需指定database需写明)
## Redis 配置 ## Redis数据库索引(默认为0) #spring.redis.database=0 ## Redis服务器地址 spring.redis.host=192.168.214.129//我的虚拟机 ## Redis服务器连接端口 spring.redis.port=6379 ## Redis服务器连接密码(默认为空) #spring.redis.password=123456 ## 连接池最大连接数(使用负值表示没有限制) 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
如果不考虑序列化问题,到这步就可以使用了
测试类:简单的字符串可以使用StringRedisTemplate操作如下
@RunWith(SpringRunner.class) @SpringBootTest public class RedisTest{ @Autowired private RedisTemplate redisTemplate; @Autowired private StringRedisTemplate stringRedisTemplate; @Autowired private MenuMapper menuMapper; @Test public void getMenuRedisTest() throws Exception{ //String String name = stringRedisTemplate.opsForValue().get("name"); System.out.println(name); //list
List}}
但是这样做就会有一个很意外的现象,就是自己明明set了一个key值,在redis-cli中查不到该key的值,可怕的是代码却可以取得到值,这是序列化的原因,redis默认的序列化方式为JdkSerializationRedisSerializer,这样在redis中就是以各种乱码的形式存储,所以在redis-cli里是看不到的因为key值不对,但是代码取的话,因为以相同的序列化方式,所以可以取得到.
所以,最好添加序列化的方式jackson2JsonRedisSerializer(综合性能比其他方式要好一些),如下:
3.添加RedisConfig类
@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(); } }; } @SuppressWarnings("rawtypes") @Bean public CacheManager cacheManager(RedisTemplate redisTemplate) { RedisCacheManager rcm = new RedisCacheManager(redisTemplate); //设置缓存过期时间 //rcm.setDefaultExpiration(60);//秒 return rcm; } @Bean public RedisTemplate, String> redisTemplate(RedisConnectionFactory factory) { StringRedisTemplate template = new StringRedisTemplate(factory); Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); //template.setKeySerializer(template.getStringSerializer()); template.setValueSerializer(jackson2JsonRedisSerializer); template.afterPropertiesSet(); return template; } }
这样就可以使用了,如下获取list:
@RunWith(SpringRunner.class) @SpringBootTest public class RedisTest{ @Autowired private RedisTemplate redisTemplate; @Autowired private MenuMapper menuMapper; @Test public void getMenuRedisTest() throws Exception{ //list //ListOperations,Menu> listOperations = redisTemplate.opsForList(); List
这里使用redisTemmplate.opsForList().range("menu",0,-1)获取到的结果集list中只有一个元素ArrayList,对象全部放在第一个元素,所以,需要遍历的是list.get(0),需要强制装换类型.如果是直接返回前台,那么想要获取对应的数据时,遍历的对象也是第一个元素,如下:
$.post("/menu/menutest",{},function (data) { //var sss = JSON.stringify(data[0]); //alert(sss); $.each(data[0] ,function (i,n) { alert(n.m_name); });