如果只是為了簡單的增刪改查,那麼只需要告訴我是哪個類別要進行序列化反序列化,告訴我key的前綴是什麼,不就行了嘛?至於說過期時間,咱們這次可以先不考慮,如果需要加上過期時間,也不是一件困難的事情,那麼我們稍作思考,使用Java中的泛型,就可以得到下面的基礎類:
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); } }
假設我們要查詢用戶,那麼我們只需要這麼寫:
@Service public class UserRedisServiceImpl extends BasicDataRedisService<User> { private static String PREFIX = "henbao:user:"; public UserRedisServiceImpl() { super(PREFIX, User.class); } }
雖然這樣寫節省了代碼量,想要實現的便捷也能夠實現,但是總覺得哪裡有點不對勁,操作似乎還可以再騷一點。少年,如果你能有這樣的想法,那麼恭喜你,你對程式碼有更高的追求。我們現在寫了兩次類,寫常數來表名Redis中的前綴是什麼。我們在使用Spring的時候通常不是這樣來告訴底層框架這些東西的,我們通常是使用註解吧?故,Redis Repositories
就登場了。
雖然這樣寫我們很開心,但是有一些開發人員希望redis中儲存的內容與db層的Model完全一致,且修改資料庫表結構後還會逆向產生覆蓋一波…那麼請你自己再開發一下,為Spring提交更加強大的程式碼吧!目前更建議單獨有redis層model的使用此方式,當然了,註解掃描該有的問題它都有,大家處理的時候保持耐心即可。
以上是如何實現通用的Redis增刪改查腳本的詳細內容。更多資訊請關注PHP中文網其他相關文章!