redis(hash)使用场景

redis(hash)使用场景

1.‌用户信息存储

java 复制代码
@Service
public class UserInfoService {
    
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    
    /**
     * 保存完整用户信息
     */
    public void saveUserInfo(String userId, Map<String, Object> userInfo) {
        HashOperations<String, String, Object> hashOps = redisTemplate.opsForHash();
        hashOps.putAll("user:" + userId, userInfo);
    }
    
    /**
     * 获取完整用户信息
     */
    public Map<Object, Object> getUserInfo(String userId) {
        HashOperations<String, String, Object> hashOps = redisTemplate.opsForHash();
        return hashOps.entries("user:" + userId);
    }
    
    /**
     * 更新用户单个字段
     */
    public void updateUserField(String userId, String field, Object value) {
        HashOperations<String, String, Object> hashOps = redisTemplate.opsForHash();
        hashOps.put("user:" + userId, field, value);
    }
    
    /**
     * 获取用户特定字段值
     */
    public Object getUserField(String userId, String field) {
        HashOperations<String, String, Object> hashOps = redisTemplate.opsForHash();
        return hashOps.get("user:" + userId, field);
    }
    
    /**
     * 删除用户特定字段
     */
    public void deleteUserField(String userId, String field) {
        HashOperations<String, String, Object> hashOps = redisTemplate.opsForHash();
        hashOps.delete("user:" + userId, field);
    }
    
    /**
     * 检查用户字段是否存在
     */
    public boolean hasUserField(String userId, String field) {
        HashOperations<String, String, Object> hashOps = redisTemplate.opsForHash();
        return hashOps.hasKey("user:" + userId, field);
    }
    
    /**
     * 获取用户所有字段名
     */
    public Set<Object> getAllUserFields(String userId) {
        HashOperations<String, String, Object> hashOps = redisTemplate.opsForHash();
        return hashOps.keys("user:" + userId);
    }
    
    /**
     * 获取用户字段数量
     */
    public Long getUserFieldCount(String userId) {
        HashOperations<String, String, Object> hashOps = redisTemplate.opsForHash();
        return hashOps.size("user:" + userId);
    }
}

2.商品信息缓存

java 复制代码
@Service
public class ProductCacheService {
    
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    
    /**
     * 缓存商品详细信息
     */
    public void cacheProductInfo(String productId, Map<String, Object> productInfo) {
        redisTemplate.opsForHash().putAll("product:" + productId, productInfo);
        
        // 设置过期时间(24小时)
        redisTemplate.expire("product:" + productId, 24, TimeUnit.HOURS);
    }
    
    /**
     * 获取缓存的商品信息
     */
    public Map<Object, Object> getCachedProductInfo(String productId) {
        return redisTemplate.opsForHash().entries("product:" + productId);
    }
    
    /**
     * 更新商品价格
     */
    public void updateProductPrice(String productId, double price) {
        redisTemplate.opsForHash().put("product:" + productId, "price", price);
    }
    
    /**
     * 更新商品库存
     */
    public void updateProductStock(String productId, int stock) {
        redisTemplate.opsForHash().put("product:" + productId, "stock", stock);
    }
    
    /**
     * 批量更新商品字段
     */
    public void batchUpdateProductFields(String productId, Map<String, Object> updates) {
        HashOperations<String, String, Object> hashOps = redisTemplate.opsForHash();
        hashOps.putAll("product:" + productId, updates);
    }
    
    /**
     * 获取所有商品ID
     */
    public Set<Object> getAllProductIds() {
        return redisTemplate.keys("product:*");
    }
    
    /**
     * 删除商品缓存
     */
    public void deleteProductCache(String productId) {
        redisTemplate.delete("product:" + productId);
    }
}

3.购物车实现

java 复制代码
@Service
public class ShoppingCartService {
    
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    
    /**
     * 添加商品到购物车
     */
    public void addToCart(String userId, String productId, int quantity) {
        String cartKey = "cart:" + userId;
        redisTemplate.opsForHash().put(cartKey, productId, quantity);
    }
    
    /**
     * 从购物车移除商品
     */
    public void removeFromCart(String userId, String productId) {
        String cartKey = "cart:" + userId;
        redisTemplate.opsForHash().delete(cartKey, productId);
    }
    
    /**
     * 更新购物车商品数量
     */
    public void updateCartItemQuantity(String userId, String productId, int quantity) {
        String cartKey = "cart:" + userId;
        redisTemplate.opsForHash().put(cartKey, productId, quantity);
    }
    
    /**
     * 获取购物车所有商品
     */
    public Map<Object, Object> getCartItems(String userId) {
        String cartKey = "cart:" + userId;
        return redisTemplate.opsForHash().entries(cartKey);
    }
    
    /**
     * 清空购物车
     */
    public void clearCart(String userId) {
        String cartKey = "cart:" + userId;
        redisTemplate.delete(cartKey);
    }
    
    /**
     * 获取购物车商品数量
     */
    public Long getCartItemCount(String userId) {
        String cartKey = "cart:" + userId;
        return redisTemplate.opsForHash().size(cartKey);
    }
    
    /**
     * 检查购物车是否包含某商品
     */
    public boolean cartContainsProduct(String userId, String productId) {
        String cartKey = "cart:" + userId;
        return redisTemplate.opsForHash().hasKey(cartKey, productId);
    }
}

4.计数器集合

java 复制代码
@Service
public class CounterService {
    
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    
    /**
     * 原子性增加计数器
     */
    public Long incrementCounter(String key, String field, long delta) {
        return redisTemplate.opsForHash().increment(key, field, delta);
    }
    
    /**
     * 设置计数器初始值
     */
    public void setCounterValue(String key, String field, long value) {
        redisTemplate.opsForHash().put(key, field, value);
    }
    
    /**
     * 获取计数器值
     */
    public Long getCounterValue(String key, String field) {
        Object value = redisTemplate.opsForHash().get(key, field);
        return value != null ? Long.parseLong(value.toString()) : 0;
    }
    
    /**
     * 批量增加多个计数器
     */
    public void batchIncrementCounters(String key, Map<String, Long> increments) {
        HashOperations<String, String, Object> hashOps = redisTemplate.opsForHash();
        for (Map.Entry<String, Long> entry : increments.entrySet()) {
            hashOps.increment(key, entry.getKey(), entry.getValue());
        }
    }
    
    /**
     * 获取所有计数器值
     */
    public Map<Object, Object> getAllCounterValues(String key) {
        return redisTemplate.opsForHash().entries(key);
    }
}

5.配置信息存储

java 复制代码
@Service
public class ConfigService {
    
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    
    /**
     * 保存系统配置
     */
    public void saveConfig(String configKey, Map<String, Object> config) {
        redisTemplate.opsForHash().putAll(configKey, config);
    }
    
    /**
     * 获取配置值
     */
    public Object getConfigValue(String configKey, String field) {
        return redisTemplate.opsForHash().get(configKey, field);
    }
    
    /**
     * 更新配置字段
     */
    public void updateConfigField(String configKey, String field, Object value) {
        redisTemplate.opsForHash().put(configKey, field, value);
    }
    
    /**
     * 删除配置字段
     */
    public void deleteConfigField(String configKey, String field) {
        redisTemplate.opsForHash().delete(configKey, field);
    }
    
    /**
     * 获取所有配置字段
     */
    public Set<Object> getAllConfigFields(String configKey) {
        return redisTemplate.opsForHash().keys(configKey);
    }
    
    /**
     * 检查配置字段是否存在
     */
    public boolean hasConfigField(String configKey, String field) {
        return redisTemplate.opsForHash().hasKey(configKey, field);
    }
    
    /**
     * 批量更新配置
     */
    public void batchUpdateConfig(String configKey, Map<String, Object> updates) {
        HashOperations<String, String, Object> hashOps = redisTemplate.opsForHash();
        hashOps.putAll(configKey, updates);
    }
}

6.批量操作

java 复制代码
@Service
public class BatchOperationService {
    
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    
    /**
     * 批量设置多个字段
     */
    public void batchSetFields(String key, Map<String, Object> fields) {
        HashOperations<String, String, Object> hashOps = redisTemplate.opsForHash();
        hashOps.putAll(key, fields);
    }
    
    /**
     * 批量获取多个字段值
     */
    public Map<String, Object> batchGetFields(String key, Set<String> fields) {
        HashOperations<String, String, Object> hashOps = redisTemplate.opsForHash());
        return hashOps.multiGet(key, fields);
    }
    
    /**
     * 批量删除多个字段
     */
    public void batchDeleteFields(String key, Set<String> fields) {
        HashOperations<String, String, Object> hashOps = redisTemplate.opsForHash());
        for (String field : fields) {
            hashOps.delete(key, field);
        }
    }
    
    /**
     * 批量检查字段存在性
     */
    public Map<String, Boolean> batchCheckFields(String key, Set<String> fields) {
        HashOperations<String, String, Object> hashOps = redisTemplate.opsForHash());
        Map<String, Boolean> results = new HashMap<>();
        for (String field : fields) {
            results.put(field, hashOps.hasKey(key, field);
        }
        return results;
    }
}

‌

相关推荐
129Lab9 分钟前
电池循环测试数据自动化分析:用Python+AI工具构建一键式寿命评估流水线
python·数据分析·电池测试·数据自动化·寿命评估
treasure14010 分钟前
【复古】浅尝Django前后端不分离
前端·css·python·django·bootstrap·html·web
Dmz丶1 小时前
前端转 AI 100 天 Day 44:前端集成实战——用 React 给 Agent 做个正式界面
python
jay神1 小时前
基于 YOLOv8 的手势识别系统(Web 版)
前端·人工智能·python·深度学习·yolo·计算机视觉·计算机毕业设计
DeepVisionary1 小时前
阿里云上线旗舰多模态新模型,不公布跑分且限时14天退役
python·自动化
东莞市云毅网络有限公司1 小时前
FAQ 覆盖度打分:TF-IDF 与向量嵌入双路召回的 Python 实现
python·数据清洗·rag·企业知识库·文档解析
爱笑的k112 小时前
nano-vllm 源码剖析:千行 Python 手写离线推理引擎的调度、显存与并行时序
开发语言·python·vllm
用户8356290780512 小时前
使用 Python 控制 Excel 工作表的分页位置
后端·python
用户8356290780513 小时前
Python 如何在 Word 中添加和管理文档变量
后端·python
用户019027581615 小时前
Dify / Coze 低代码 Agent 怎么接 A 股行情?
python