写一个通用的Redis增删改查吧!
0.起因
在美好的X+Repositories
世界,码农们被大神们提供的便捷的接口所拯救。无论是Mongo
还是ES
,我们都能听到码农们在劳作时咯咯笑的声音。然而,事情每到Redis
这里,就显得各外艰辛,因为它是突破传统的数据库呀!小白看到可以这么操作:SpringBoot集成Redis—使用RedisRepositories还是一脸懵,表示无法理解,今天,就由恒宝带领大家,先写一个我们小白能看懂的基本操作类,然后我们对于这种写法就不会太排斥啦!
1.思考有哪些重复代码?
如果只是为了简单的增删改查,那么只需要告诉我是哪个类要进行序列化反序列化,告诉我key的前缀是什么,不就行了嘛?至于说过期时间,咱们这一次可以先不考虑,如果需要加上过期时间,也不是一件困难的事情,那么我们稍作思考,使用Java中的泛型,就可以得到下面的基础类:
2.基础服务类
public class BasicDataRedisService<T> { /**
* Redis key prefix String
* Redis中的key前缀
*/
private String prefixString;
private Class<T> targetClass;
@Autowired
private StringRedisTemplate redisTemplate;
public BasicDataRedisService(String prefixString, Class targetClass) {
this.prefixString = prefixString;
this.targetClass = targetClass;
}
// -------------------------以下为内部使用---------------------------------
protected String generateKey(String id) {
return prefixString + "id:" + id;
}
protected T getByKey(String key) {
T result = ValueRedisUtil.getRedisObject(redisTemplate, key, targetClass);
return result;
}
protected boolean setByKey(String key, Object object) {
return ValueRedisUtil.setRedisObject(redisTemplate, key, object);
}
protected boolean deleteByKey(String key) {
return ValueRedisUtil.delRedis(redisTemplate, key);
}
// -------------------------以下对外提供---------------------------------
/**
* 根据id获取
*
* @param id
* @return
*/
public T getById(String id) {
String key = generateKey(id);
return getByKey(key);
}
/**
* 根据id刷新
*
* @param data
* @param id
* @return
*/
public boolean setByModel(Object data, String id) {
String key = generateKey(id);
return setByKey(key, data);
}
/**
* 根据id删除
*
* @param id
* @return
*/
public boolean deleteById(String id) {
String key = generateKey(id);
return deleteByKey(key);
}
}
3.自定义一个查询服务类
假设我们要查询用户,那么我们只需要这么写:
@Servicepublic class UserRedisServiceImpl extends BasicDataRedisService<User> {
private static String PREFIX = "henbao:user:";
public FireDeviceRedisServiceImpl() {
super(PREFIX, User.class);
}
}
4.思考这样写的弊端
虽然这样写节省了代码量,想要实现的便捷也能够实现,但是总觉得哪里有点不对劲,操作似乎还可以再骚一点。少年,如果你能有这样的想法,那么恭喜你,你对代码有更高的追求。我们现在写了两次类,写常量来表名Redis中的前缀是什么。我们在使用Spring的时候通常不是这样来告诉底层框架这些东西的,我们通常是使用注解吧?故,Redis Repositories
就登场了。
5.各有利弊
虽然这样写我们很开心,但是有一些开发人员希望redis中存储的内容与db层的Model完全一致,且修改数据库表结构后还会逆向生成覆盖一波……那么请你自己再开发一下,为Spring提交更加强大的代码吧!目前更建议单独有redis层model的使用此方式,当然了,注解扫描该有的问题它都有,大家处理的时候保持耐心即可。
以上是 写一个通用的Redis增删改查吧! 的全部内容, 来源链接: utcz.com/z/516792.html