请写一个PageInfo分页查询带redis缓存的业务逻辑层实现类 ,包含增删改查
时间: 2024-03-17 18:45:15 浏览: 140
好的,以下是一个简单的PageInfo分页查询带redis缓存的业务逻辑层实现类,包含增删改查的示例代码:
```java
@Service
public class PageInfoServiceImpl implements PageInfoService {
private final PageInfoMapper pageInfoMapper;
private final RedisTemplate<String, PageInfo> redisTemplate;
private static final String REDIS_KEY_PREFIX = "pageInfo:";
private static final Long REDIS_EXPIRE_TIME = 60L; // 缓存过期时间,单位为秒
public PageInfoServiceImpl(PageInfoMapper pageInfoMapper, RedisTemplate<String, PageInfo> redisTemplate) {
this.pageInfoMapper = pageInfoMapper;
this.redisTemplate = redisTemplate;
}
@Override
public PageInfo getById(Long id) {
String redisKey = REDIS_KEY_PREFIX + id;
PageInfo pageInfo = redisTemplate.opsForValue().get(redisKey);
if (pageInfo == null) {
pageInfo = pageInfoMapper.getById(id);
if (pageInfo != null) {
redisTemplate.opsForValue().set(redisKey, pageInfo, REDIS_EXPIRE_TIME, TimeUnit.SECONDS);
}
}
return pageInfo;
}
@Override
public void save(PageInfo pageInfo) {
pageInfoMapper.save(pageInfo);
String redisKey = REDIS_KEY_PREFIX + pageInfo.getId();
redisTemplate.opsForValue().set(redisKey, pageInfo, REDIS_EXPIRE_TIME, TimeUnit.SECONDS);
}
@Override
public void update(PageInfo pageInfo) {
pageInfoMapper.update(pageInfo);
String redisKey = REDIS_KEY_PREFIX + pageInfo.getId();
redisTemplate.opsForValue().set(redisKey, pageInfo, REDIS_EXPIRE_TIME, TimeUnit.SECONDS);
}
@Override
public void deleteById(Long id) {
pageInfoMapper.deleteById(id);
String redisKey = REDIS_KEY_PREFIX + id;
redisTemplate.delete(redisKey);
}
@Override
public List<PageInfo> listByPage(Integer pageNum, Integer pageSize) {
PageInfoKey pageInfoKey = new PageInfoKey(pageNum, pageSize);
String redisKey = REDIS_KEY_PREFIX + pageInfoKey.toString();
List<PageInfo> list = redisTemplate.opsForValue().get(redisKey);
if (list == null) {
PageHelper.startPage(pageNum, pageSize);
list = pageInfoMapper.listByPage();
PageInfo pageInfo = new PageInfo(list);
redisTemplate.opsForValue().set(redisKey, list, REDIS_EXPIRE_TIME, TimeUnit.SECONDS);
}
return list;
}
}
```
以上示例代码中,我们使用了Spring的注解@Service将该类声明为业务逻辑层实现类。该类的成员变量包括:
- PageInfoMapper:数据访问层接口,用于与数据库进行交互。
- RedisTemplate<String, PageInfo>:Redis缓存模板,用于与Redis进行交互。
该类实现了PageInfoService接口,包含了增删改查和分页查询的方法。
其中,getById()方法用于根据ID查询PageInfo信息,首先尝试从Redis缓存中获取,如果缓存不存在则从数据库中查询,并将查询结果存入Redis缓存中。save()方法和update()方法用于新增和修改PageInfo信息,保存操作完成后将结果存入Redis缓存中。deleteById()方法用于删除指定ID的PageInfo信息,同时从Redis缓存中删除对应的缓存数据。listByPage()方法用于分页查询PageInfo信息,首先尝试从Redis缓存中获取,如果缓存不存在则从数据库中查询,并将查询结果存入Redis缓存中。
在以上示例代码中,我们使用了PageHelper插件来进行分页查询,并使用了PageInfoKey类作为查询条件的缓存Key。同时,我们还指定了缓存数据的过期时间为60秒。
以上就是一个简单的PageInfo分页查询带redis缓存的业务逻辑层实现类的示例代码。需要注意的是,该示例代码仅供参考,具体实现方式应根据实际需求进行调整。
阅读全文