前缀接口
package com.home.miaosha.redis;
public interface Prefix {
public int expireSec();
public String pre();
}
前缀抽象类
package com.home.miaosha.redis;
public abstract class BasePre implements Prefix{
private int expireSec;
private String pre;
public BasePre(String pre){
this(0, pre);
}
public BasePre(int expireSec, String pre) {
this.expireSec = expireSec;
this.pre = pre;
}
@Override
public int expireSec() {//默认0代表永不过期
return expireSec;
}
@Override
public String pre() {
String simpleName = getClass().getSimpleName();
return simpleName+":"+pre;
}
}
前缀的实现类
package com.home.miaosha.redis;
public class UserKey extends BasePre {
private UserKey( String pre) {
super(pre);
}
public static UserKey id = new UserKey("id");
}
完善redis的访问封装
package com.home.miaosha.redis;
import com.alibaba.fastjson.JSON;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Service;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
@Service
public class RedisSer {
@Autowired
JedisPool jedisPool;
public <T> T get(Prefix prefix,String key, Class<T> clazz) {
Jedis je=null;
try {
je = jedisPool.getResource();
String s = je.get(prefix.pre()+key);
T t =stringToBean(s,clazz);
return t;
} finally {
returnToPool(je);
}
}
private <T> T stringToBean(String s,Class<T> clazz) {
if (s == null || s.length() <= 0||clazz==null) {
return null;
}
if (clazz == Integer.class || clazz == int.class) {
return (T) Integer.valueOf(s);
} else if (clazz == String.class) {
return (T) s;
} else if (clazz == Long.class||clazz==long.class) {
return (T) Long.valueOf(s);
}else {
return JSON.toJavaObject(JSON.parseObject(s),clazz);
}
}
public <T> boolean set(Prefix prefix,String key, T value) {
Jedis je=null;
try {
je = jedisPool.getResource();
String str = beanToString(value);
if (str == null || str.length() <= 0) {
return false;
}
int expireSec = prefix.expireSec();
if (expireSec <= 0) {
je.set(prefix.pre()+key, str);
}else {
je.setex(prefix.pre() + key, expireSec, str);
}
return true;
} finally {
returnToPool(je);
}
}
public <T> boolean exists(Prefix prefix,String key) {
Jedis je=null;
try {
je = jedisPool.getResource();
return je.exists(prefix.pre() + key);
} finally {
returnToPool(je);
}
}
public <T> long incr(Prefix prefix,String key) {
Jedis je=null;
try {
je = jedisPool.getResource();
return je.incr(prefix.pre() + key);
} finally {
returnToPool(je);
}
}
public <T> long decr(Prefix prefix,String key) {
Jedis je=null;
try {
je = jedisPool.getResource();
return je.decr(prefix.pre() + key);
} finally {
returnToPool(je);
}
}
private <T> String beanToString(T value) {
if (value == null) {
return null;
}
Class<?> clazz = value.getClass();
if (clazz == Integer.class || clazz == int.class) {
return ""+value;
} else if (clazz == String.class) {
return (String) value;
} else if (clazz == Long.class||clazz==long.class) {
return ""+value;
}else {
return JSON.toJSONString(value);
}
}
private void returnToPool(Jedis jedis) {
if (jedis != null) {
jedis.close();
}
}
}
测试
@GetMapping("/user/redis")
@ResponseBody
public Result<String> value(){
String s = redisSer.get(UserKey.id,"3", String.class);
return Result.success(s);
}
@GetMapping("/user/redis/set")
@ResponseBody
public Result<String> set(){
boolean res = redisSer.set(UserKey.id,"3", "abc");
// System.out.println();
return Result.success(redisSer.get(UserKey.id,"3",String.class));
}