MST

星途 面试题库

面试题:Redis GET选项在复杂数据关联获取中的应用

在一个电商场景中,Redis存储了商品信息(键为product:商品ID,值为商品详情JSON字符串),以及商品分类信息(键为category:分类ID,值为分类下商品ID列表的JSON字符串)。要求实现根据商品分类ID获取该分类下所有商品的名称(假设商品详情JSON字符串中有'name'字段表示商品名称),请详细说明实现思路,包括如何使用GET选项及相关数据结构操作,并且给出关键的代码片段(可以使用任何你熟悉的支持Redis操作的编程语言)。
19.3万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 获取分类下商品ID列表:使用Redis的GET命令,根据分类ID对应的键category:{分类ID}获取分类下商品ID列表的JSON字符串。
  2. 解析JSON字符串:将获取到的JSON字符串解析为编程语言中的列表数据结构,以便后续遍历操作。
  3. 遍历商品ID列表获取商品详情:对解析后的商品ID列表进行遍历,对于每个商品ID,使用Redis的GET命令,根据键product:{商品ID}获取商品详情的JSON字符串。
  4. 解析商品详情获取商品名称:将商品详情的JSON字符串解析为编程语言中的字典或对象数据结构,从中提取出name字段的值,即商品名称。
  5. 收集商品名称:将提取出的商品名称收集到一个新的列表或其他合适的数据结构中。

关键代码片段(Python示例)

import redis
import json

# 连接Redis
r = redis.Redis(host='localhost', port=6379, db=0)

def get_product_names_by_category(category_id):
    # 获取分类下商品ID列表的JSON字符串
    product_ids_json = r.get(f'category:{category_id}')
    if not product_ids_json:
        return []

    # 解析JSON字符串为列表
    product_ids = json.loads(product_ids_json)

    product_names = []
    for product_id in product_ids:
        # 获取商品详情的JSON字符串
        product_json = r.get(f'product:{product_id}')
        if product_json:
            # 解析商品详情JSON字符串为字典
            product = json.loads(product_json)
            # 提取商品名称
            product_name = product.get('name')
            if product_name:
                product_names.append(product_name)

    return product_names

你可以通过调用get_product_names_by_category(category_id)函数来获取指定分类下所有商品的名称,其中category_id为具体的分类ID。