0
点赞
收藏
分享

微信扫一扫

修改CRM项目使用Redis缓存

_鱼与渔_ 2022-02-24 阅读 55


  1. 增加依赖

前缀

xmlns:p=“​​​​http://www.springframework.org/schema/p​​​​”

<!-- 连接池配置 -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<!-- 最大连接数 -->
<property name="maxTotal" value="1024" />
<!-- 最大 空闲连接数 -->
<property name="maxIdle" value="200" />
<!-- 获取连接时最大等待毫秒数 -->
<property name="maxWaitMillis" value="10000" />
<!-- 在获取连接时检查有效性 -->
<property name="testOnBorrow" value="true" />
</bean>


<!-- 客户端连接工厂 -->
<bean id="jedisConnFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
p:use-pool="true" p:host-name="192.168.1.112" p:port="6379" p:password="123456" >
<!-- 连接池引用 -->
<constructor-arg name="poolConfig" ref="jedisPoolConfig" />
</bean>


<!-- redisTemplate 配置 -->
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" p:connection-factory-ref="jedisConnFactory" >
<!-- 配置序列化操作 -->
<property name="keySerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
<property name="valueSerializer">
<bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
</property>
<property name="hashKeySerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
<property name="hashValueSerializer">
<bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
</property>
</bean>

使用RedisUtil

package com.shsxt.crm.utils;

import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;

import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;

@Component
@SuppressWarnings("all")
public class RedisUtils {
private RedisTemplate<String,Object> redisTemplate;
private ValueOperations<String, Object> valueOperations;
private ListOperations<String, Object> listOperations;
private HashOperations<String, String, Object> hashOperations;
public RedisUtils(RedisTemplate<String, Object> redisTemplate) {
this.redisTemplate = redisTemplate;
valueOperations=this.redisTemplate.opsForValue();
listOperations=this.redisTemplate.opsForList();
hashOperations=this.redisTemplate.opsForHash();
}
public void setString(String key,Object value){
valueOperations.set(key, value);
}
public void setStringExpires(String key,Object value,Long time){
valueOperations.set(key, value, time, TimeUnit.MINUTES);
}

public Object getString(String key){
return valueOperations.get(key);
}

public void clearKeyByPattern(String pattern){
Set<String> keys= redisTemplate.keys(pattern);
if(!CollectionUtils.isEmpty(keys)){
redisTemplate.delete(keys);
}
}

public void delKey(String key){
if(redisTemplate.hasKey(key)){
redisTemplate.delete(key);
}
}

public void setList(String key,List list){
if(!CollectionUtils.isEmpty(list)){
for(Object t:list){
listOperations.rightPush(key, t);
}
}
}

public List<Object> getList(String key){
List<Object> list=null;
if(redisTemplate.hasKey(key)){
list=listOperations.range(key, 0, -1);
}
return list;
}

public void setHash(String key,String field,Object t){
hashOperations.put(key, field, t);
}

public void setHashAll(String key,Map<String, Object> map){
hashOperations.putAll(key, map);
}

public Object getHash(String key,String field){
return hashOperations.get(key, field);
}

public List<Object> getMultiHash(String key,List fields){
return hashOperations.multiGet(key, fields);
}

public Map getHashMap(String key){
return hashOperations.entries(key);
}
}

注入

@Resource
private RedisUtils redisUtils;
//更新的分页操作
public Map<String,Object> queryForPage(UserQuery baseQuery) throws DataAccessException {

//把查询条件作为key
Map<String,Object> map2 = new HashMap<>();
String totalKey="users:userName:"+baseQuery.getUserName()+":email:"+baseQuery.getEmail() +":phone:"+baseQuery.getPhone();
String queryKey=totalKey+":pageNum:"+baseQuery.getPageNum()+":pageSize:"+baseQuery.getPageSize();
System.out.println(queryKey);

//先从缓存中查询是否有缓存数据,有就直接返回
List users = redisUtils.getList(queryKey);
if (!CollectionUtils.isEmpty(users)){
System.out.println("==============USER REDIS CACHE============");

map2.put("rows",users);
map2.put("total",redisUtils.getString(totalKey));
return map2;
}

/********************** - 分页- **************************/
PageHelper.startPage(baseQuery.getPageNum(), baseQuery.getPageSize());
List<UserDto> entities = userMapper.queryByParams(baseQuery);
PageInfo<UserDto> pageInfo = new PageInfo<UserDto>(entities);
/********************** - 分页- **************************/

/********************** - 给easyui的datagrid插件使用- **************************/
Map<String, Object> map = new HashMap<String, Object>();
map.put("total", pageInfo.getTotal());
map.put("rows", pageInfo.getList());
/********************** - 给easyui的datagrid插件使用- **************************/

entities = pageInfo.getList();
/***
* 需要把 1,2,3 变成 [1,2,3]
* */
for (UserDto userDto:entities){
String roleIdsStr = userDto.getRoleIdsStr();
if (null!=roleIdsStr){
String[] roleIdArr = userDto.getRoleIdsStr().split(",");
List<Integer> roleIdList = new ArrayList<>();
for (String roleId:roleIdArr){
roleIdList.add(Integer.valueOf(roleId));
}
userDto.setRoleIds(roleIdList);
}
}
/**
* 把数据库查询出的数据存入缓存
*/
if(!CollectionUtils.isEmpty(pageInfo.getList())){
redisUtils.setString(totalKey, map.get("total"));
redisUtils.setList(queryKey, pageInfo.getList());
}

return map;
}



举报

相关推荐

0 条评论