@@ -65,11 +65,13 @@ def clearSession(conn):
6565 end_index = min (size - LIMIT , 100 )
6666 tokens = conn .zrange ('recent:' , 0 , end_index - 1 )
6767
68+ # 将要删除的key都推入到数组中,要时候一起删除
6869 session_keys = []
6970 for token in tokens :
7071 session_keys .append ('viewed:' + token )
72+ session_keys .append ('cart:' + token )
7173
72- # 批量删除相应的用户最近浏览商品有序集合,登录令牌与用户映射关系的散列和记录最近登录用户的有序集合
74+ # 批量删除相应的用户最近浏览商品有序集合,用户的购物车, 登录令牌与用户映射关系的散列和记录最近登录用户的有序集合
7375 conn .delete (* session_key )
7476 conn .hdel ('login:' , * tokens )
7577 conn .zrem ('recent:' , * tokens )
@@ -78,6 +80,10 @@ def clearSession(conn):
7880对购物车进行更新,如果用户订购某件商品数量大于0,将商品信息添加到 “用户的购物车散列”中,如果购买商品已经存在,那么更新购买数量
7981
8082@param {object}
83+ @param {string} session
84+ @param {string} item
85+ @param {float} count
86+
8187"""
8288def addToCart (conn , session , item , count ):
8389 if count <= 0 :
@@ -86,4 +92,30 @@ def addToCart(conn, session, item, count):
8692 else :
8793 # 将指定商品添加到对应的购物车中
8894 conn .hset ('cart:' + session , item , count )
95+
96+ """
97+ 在用户请求页面时,对于不能被缓存的请求,直接生成并返回页面,
98+ 对于可以被缓存的请求,先从缓存取出缓存页面,如果缓存页面不存在,那么会生成页面并将其缓存在Redis,最后将页面返回给函数调用者。
99+
100+ @param {object} conn
101+ @param {string} request
102+ @param {callback}
103+
104+ @return
105+ """
106+ def cacheRequest (conn , request , callback ):
107+ # 判断请求是否能被缓存,不能的话直接调用回调函数
108+ if not canCache (request ):
109+ return callback (request )
110+
111+ # 将请求转换为一个简单的字符串健,方便之后进行查找
112+ page_key = 'cache:' + hash_request (request )
113+ content = conn .get (page_key )
114+
115+ # 没有缓存的页面,调用回调函数生成页面,并缓存到redis中
116+ if not content :
117+ content = callback (request )
118+ conn .setex (page_key , content , 300 )
119+
120+ return content
89121
0 commit comments