先簡單介紹一下背景:
XXXX需要開發一套在線收費視頻教育系統,今天寫了個基於redis實現的購物車功能,遇見了不少坑,特意分享出來
添加:
1. 用戶選擇:課程、價格策略,提交 2. 獲取課程、價格策略進行合法性校驗(數據庫查詢) 3. 數據獲取,構造結構: { shopping_car_用戶ID_課程ID:{ title:"...", img:'xxx', policy:{ ... } } } 4. 將數據以字典的形式保存到redis中。
修改:
1. 用戶選擇:課程、價格策略,提交 2. 獲取課程、價格策略進行合法性校驗(redis查詢) 3. 更新價格策略
刪除:
1. 用戶選擇:課程提交 2. 獲取課程合法性校驗(redis查詢) 3. 刪除
查看:
1. 構造Key shopping_car_用戶ID_* 2. scan_iter
添加課程功能具體代碼實現如下:

1 # 1 獲取用戶提交的課程id和價格策略id 2 courses_id = int(request.data.get('courses_id')) 3 print('courses_id---------------',courses_id) 4 policy_id = int(request.data.get('policy_id')) 5 print('policy_id----------------',policy_id) 6 7 # 2 獲取專題課信息 8 course = models.Course.objects.get(id=courses_id) 9 print('course---------------',course) 10 11 # 3 獲取課程相關的所有價格策略 12 price_policy_list = course.price_policy.all() 13 print('price_policy_list---------------',price_policy_list) 14 15 price_policy_dict = {} 16 for item in price_policy_list: 17 price_policy_dict[item.id] ={ 18 "period":item.valid_period, 19 "period_display":item.get_valid_period_display(), 20 "price":item.price 21 } 22 23 # 4 判斷用戶輸入的價格策略是否合法 24 if policy_id not in price_policy_dict: 25 print(111111111111111111) 26 raise PricePolicyInvalid("價格策略不合法") 27 28 # 5 將數據存入redis 29 30 car_key = settings.SHOPPING_CAR_KEY %(request.auth.user_id, courses_id,) 31 print('car_key------------------',car_key) 32 car_dict = { 33 'name':course.name, 34 'course_img':course.course_img, 35 'default_policy':policy_id, 36 'price_policy':json.dumps(price_policy_dict) 37 } 38 self.conn.hmset(car_key, car_dict) 39 ret.code = 1000 40 ret.data = '添加成功'
其他各項功能類似,這里不在贅述,具體的redis操作,請轉至這里