电商笔记-08(Reids展示品牌名称与价格排序简单算法.PS:特绕)
2017-09-27 18:07
555 查看
分页&排序&关键字搜索的注意点
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; }
相关文章推荐
- 简单排序算法学习笔记-冒泡排序算法详解
- 数据结构学习笔记一:简单排序与查询算法
- 算法导论笔记:08线性排序
- 算法笔记--简单桶排序
- MIT 6.00 1x Lecture 3 - Simple Algorithms 简单算法 学习笔记
- 算法笔记-卡尔曼滤波器简单解释
- 深度学习笔记(二):简单神经网络,后向传播算法及实现
- 算法笔记_221:串的简单处理(Java)
- 【啊哈!算法】算法1:最快最简单的排序——桶排序
- 算法笔记:(一)插入排序:直接插入排序(Straight Insertion Sort)
- 轻松学算法1:最快最简单的排序——桶排序
- 我要写算法(一)—— 最快最简单排序之桶排序
- C++: 7种排序 算法原理展示
- 算法笔记1-排序
- 数据结构&算法学习笔记: 快速排序
- 算法笔记_070:BellmanFord算法简单介绍(Java)
- 【KNN近邻算法】实现识别简单数字验证码(算法原理+代码笔记)
- 算法笔记--直接插入排序
- 简单排序算法:冒泡排序(交换排序)
- 算法精讲学习笔记 排序(一)