第一步:redis
确定要有redis数据库,在本地或者在某台服务器上。我是在本机(windows7)安装的。在dos窗口进入该文件的目录下,输入命令:redis-server.exe redis.windows.conf启动服务 若是有个redis的图形就说明成功了。spring
第二步:数据库
个人第二步是安装redis可视化工具redisdesktopmanager,在dos窗口真的不习惯,有可视化工具真的方便不少!就像Navicat同样的工具windows
第三部:缓存
在我原有的项目集成redis服务器
1.在pom.xml里引入jar包app
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> <version>${spring-boot-starter-redis-version}</version> </dependency>
版本大家看着办ide
2.在application.properties加入参数spring-boot
# 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
3工具
@PropertySource(value = "classpath:/application.properties")
引入参数基本就能够了
我根据别人的例子写了几个小例子试了一下
@Configuration @PropertySource(value = "classpath:/application.properties") @EnableCaching //启用缓存,这个注解很重要; public class RedisCacheConfig extends CachingConfigurerSupport { @Value("${spring.redis.host}") private String host; @Value("${spring.redis.port}") private int port; @Value("${spring.redis.timeout}") private int timeout; @Bean public KeyGenerator wiselyKeyGenerator() { 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(); } }; } @Bean public CacheManager cacheManager(RedisTemplate redisTemplate) { RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate); // Number of seconds before expiration. Defaults to unlimited (0) cacheManager.setDefaultExpiration(60); //设置key-value超时时间 秒 return cacheManager; } @Bean public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) { StringRedisTemplate template = new StringRedisTemplate(factory); setSerializer(template); //设置序列化工具,这样ReportBean不须要实现Serializable接口 template.afterPropertiesSet(); return template; } private void setSerializer(StringRedisTemplate template) { 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.setValueSerializer(jackson2JsonRedisSerializer); } }
先引入redis缓存的参数
@Service public class RedisdemoService { @Autowired private StringRedisTemplate stringRedisTemplate; @Cacheable(value = "usercache",keyGenerator = "wiselyKeyGenerator") public Users findUser(long id, String nickname, String phone){ stringRedisTemplate.opsForValue().set("aaa", "111"); BoundValueOperations<String ,String > bos=stringRedisTemplate.boundValueOps("aaaa"); bos.set("bbbbbb"); System.out.println(bos.get()); System.out.println("第一次缓存 第二次记录"); return new Users(id,nickname,phone); } @Cacheable(value = "token",keyGenerator = "wiselyKeyGenerator") public String productToken(){ stringRedisTemplate.opsForValue().set("aaa", "111"); stringRedisTemplate.expire("aaa",20, TimeUnit.SECONDS); String s= stringRedisTemplate.opsForValue().get("aaa"); System.out.println( stringRedisTemplate.opsForValue().get("aaa")); BoundValueOperations<String ,String > bos=stringRedisTemplate.boundValueOps("aaaa"); bos.set("bbbbbb"); System.out.println(bos.get()); System.out.println("就打印一次"); return "12345666+5544554"; } }
这里面都是我试用的参数和方法
能够在controller两次调用该servicce的方法你就知道缓存到底有没有生效。
往redis写入用RedisTemplate这个类就能够了, 设置时效都是能够的,我上面就测试了缓存时效和本身写入数据库的键值对本身控制时效。还写了一个生产时效的token的方法
public class ProductToken { @Autowired private StringRedisTemplate stringRedisTemplate; /** * 用来生产有实效的token * @param key * @param value */ public void prioductToken(String key,String value){ if(stringRedisTemplate.opsForValue().get(key)==null){ stringRedisTemplate.opsForValue().set(key,value);//存储键值对 stringRedisTemplate.expire(key,3600, TimeUnit.SECONDS);//设置超时 } else { stringRedisTemplate.expire(key,3600, TimeUnit.SECONDS);//设置超时 } } }
还没用于项目,大家看看就行。我就是一步步作的。
资料请看:http://wiselyman.iteye.com/blog/2184884