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;
    }
}

相关推荐
幻云20101 天前
Python深度学习:从筑基到登仙
前端·javascript·vue.js·人工智能·python
難釋懷1 天前
SpringDataRedis数据序列化器
redis·缓存
仰望星空@脚踏实地1 天前
本地Python脚本是否存在命令注入风险
python·datakit·命令注入
LOnghas12111 天前
果园环境中道路与树木结构检测的YOLO11-Faster语义分割方法
python
2501_944526421 天前
Flutter for OpenHarmony 万能游戏库App实战 - 蜘蛛纸牌游戏实现
android·java·python·flutter·游戏
飞Link1 天前
【Django】Django的静态文件相关配置与操作
后端·python·django
Ulyanov1 天前
从桌面到云端:构建Web三维战场指挥系统
开发语言·前端·python·tkinter·pyvista·gui开发
43v3rY0unG1 天前
哈希表学习
学习·哈希算法·散列表
CCPC不拿奖不改名1 天前
两种完整的 Git 分支协作流程
大数据·人工智能·git·python·elasticsearch·搜索引擎·自然语言处理
a努力。1 天前
字节Java面试被问:TCP的BBR拥塞控制算法原理
java·开发语言·python·tcp/ip·elasticsearch·面试·职场和发展