SpringBoot --Redis

引入Redis依赖:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>1.5.6.RELEASE</version>
</dependency>


application.properties:

#Tomcat
server.port=8888
server.servlet.context-path=/helloSpringBoot

#datasource        jpa
spring.datasource.url = jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username = root
spring.datasource.password = 123456
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.max-active=20
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=10
# Specify the DBMS
spring.jpa.database = MYSQL
# Show or not log for each sql query
spring.jpa.show-sql = true
# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto = update
# Naming strategy
#[org.hibernate.cfg.ImprovedNamingStrategy  #org.hibernate.cfg.DefaultNamingStrategy]
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
# stripped before adding them to the entity manager)

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect


# Redis\u6570\u636E\u5E93\u7D22\u5F15\uFF08\u9ED8\u8BA4\u4E3A0\uFF09
spring.redis.database=0
# Redis\u670D\u52A1\u5668\u5730\u5740
spring.redis.host=192.168.3.12
# Redis\u670D\u52A1\u5668\u8FDE\u63A5\u7AEF\u53E3
spring.redis.port=6379

# Redis\u670D\u52A1\u5668\u8FDE\u63A5\u5BC6\u7801\uFF08\u9ED8\u8BA4\u4E3A\u7A7A\uFF09




RedisConfig:

package com.cxb.config;


import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;


import com.cxb.model.RedisObjectSerializer;
import com.cxb.model.User;


import redis.clients.jedis.JedisPoolConfig;


@Configuration  
@EnableAutoConfiguration  
public class RedisConfig {
      
    @Bean  
    @ConfigurationProperties(prefix="spring.redis")  
    public JedisPoolConfig getRedisConfig(){  
        JedisPoolConfig config = new JedisPoolConfig();  
        return config;  
    }  
      
    @SuppressWarnings("deprecation")
@Bean  
    @ConfigurationProperties(prefix="spring.redis")  
    public JedisConnectionFactory getConnectionFactory(){  
        JedisConnectionFactory factory = new JedisConnectionFactory();  
        JedisPoolConfig config = getRedisConfig();  
        factory.setPoolConfig(config);  
        System.out.println("JedisConnectionFactory bean init success.");  
        return factory;  
    }  
      
    @Bean  
    public RedisTemplate<?, ?> getRedisTemplate(){  
    RedisTemplate<String, User> template = new RedisTemplate<String, User>();
        template.setConnectionFactory(getConnectionFactory());
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new RedisObjectSerializer());
        return template;
    }  
   
}



IRedisService:

package com.cxb.service;


import java.util.List;


public interface IRedisService {
    public boolean set(String key, String value);  
    
    public String get(String key);  
      
    public boolean expire(String key,long expire);  
      
    public <T> boolean setList(String key ,List<T> list);  
      
    public <T> List<T> getList(String key,Class<T> clz);  
      
    public long lpush(String key,Object obj);  
      
    public long rpush(String key,Object obj);  
      
    public String lpop(String key);   
}




RedisServiceImpl:

package com.cxb.service;


import java.util.List;
import java.util.concurrent.TimeUnit;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.stereotype.Service;


import com.alibaba.fastjson.JSON;


@Service  
public class RedisServiceImpl implements IRedisService{  
  
    @Autowired  
    private RedisTemplate<String, ?> redisTemplate;  
      
    @Override  
    public boolean set(final String key, final String value) {  
        boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {  
            @Override  
            public Boolean doInRedis(RedisConnection connection) throws DataAccessException {  
                RedisSerializer<String> serializer = redisTemplate.getStringSerializer();  
                connection.set(serializer.serialize(key), serializer.serialize(value));  
                return true;  
            }  
        });  
        return result;  
    }  
  
    public String get(final String key){  
        String result = redisTemplate.execute(new RedisCallback<String>() {  
            @Override  
            public String doInRedis(RedisConnection connection) throws DataAccessException {  
                RedisSerializer<String> serializer = redisTemplate.getStringSerializer();  
                byte[] value =  connection.get(serializer.serialize(key));  
                return serializer.deserialize(value);  
            }  
        });  
        return result;  
    }  
  
    @Override  
    public boolean expire(final String key, long expire) {  
        return redisTemplate.expire(key, expire, TimeUnit.SECONDS);  
    }  
  
    @Override  
    public <T> boolean setList(String key, List<T> list) {  
        String value = JSON.toJSONString(list);  
        return set(key,value);  
    }  
  
    @SuppressWarnings("unchecked")
@Override  
    public <T> List<T> getList(String key,Class<T> clz) {  
        String json = get(key);  
        if(json!=null){  
            List<T> list = (List<T>) JSON.parseObject(json, clz);  
            return list;  
        }  
        return null;  
    }  
  
    @Override  
    public long lpush(final String key, Object obj) {  
        final String value = JSON.toJSONString(obj);  
        long result = redisTemplate.execute(new RedisCallback<Long>() {  
            @Override  
            public Long doInRedis(RedisConnection connection) throws DataAccessException {  
                RedisSerializer<String> serializer = redisTemplate.getStringSerializer();  
                long count = connection.lPush(serializer.serialize(key), serializer.serialize(value));  
                return count;  
            }  
        });  
        return result;  
    }  
  
    @Override  
    public long rpush(final String key, Object obj) {  
        final String value = JSON.toJSONString(obj);  
        long result = redisTemplate.execute(new RedisCallback<Long>() {  
            @Override  
            public Long doInRedis(RedisConnection connection) throws DataAccessException {  
                RedisSerializer<String> serializer = redisTemplate.getStringSerializer();  
                long count = connection.rPush(serializer.serialize(key), serializer.serialize(value));  
                return count;  
            }  
        });  
        return result;  
    }  
  
    @Override  
    public String lpop(final String key) {  
        String result = redisTemplate.execute(new RedisCallback<String>() {  
            @Override  
            public String doInRedis(RedisConnection connection) throws DataAccessException {  
                RedisSerializer<String> serializer = redisTemplate.getStringSerializer();  
                byte[] res =  connection.lPop(serializer.serialize(key));  
                return serializer.deserialize(res);  
            }  
        });  
        return result;  
    }  
  
}  



//用于Redis的对象需要序列化

package com.cxb.model;


import java.io.Serializable;
import java.util.Date;


import com.alibaba.fastjson.annotation.JSONField;


public class User implements Serializable{
/**

*/
private static final long serialVersionUID = 1L;
private String userId;
private String userName;
@JSONField(format="yyyy-MM-dd HH:mm:ss")
private Date createDate;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
public User(String userId, String userName, Date createDate) {
super();
this.userId = userId;
this.userName = userName;
this.createDate = createDate;
}
public User() {
super();
}

}


RedisObjectSerializer:

package com.cxb.model;


import org.springframework.core.convert.converter.Converter;
import org.springframework.core.serializer.support.DeserializingConverter;
import org.springframework.core.serializer.support.SerializingConverter;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.SerializationException;


public class RedisObjectSerializer implements RedisSerializer<Object> {
  
  private Converter<Object, byte[]> serializer = (Converter<Object, byte[]>) new SerializingConverter();
  private Converter<byte[], Object> deserializer = (Converter<byte[], Object>) new DeserializingConverter();


  static final byte[] EMPTY_ARRAY = new byte[0];


  public Object deserialize(byte[] bytes) {
    if (isEmpty(bytes)) {
      return null;
    }


    try {
      return deserializer.convert(bytes);
    } catch (Exception ex) {
      throw new SerializationException("Cannot deserialize", ex);
    }
  }


  public byte[] serialize(Object object) {
    if (object == null) {
      return EMPTY_ARRAY;
    }


    try {
      return serializer.convert(object);
    } catch (Exception ex) {
      return EMPTY_ARRAY;
    }
  }


  private boolean isEmpty(byte[] data) {
    return (data == null || data.length == 0);
  }

}



RedisController:

package com.cxb.controller.Redis;


import java.util.Date;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;


import com.cxb.model.User;
import com.cxb.service.IRedisService;


@RestController
@RequestMapping("/redis")
public class RedisController {


    @Autowired  
    private IRedisService redisService;  


    //http://localhost:8888/helloSpringBoot/redis/set?key=msm&value=mm
    @RequestMapping("/set")  
    public boolean redisSet(@RequestParam("key")String key, @RequestParam("value")String value){  
        boolean isOk = redisService.set(key, value);  
        return isOk;  
    }  
      
    // http://localhost:8888/helloSpringBoot/redis/get?key=cxb
    @RequestMapping("/get")  
    public String redisGet(String key){  
        String name = redisService.get(key);  
        return name;  
    }  


    @RequestMapping("/hello")
public String hello() {
return "Hello Rdeis !";
}
    
  //保存对象
    @Autowired
    private RedisTemplate<Object, User> redisTemplate;


    @RequestMapping("/test1")
    public String test1() throws Exception {
        // 保存对象
        User user = new User("1","超人", new Date());
        redisTemplate.opsForValue().set(user.getUserName(), user);


        user = new User("2","蝙蝠侠", new Date());
        redisTemplate.opsForValue().set(user.getUserName(), user);


        user = new User("3","蜘蛛侠", new Date());
        redisTemplate.opsForValue().set(user.getUserName(), user);
        return "保存对象成功!";
    }
}




猜你喜欢

转载自blog.csdn.net/qq_33371766/article/details/80523401