Spring Boot使用redis做数据缓存
2016-04-11 19:11
603 查看
1 添加redis支持
在pom.xml中添加Xml代码
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
</dependency>
2 redis配置
package com.kaishustory.conf.cache;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import java.lang.reflect.Method;
@Configuration
@EnableCaching
@SuppressWarnings("rawtypes")
public class RedisCacheConfig extends CachingConfigurerSupport{
@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) {
return new RedisCacheManager(redisTemplate);
}
@SuppressWarnings("unchecked")
@Bean
public RedisTemplate<String, 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.setValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}
3 redis服务器配置
Properties代码# REDIS (RedisProperties)
spring.redis.database= # database name
spring.redis.host=localhost # server host
spring.redis.password= # server password
spring.redis.port=6379 # connection port
spring.redis.pool.max-idle=8 # pool settings ...
spring.redis.pool.min-idle=0
spring.redis.pool.max-active=8
spring.redis.pool.max-wait=-1
spring.redis.sentinel.master= # name of Redis server
spring.redis.sentinel.nodes= # comma-separated list of host:port pairs
4 应用
测试两个实体类package com.kaishustory.demo.domain; import java.io.Serializable; import java.util.Date; import javax.persistence.Table; import javax.persistence.Transient; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import tk.mybatis.mapper.entity.IDynamicTableName; @SuppressWarnings("serial") @Table(name = "ks_demo") public class DemoDomain implements IDynamicTableName, Serializable { private int id; @JsonProperty("uid") private int userid; private String openid; private String unionid; private String nickname; private String birthday; private String sex; private int status; @JsonIgnore private Date createtime; @Transient // 非表字段,字段名称无所谓 @JsonIgnore private String dynamicTableName123; public int getId() { return id; } public void setId(int id) { this.id = id; } public int getUserid() { return userid; } public void setUserid(int userid) { this.userid = userid; } public String getOpenid() { return openid; } public void setOpenid(String openid) { this.openid = openid; } public String getUnionid() { return unionid; } public void setUnionid(String unionid) { this.unionid = unionid; } public String getNickname() { return nickname; } public void setNickname(String nickname) { this.nickname = nickname; } public String getBirthday() { return birthday; } public void setBirthday(String birthday) { this.birthday = birthday; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getStatus() { return status; } public void setStatus(int status) { this.status = status; } public Date getCreatetime() { return createtime; } public void setCreatetime(Date createtime) { this.createtime = createtime; } @Override @JsonIgnore public String getDynamicTableName() { return dynamicTableName123; } public void setDynamicTableName(String dynamicTableName) { this.dynamicTableName123 = dynamicTableName; } }
使用演示
package com.kaishustory.demo.service; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.kaishustory.base.service.BaseService; import com.kaishustory.demo.domain.DemoDomain; import com.kaishustory.demo.mapper.DemoMapper; @Service public class DemoService extends BaseService<DemoDomain>{ @Autowired DemoMapper demomapper; @Cacheable(value = "usercache",keyGenerator = "wiselyKeyGenerator") public PageInfo<DemoDomain> selectByPage(int pageNum, int pageSize){ //获取第1页,10条内容,默认查询总数count PageHelper.startPage(pageNum, pageSize); List<DemoDomain> demoList = demomapper.selectAll(); //用PageInfo对结果进行包装 PageInfo<DemoDomain> page = new PageInfo<DemoDomain>(demoList); //测试PageInfo全部属性 //PageInfo包含了非常全面的分页属性 System.err.println("PageNum:"+page.getPageNum()); System.err.println("PageSize"+page.getPageSize()); System.err.println(page.getStartRow()); System.err.println(page.getEndRow()); System.err.println(page.getTotal()); System.err.println(page.getPages()); System.err.println(page.getFirstPage()); System.err.println(page.getLastPage()); System.err.println(page.isIsFirstPage()); System.err.println(page.isIsLastPage()); System.err.println(page.isHasPreviousPage()); System.err.println(page.isHasNextPage()); return page; } }
package com.kaishustory.demo.controller; import java.util.Date; import org.apache.ibatis.annotations.Param; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.github.pagehelper.PageInfo; import com.kaishustory.commons.bean.PageBean; import com.kaishustory.commons.bean.RespCodeConstants; import com.kaishustory.commons.bean.RespResult; import com.kaishustory.demo.domain.DemoDomain; import com.kaishustory.demo.service.DemoService; import com.kaishustory.demo.vo.input.InputVo; @RestController @RequestMapping("/demoservice") public class DemoController { @Autowired DemoService demoservice; // 分页测试接口 @RequestMapping(value="/listByPage",method=RequestMethod.GET) public RespResult listByPage( @RequestParam(name="page_no",defaultValue="1") int pageNum, @RequestParam(name="page_size",defaultValue="15") int pageSize){ PageInfo<DemoDomain> pageInfo = demoservice.selectByPage(pageNum,pageSize); // 构造返回分页PageBean return new RespResult(RespCodeConstants.SUCCESS, new PageBean(pageInfo)); } }
结果展示:
相关文章推荐
- Spring Boot使用redis做数据缓存
- Linux服务器如何自定义安装Redis
- Redis PHP通用类
- 分布式缓存Redis使用心得
- CentOS6.5编译安装Redis
- redis 3.0的集群部署
- redis数据持久化
- redis集群之REDIS CLUSTER
- Redis本地环境搭建
- redis高可用之REDIS SENTINEL
- redis学习日志 【一、安装】
- Redis简介以及如何在Windows上安装Redis
- Redis做数据延期处理管道修改
- Redis短结构与分片
- 利用redis和php-resque实现后台任务
- Redis 数据类型
- NoSql database——Redis
- centos 6.7 搭建redis 主从服务
- 两台redis + keepalived主备
- Redis 配置