• Spring Boot使用redis做数据缓存


     1 添加redis支持

    在pom.xml中添加

    Xml代码  收藏代码
    1. <dependency>  
    2.           <groupId>org.springframework.boot</groupId>  
    3.           <artifactId>spring-boot-starter-redis</artifactId>  
    4.       </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代码  收藏代码
    1. # REDIS (RedisProperties)  
    2. spring.redis.database= # database name  
    3. spring.redis.host=localhost # server host  
    4. spring.redis.password= # server password  
    5. spring.redis.port=6379 # connection port  
    6. spring.redis.pool.max-idle=8 # pool settings ...  
    7. spring.redis.pool.min-idle=0  
    8. spring.redis.pool.max-active=8  
    9. spring.redis.pool.max-wait=-1  
    10. spring.redis.sentinel.master= # name of Redis server  
    11. 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));
    	}
    }
    

    结果展示:


  • 相关阅读:
    学习笔记之正向代理和反向代理的区别
    PHP程序员的进阶之路
    go语言笔记——切片函数常见操作,增删改查和搜索、排序
    golang的垃圾回收(GC)机制
    堆栈的详细讲解
    springAop必导jar包
    sring框架的jdbc应用
    下载jar包方法
    mysql数据乱码
    Eclipse打包java工程
  • 原文地址:https://www.cnblogs.com/duyinqiang/p/5696368.html
Copyright © 2020-2023  润新知