redis页⾯缓存html,使⽤redis实现页⾯缓存
本⽂是<>⼀书 第⼆章的读书笔记
设计⽅案 第⼀个域,是zset类型的 ----key是viewed:userSessionid
存放的是商品id与⽤户查看此商品时的timestamp
第⼆个域,是zset类型的 ----可以是viewed:
member是商品id(全局范围内),score是商品被⽤户(全局范围内)浏览的次数(是负数)
第三个域,是hash类型的 ----key是item:itemId
存放的是商品的信息
⽤户查看了某件商品
public void viewItem(Jedis conn, String token, String user, String item) {
long timestamp = System.currentTimeMillis() / 1000;
if (item != null) {
//⽤户user在某时浏览了某件商品
conn.zadd("viewed:" + token, timestamp, item);
//只记录⽤户最近查看的25件商品
conn.zremrangeByRank("viewed:" + token, 0, -26);
//有序set⾥ score的越⼩排名越靠前
conn.zincrby("viewed:", -1, item); //-1还是1?
}
}
试着缓存这个页⾯ ⾸先我们要判断,某个url是否能缓存
/**
*
如果request 不符合规范 就不缓存 返回false
*
如果商品还没有被访问过 ⾃然不能缓存 返回false
*
如果商品被访问过 但是访问的排名在10000之后 也就不缓存了 返回false
*
如果商品被访问过 且访问的排名在10000之内 就说明可以缓存 返回true
*
*
@param conn
*
@param request
*
@return
*/
public boolean canCache(Jedis conn, String request) {
//这样的字符串中获得paramter 代码就不赘述了
Map params = getParams(request);