如何实现通用的Redis增删改查脚本

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.自定义一个查询服务类

  假设我们要查询用户,那么我们只需要这么写:

@Service
public class UserRedisServiceImpl extends BasicDataRedisService<
User>
{

private static String PREFIX = "
henbao:user:"
;


public UserRedisServiceImpl() {
super(PREFIX, User.class);

}
} 4.思考这样写的弊端

  虽然这样写节省了代码量,想要实现的便捷也能够实现,但是总觉得哪里有点不对劲,操作似乎还可以再骚一点。少年,如果你能有这样的想法,那么恭喜你,你对代码有更高的追求。我们现在写了两次类,写常量来表名Redis中的前缀是什么。我们在使用Spring的时候通常不是这样来告诉底层框架这些东西的,我们通常是使用注解吧?故,Redis Repositories 就登场了。

5.各有利弊

如何实现通用的Redis增删改查脚本

  虽然这样写我们很开心,但是有一些开发人员希望redis中存储的内容与db层的Model完全一致,且修改数据库表结构后还会逆向生成覆盖一波……那么请你自己再开发一下,为Spring提交更加强大的代码吧!目前更建议单独有redis层model的使用此方式,当然了,注解扫描该有的问题它都有,大家处理的时候保持耐心即可。



Redis是一个流行的键值存储数据库,它的应用场景广泛。但是,只有使用得当,才能发挥出它的全部优势。本文将介绍如何编写通用的Redis增删改查脚本,以便更好地利用Redis存储数据。
一、基本Redis命令简介
Redis提供了丰富的命令功能,包括string、hash、list、set、zset等基本命令,以及事务、发布订阅、Lua脚本等高级命令。其中,string是最基本的数据类型,可以用来存储字符串、数字等;hash可以用来存储对象,相当于一个小型的Redis内部数据库;list可以用来存储链表等数据结构;set可以用来存储不重复的元素;zset可以用来存储有序集合。
二、Redis增删改查脚本
1. Redis增加脚本
使用Redis的SET命令可以向Redis中添加一个字符串或者数值。如果需要向Redis中添加一个对象,可以使用Redis的HSET命令。如果要向list中添加元素,使用Redis的LPUSH或RPUSH命令,可以分别在列表的左侧或右侧附加新元素。
2. Redis删除脚本
使用Redis的DEL命令可以删除一个键值对。如果要删除一个列表类型的键值对,可以使用LPOP命令或RPOP命令,可以分别删除列表的左侧或右侧的元素。
3. Redis修改脚本
使用Redis的GETSET命令可以同时进行读取和修改操作。可以先使用GET命令读取键值对,然后修改其中的值,最后使用SET命令将修改后的值写回Redis中。
4. Redis查找脚本
使用Redis的STRLEN命令可以查找一个字符串类型值的长度。使用Redis的HGETALL命令可以查找一个哈希类型值的所有字段和值。使用Redis的LRANGE命令可以查找一个列表类型值中指定位置的元素。
三、结论
本文介绍了如何编写通用的Redis增删改查脚本,强调了基本Redis命令的应用。与其他数据库相比,Redis的操作速度更快,对内存的使用更少。因此,虽然Redis的功能相对简单,但它却是一个非常有用的数据库,具有广泛的应用前景。为了更好地使用Redis,我们应该熟悉基本Redis命令,并适时编写相应脚本。