您的位置:首页 > 其它

电商笔记-08(Reids展示品牌名称与价格排序简单算法.PS:特绕)

2017-09-27 18:07 489 查看

分页&排序&关键字搜索的注意点

1,用户根据关键字搜索,查询数据,”下一页”链接中要携带条件参数

2,用户根据关键字搜索,查询数据,点击”价格”排序,点击”下一页”链接中要携带条件参数和下一页的排序风格

<注意:下一页的排序方式要和上一页的排序风格一样,不然就会出现,上一页是升序,下一页时降序.所以可以将”记忆排序”放到上一页/下一页链接上>

“价格”排序优化算法分析

keyword : 用户输入的关键字

priceSort :排序方式

sort:后台将反转后的排序规则传送到页面的变量

用户第一次根据关键字查询展示页面时

window.location.href = "/search?keyword=" + $("#keyword").val()+"&priceSort=${sort2}";


后台controller先调用service

第一次为null不会排序

//价格排序  price asc | price desc
if(priceSort != null && !priceSort.equals("")){
solrQuery.addSort(new SortClause(priceSort.split(" ")[0],priceSort.split(" ")[1]));
}


但是执行service回来后

如果关键字为空,或者为降序就将升序规则发送给页面

if(priceSort != null && priceSort.equals("price asc")){
priceSort= "price desc";
}else{
priceSort = "price asc";
}

//将排序顺序,发送到"价格"链接,点击"价格才会生效"
model.addAttribute("sort",priceSort);


当用户点击价格,进行排序时

完成了第一次排序

window.location.href = "/search?keyword=${keyword}&priceSort=${sort}";


用户再次点击

//再次点击价格,就会发生反转
if(priceSort != null && priceSort.equals("price asc")){
priceSort= "price desc";
}else{
priceSort = "price asc";
}

//将排序顺序,发送到价格排序链接,点击"价格才会生效"
model.addAttribute("sort",priceSort);


“记忆功能”

用户第一次根据关键字搜索商品,点击”价格”升序排列之后,又换了别的关键字进行搜索.搜索的结果在没有点击”价格”排序的情况下,依然是以升序排列展示的.只需要在用户每次点击”价格”排序之前记录下排序方式,发送给页面,拼接到”搜索”链接这样用户在每次搜索时,就会按照之前的排序风格,进行排序.

Redis优化品牌显示

为了减少与数据库的交互(减少与mysql的交互),所以就将查询最新的品牌名称存到redis”缓存”中.在这里我只是做了在修改时更新.正式开发时,只要是与品牌相关的操作都要进行更新.

redis与mysql进行品牌数据同步的时间点:

添加品牌的时候,redis同步添加

修改品牌的时候,redis同步修改

删除品牌的时候,redis同步删除

redis配置

<!-- redis 的配置 -->
<bean id = "jedis" class="redis.clients.jedis.Jedis" >
<constructor-arg value="192.168.56.109" index = "0" type="java.lang.String"/>
<constructor-arg value="6379" index="1"/>
</bean>


测试

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class JedisDemo {

@Autowired
private Jedis jedis;

@Test
public void demo01(){
jedis.hsetnx("brand", "1", "meilida");
jedis.hsetnx("brand", "2", "jieante");
jedis.hsetnx("brand", "3", "feige");
}

@Test
public void demo02(){
System.out.println(jedis.hget("brand", "1"));
System.out.println(jedis.hget("brand", "2"));
System.out.println(jedis.hget("brand", "3"));
}
}


同步到redis

// 品牌的修改
@Override
public void update(Brand brand) {

brandDao.update(brand);

// 查询当前id最新的商品信息
Brand findById = brandDao.findById(brand.getId());

// 在用户将更新的品牌信息更新到数据时,redis中同样也要进行同步
jedis.hset("brand", String.valueOf(findById.getId()), findById.getName());

}


前台获取

//前台获取品牌名称和品牌id
@Override
public List<Brand> findBrandName() {

List<Brand> brands = new ArrayList<>();

//获取所有的品牌
Map<String, String> map = jedis.hgetAll("brand");

for (Entry<String, String> entry : map.entrySet()) {

Brand brand = new Brand();
brand.setId(Long.parseLong(entry.getKey()));
brand.setName(entry.getValue());

brands.add(brand);
}
return brands;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  排序算法 电商 分页