redis
keys: redis> keys product
- view_product
- view_product_index
- view_product_category_{categoryId}_index
- productImage_index
ElasticSearch
indexName: ehaitao
typeName: view_product
id: {productId}
目的
完成一下目的:- 获取商品速度快
- 基于时间戳获取商品,主要是为客户端提供服务,即在手机上浏览商品的向上或者向下的滑动,传到后台一个时间戳和接受的页面大小,然后后台返回数据
- 基于列别和时间戳获取商品
- 基于商品名称、类别、描述、价格等筛选条件,且基于时间戳的商品搜索
详细设计说明
商品缓存
商品缓存包含:keys | 存储类型 | 说明 |
view_product_index | SortedSet | 基于时间戳的商品索引 |
view_product | hash | 商品信息 |
view_product_category_{categoryId}_index | SortedSet | 基于类别存储的商品索引 |
相关命令:
#zadd keyname socre memeber #添加单个商品索引
zadd view_product {actionTime} {productId}
zadd view_product_category_{categoryId}_index {actionTime} {productId}
#hset field value #添加单个商品信息
hset {productId} {productJsonString}
#hget field value #获取一个商品信息
hget {productId}
#hmget field [field ...] #一次获取多个商品信息
hmget {productId} {productId} {productId} {productId}
解释:
{actionTime}:商品的更新时间 {productId}:商品的id {categoryId}: 商品类别id {productJsonString}:商品详细json字符串
e.g:将商品下列商品存入/更新到缓存
productId | categoryId | name | actionTime | content |
2 | 1 | 商品1 | 1418698459001 | 这是商品1的json字符串 |
3 | 2 | 商品2 | 1418698459002 | 这是商品2的json字符串 |
5 | 1 | 商品3 | 1418698459003 | 这是商品3的json字符串 |
zadd view_product_index 1418698459001 1
zadd view_product_index 1418698459002 2
zadd view_product_index 1418698459003 3
zddd view_product_category_1_index 1418698459001 1
zddd view_product_category_1_index 1418698459003 3
zddd view_product_category_2_index 1418698459002 2
hset view_product 1 "这是商品1的json字符串"
hset view_product 2 "这是商品2的json字符串"
hset view_product 3 "这是商品3的json字符串"
#ElasticSearch
curl -XPUT 'http://localhost:9200/ehaitao/view_product/1' -d "这是商品1的json字符串"
curl -XPUT 'http://localhost:9200/ehaitao/view_product/2' -d "这是商品2的json字符串"
curl -XPUT 'http://localhost:9200/ehaitao/view_product/3' -d "这是商品3的json字符串"
图片信息缓存
图片信息缓存包含:keys | 存储类型 | 说明 |
productImage_index | SortedSet | 基于时间戳的图片信息 |
#zadd keyname socre memeber #添加单个图片信息
zadd view_product {productId} {producImageJsonString}
解释:
{producImageJsonString}:商品图片详情json字符串
实例应用
手机端刷新商品
页面大小:8
时间戳:timestamp
向上刷新:
#ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] 按 score 值递增(从小到大)次序排列
#zrangebyScore view_product fromScore endSocre
#zrangebyScore view_product fromTime endTime
#zrangebyScore key min max offset count
zrangebyScore view_product timestamp Ineger.MAX 0 8
向下刷新:
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count] 按 score 值递减(从大到小)的次序排列
#ZREVRANGEBYSCORE view_product fromScore endSocre
#ZREVRANGEBYSCORE view_product fromTime endTime
#ZREVRANGEBYSCORE key min max offset count
ZREVRANGEBYSCORE view_product timestamp 0 0 8
=======================================================================================
h2. 附录
- redis->Hash http://redis.readthedocs.org/en/latest/hash/index.html
- redis->SortedSet http://redis.readthedocs.org/en/latest/sorted_set/index.html
- Elasticsearch http://www.elasticsearch.org/guide/