Redis的二八定律
常用命令:
package com.itheima.store.service.impl; import java.sql.SQLException;
import java.util.List; import com.itheima.store.dao.CategoryDao;
import com.itheima.store.dao.impl.CategoryDaoImpl;
import com.itheima.store.domain.Category; /**
* 分类模块:业务层的实现类。
* */ import com.itheima.store.service.CategoryService;
import com.itheima.store.utils.BeanFactory;
import com.itheima.store.utils.DBUtil;
import com.itheima.store.utils.JedisUtils; import net.sf.json.JSONArray;
import redis.clients.jedis.Jedis; @SuppressWarnings("all")
public class CategoryServiceImpl implements CategoryService { // @Override
// 异步加载查询所有分类的方法:
public List<Category> findAllCategory() throws Exception {
// CategoryDao dao = new CategoryDaoImpl();
CategoryDao dao = (CategoryDao) BeanFactory.getBean("CategoryDao");
return dao.findAllCategory();
} @Override
// 缓存技术查询所有分类的方法:
/*
* 为了提升程序的性能,在这里将加入缓存的技术(redis),将获取到的分类数据放进缓存中,当用户下次再访问时,直接从缓存中获取数据,从而
* 减少了和数据库的交互。
*/
public String findAllCategoryAjax() throws Exception {
// 创建jedis对象
Jedis jedis = null;
try {
// 获得jedis对象
jedis = JedisUtils.getJedis();
// 首先获取缓存中是否已经有分类数据
String categoryList = jedis.get("category_list");
if (categoryList == null) {
// 说明缓存中没有数据,则去数据库查询
System.out.println("---------数据库中的数据-----------");
// CategoryDao dao = new CategoryDaoImpl();
CategoryDao dao = (CategoryDao) BeanFactory.getBean("CategoryDao");
List<Category> list = dao.findAllCategory();
// 将list转成JSON格式的数据
JSONArray json = JSONArray.fromObject(list);
// 将JSON数据放进缓存中,并将查询到的数据返回给页面
jedis.set("category_list", json.toString());
return jedis.get("category_list");
} else {
// 如果缓存已经有数据,则将缓存中的数据返回给页面
System.out.println("--------------缓存中的数据-----------------");
return categoryList;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JedisUtils.closeJedis(jedis);
}
return null;
} @Override
// 添加分类:
public void addCategory(Category category) throws Exception {
CategoryDao dao = (CategoryDao) BeanFactory.getBean("CategoryDao");
dao.addCategory(category);
// 注意:在修改了category表后,因为缓存中的数据还没有更新,前台页面的数据也没有更新,所以一旦改变了缓存中的数据后记得将缓存清空
// 清空缓存:
Jedis jedis = null;
try {
jedis = JedisUtils.getJedis();
// 删除存放分类数据的key
jedis.del("category_list");
} catch (Exception e) {
e.printStackTrace();
} finally {
JedisUtils.closeJedis(jedis);
}
} @Override
// 根据cid查询分类数据:
public Category findByCid(String cid) throws Exception {
CategoryDao dao = (CategoryDao) BeanFactory.getBean("CategoryDao");
Category category = dao.findByCid(cid);
return category;
} @Override
// 编辑分类数据:
public void editCategory(Category category) throws Exception {
CategoryDao dao = (CategoryDao) BeanFactory.getBean("CategoryDao");
dao.editCategory(category);
// 清空缓存:
Jedis jedis = null;
try {
jedis = JedisUtils.getJedis();
// 删除存放分类数据的key
jedis.del("category_list");
} catch (Exception e) {
e.printStackTrace();
} finally {
JedisUtils.closeJedis(jedis);
}
} @Override
//删除分类数据:
/**
* 注意:因为分类表和商品表有着外检约束的关系,所以在删除分类数据之前,
* 要先删除该分类所关联的所有商品数据或将该分类所关联的所有商品的外键改变,则牵扯到事务。
* */
public void deleteCategory(String cid) throws Exception {
Jedis jedis = null;
try {
//开启事务:
DBUtil.startTransaction();
CategoryDao dao = (CategoryDao) BeanFactory.getBean("CategoryDao");
//首先根据当前cid修改商品表中的外键为null:
dao.updateByCid(cid);
dao.deleteCategory(cid);
//提交事务:
DBUtil.commit();
// 清空缓存:
jedis = JedisUtils.getJedis();
// 删除存放分类数据的key
jedis.del("category_list");
} catch (Exception e) {
//回滚事务:
DBUtil.rollBack();
e.printStackTrace();
} finally {
JedisUtils.closeJedis(jedis);
}
} }
Redis的二八定律的更多相关文章
- 二八定律全面分析SEO全过程
首先,大体的了解SEO的整个流程,SEO的整个流程无非是:关键词选定.标题标签描述的正确描写---内部优化----外链----内容---友情链接---更新. 在SEO界流行这样一句话:“内容为王,外链 ...
- 【OO课下讨论】bug中的“二八定律”
bug中的"二八定律" 本文主要为讨论2020/3/17下午OO课讨论的第三个思考题设立 有一个经典的经验性原则,叫帕累托原则,也称为二八定律.这个原则在经济.社会和科技等多个领域 ...
- 为什么说Redis是单线程的以及Redis为什么这么快!(转)
文章转自https://blog.csdn.net/chenyao1994/article/details/79491337 一.前言 近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到 ...
- 单线程Redis性能为何如此之高?
文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 实际项目开发中现在无法逃避的一个问题就是缓存问题,而缓存问题也是面试必问知识点之一,如果面试官好一点可能会简单 ...
- 《为什么说Redis是单线程的以及Redis为什么这么快!》
为什么说Redis是单线程的以及Redis为什么这么快! 一.前言 近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到什么是“二八定律”.什么是“热数据和冷数据”,复杂一点的会问到缓 ...
- 为什么说Redis是单线程的?
一.前言 近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到什么是“二八定律”.什么是“热数据和冷数据” ,复杂一点的会问到缓存雪崩.缓存穿透.缓存预热.缓存更新.缓存降级等问题,这些看 ...
- 为什么说Redis是单线程的以及Redis为什么这么块
一.前言 近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到什么是“二八定律”.什么是“热数据和冷数据”,复杂一点的会问到缓存雪崩.缓存穿透.缓存预热.缓存更新.缓存降级等问题,这些看似 ...
- 为什么说Redis是单线程的以及Redis为什么这么快!(转)
一.前言 近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到什么是“二八定律”.什么是“热数据和冷数据”,复杂一点的会问到缓存雪崩.缓存穿透.缓存预热.缓存更新.缓存降级等问题,这些看似 ...
- SEO之巴莱多定律
SEO这个词在2007.2008年好像特别的火,尤其在2007年下半年至今,众多SEO爱好者发起了最大的一轮搜索引擎优化研究风暴,甚至最终逼迫百度等大型搜索引擎公司改变算法. SEO,确实能带来一些经 ...
随机推荐
- tp框架里的 删改
//显示主页面 <table width="> <tr> <td>代号</td> <td>名称</td> <td ...
- Lambda表达式例子
转 Lambda表达式例子 1.Java8 新特性介绍 写java的同学对java8肯定知道 那么java8到底有哪些特性呢,总结如下: Lambda表达式 函数式接口 Stream Optional ...
- IOS开发-ObjC-NSDictionary
OC中Foundation框架中有字典类,字典分不可变字典(NSDictionary)和可变字典(NSMutableDictionary),它们的使用如下: 不可变字典: //------------ ...
- SQLite高级:一库建多表,封装类
package eoe.database; import android.content.Context; import android.database.sqlite.SQLiteDatabase; ...
- 子窗口url调整导致父窗口刷新
2014年3月19日 10:22:38 如题: 在弹窗里搜索时,url发生改变,导致父窗口的div消失.为何? 之前的逻辑是隐藏div 现在修改为插入节点 .可是还是刷新字窗口后,父窗口里面的div节 ...
- jquery中html()或text()方法获取或设置p标签的值
html()方法可以用来读取或者设置某个元素中的HTML内容,text()方法可以用来读取或者没置某个元素中的文本内容 html()方法 此方法类似于JavaScript中的innerHTML属性,可 ...
- 10 Python+Selenium键盘事件
[环境信息] python3.6+selenium3.0.2+Firefox50.0+win7 [操作方法] 导入方法:from selenium.webdriver.common.keys impo ...
- xdebug.var_display_max_data
Xdebug Display Full Details on var_dump() Xdebug is an excellent addition to a PHP developers arsena ...
- JavaScript定时机制、以及浏览器渲染机制 浅谈
昨晚,朋友拿了一道题问我: a.onclick = function(){ setTimeout(function() { //do something ... },0); }; JavaScript ...
- HibernateSessionFactory类中Session对象的创建步骤
HibernateSessionFactory类中Session对象的创建步骤: 1.初始化Hibernate配置管理类Configuration 2.通过Configuration类实例创建Sess ...