redis的hash结构

package com.hmdp.service.impl;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.hmdp.dto.Result;
import com.hmdp.entity.ShopType;
import com.hmdp.mapper.ShopTypeMapper;
import com.hmdp.service.IShopTypeService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
* <p>
* 服务实现类
* </p>
*
* @author 虎哥
* @since 2021-12-22
*/
@Service
public class ShopTypeServiceImpl extends ServiceImpl<ShopTypeMapper, ShopType> implements IShopTypeService {

@Resource
private StringRedisTemplate stringRedisTemplate;

@Override
public Result queryTypeList() {
String key = "shop:all:";
Map<Object, Object> entries = stringRedisTemplate.opsForHash().entries(key);
if (!entries.isEmpty()) {
// 如果Redis中有数据,则直接返回
List<ShopType> list = new ArrayList<>();
for (Map.Entry<Object, Object> entry : entries.entrySet()) {
// 将Map中的值转换为ShopType对象并添加到列表中
list.add(JSONUtil.toBean((String) entry.getValue(), ShopType.class));
}
System.out.println(1111111111);
return Result.ok(list);
} else {
// 如果Redis中没有数据,则进行数据库查询
List<ShopType> sort = query().orderByAsc("sort").list();
if (sort == null || sort.isEmpty()) {
return Result.fail("未查询到数据");
} else {
// 将查询到的数据存入Redis,并返回
Map<String, String> map = new HashMap<>();
for (ShopType shopType : sort) {
map.put(shopType.getId().toString(), JSONUtil.toJsonStr(shopType));
}
stringRedisTemplate.opsForHash().putAll(key, map);
System.out.println(2222222);
return Result.ok(sort);
}
}
}

}
2.

@Override
public Result queryTypeList() {
//获取radis中商户
String shopType=stringRedisTemplate.opsForValue().get("shopType");
if (StrUtil.isNotBlank(shopType)) {
//存在,直接返回
List<ShopType> shopTypes = JSONUtil.toList(shopType, ShopType.class);
return Result.ok(shopTypes);
}
//不存在,从数据库中查询写入redis
List<ShopType> shopTypes = query().orderByAsc("sort").list();
//不存在,返回错误
if (shopTypes == null) {
return Result.fail("分类不存在");
}
//将查询到的信息存入radis
stringRedisTemplate.opsForValue().set("shopType",JSONUtil.toJsonStr(shopTypes));
//返回
return Result.ok(shopTypes);

}


posted @ 2024-04-24 12:05  小趴菜且能喝66  阅读(12)  评论(0)    收藏  举报