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

相关推荐
子豪-中国机器人2 小时前
Python 生成二维码并操作文件笔记
python
wjykp2 小时前
第七章二 :文件操作
python
BoBoZz192 小时前
ExtractData 椭球的并集与函数的裁剪
python·vtk·图形渲染·图形处理
monster000w2 小时前
容器云2.7pytorch版本安装问题
人工智能·pytorch·python
Cherry的跨界思维2 小时前
19、自动化处理双核心:Java规则引擎与Python Selenium实战全解析
java·开发语言·python·自动化·办公自动化·python办公自动化·python办公
ttthe_MOon2 小时前
Redis 基础原理、持久化、主从复制与哨兵模式
redis
互亿无线明明3 小时前
国际短信通知服务:如何为全球业务构建稳定的跨国消息触达体系?
java·c语言·python·php·objective-c·ruby·composer
2503_930123933 小时前
Redis群集的三种模式详解
数据库·redis·缓存
云和数据.ChenGuang3 小时前
openEuler 上安装与部署 Redis 的完整技术教程
数据库·redis·缓存