public class JedisUtil {
/** 操作Key的方法 */
public Keys KEYS;
/** 对存储结构为String类型的操作 */
public Strings STRINGS;
/** Redis连接池对象 */
private JedisPool jedisPool;
/**
* 获取redis连接池
*
* @return
*/
public JedisPool getJedisPool() {
return jedisPool;
}
/**
* 设置redis连接池
*
* @return
*/
public void setJedisPool(JedisPoolWriper jedisPoolWriper) {
this.jedisPool = jedisPoolWriper.getJedisPool();
}
/**
* 从jedis连接池中获取获取jedis对象
*
* @return
*/
public Jedis getJedis() {
return jedisPool.getResource();
}
// *** Inner class *//
public class Keys {
/**
* 清空所有key
*/
public String flushAll() {
Jedis jedis = getJedis();
String stata = jedis.flushAll();
jedis.close();
return stata;
}
//其他方法。
为什么这里要用内部类来实现呢,有什么好处呢。。以及这里对于内部类的对象是 public 的访问权限。。这样的访问权限是不是会太大了。这里是什么设计模式么或者面向对象设计原则么~?
如果我这里改成把内部类的对象作为外部类的静态成员好不好呢。。并把外部类的构造方法私有化,变成单例模式。并设置getter 来访问内部成员。
代码如下,我还没测试过QAQ,在学校没有家里的电脑。
public class JedisUtil {
/** 操作Key的方法 */
private static KEYS keysInstance = new Keys();
/** 对存储结构为String类型的操作 */
private static Strings stringsInstance = new Strings();
/** private constructor for singleton**/
private JedisUtil(){
}
/** Redis连接池对象 */
private JedisPool jedisPool;
/**
* 获取redis连接池
*
* @return
*/
public JedisPool getJedisPool() {
return jedisPool;
}
/**
* 设置redis连接池
*
* @return
*/
public void setJedisPool(JedisPoolWriper jedisPoolWriper) {
this.jedisPool = jedisPoolWriper.getJedisPool();
}
/**
* 从jedis连接池中获取获取jedis对象
*
* @return
*/
public Jedis getJedis() {
return jedisPool.getResource();
}
public static KEYS getKeys(){
return keysInstance;
}
public static Strings getStrings(){
return stringsInstance;
}
// *******************************************Keys*******************************************//
private class Keys {
/**
* 清空所有key
*/
public String flushAll() {
Jedis jedis = getJedis();
String stata = jedis.flushAll();
jedis.close();
return stata;
}
/**
* 删除keys对应的记录,可以是多个key
*
* @param String
* ... keys
* @return 删除的记录数
*/
public static long del(String... keys) {
Jedis jedis = getJedis();
long count = jedis.del(keys);
jedis.close();
return count;
}
// etc.
serviceImpl:
Service
public class HeadLineServiceImpl implements HeadLineService {
@Autowired
private HeadLineDao headLineDao;
@Autowired
private JedisUtil jedisUtil;
@Autowired
private JedisUtil.Keys jedisKeys;// 这个好像多余了。
@Autowired
private JedisUtil.Strings jedisStrings;// 这个好像多余了。
private static Logger logger = LoggerFactory.getLogger(HeadLineServiceImpl.class);
@Override
@Transactional
public List<HeadLine> getHeadLineList(HeadLine headLineCondition) {
// 定义redis的key前缀
String key = HLLISTKEY;
// 定义接收对象
List<HeadLine> headLineList = null;
// 定义jackson数据转换操作类
ObjectMapper mapper = new ObjectMapper();
JedisUtil.Keys jedisKeys = jedisUtil.getKEYS();
JedisUtil.Strings jedisStrings = jedisUtil.getString();
// 拼接出redis的key
if (headLineCondition != null && headLineCondition.getEnableStatus() != null) {
key = key + "_" + headLineCondition.getEnableStatus();
}
// 判断key是否存在
if (!jedisKeys.exists(key)) {
// 若不存在,则从数据库里面取出相应数据
headLineList = headLineDao.queryHeadLine(headLineCondition);
不知道这么做是否可以。depedency injection 只要引入util类就可以了吧~?
谢谢老师。如果老师能帮我试试就更好了TAT。。
SSM商铺V1.0,解决毕设痛点;SpringBoot商铺V2.0,满足工作刚需
了解课程