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,确实能带来一些经 ...
随机推荐
- UITableView回调和table相关成员方法详解
http://blog.csdn.net/kingsley_cxz/article/details/9123959 1.UITableView的datasource实现: //回调获取每个sectio ...
- iOS开发——Xcode快捷键
1.共用的一些方法 Command + A: 全选Command + C: 复制Command + V: 粘贴Command + X: 剪切Command + Z: 撤销Shift + Command ...
- bzoj-3450 Easy概率DP 【数学期望】
Description 某一天WJMZBMR在打osu~~~但是他太弱逼了,有些地方完全靠运气:(我们来简化一下这个游戏的规则有n次点击要做,成功了就是o,失败了就是x,分数是按comb计算的,连续a ...
- 自己动手做聊天机器人 二十九-重磅:近1GB的三千万聊天语料供出
Reference: http://www.shareditor.com/blogshow/?blogId=112 经过半个月的倾力打造,建设好的聊天语料库包含三千多万条简体中文高质量聊天语料,近1G ...
- [oracle]Oracle角色管理
假如我们直接给每一个用户赋予权限,这将是一个巨大又麻烦的工作,同时也不方便DBA进行管理.通过采用角色,使得: 权限管理更方便.将角色赋予多个用户,实现不同用户相同的授权.如果要修改这些用户的权限,只 ...
- 职业定位(移动端、ios开发、Android开发)
移动端 移动端webapp开发必备知识:http://www.chinaz.com/manage/2012/1128/283974.shtml 设计一款好的移动App,有哪些基本规则?http://w ...
- PHP mysqli连接MySQL数据库
1. 开启PHP的API支持 (1)首先修改您的php.ini的配置文件.查找下面的语句:;extension=php_mysqli.dll将其修改为:extension=php_mysqli.dll ...
- 第十八篇、OC_使用OAStackView FDStackView (第三方框架)可以使用在ios 7及以上的版本
UILabel *view1 = [[UILabel alloc]init]; view1.text = @"Label1"; view1.backgroundColor = [U ...
- C# 常用工具合集
Visual Studio 2013 扩展 Visual Studio 2013 Update 4:是目前微软发布的最新版开发工具升级包,高效而且强大.下面的扩展都是该版本的Visual Studio ...
- 【bzoj4198】 Noi2015—荷马史诗
http://www.lydsy.com/JudgeOnline/problem.php?id=4198 (题目链接) 题意 一篇文章n个单词,每个出现了${w_i}$次,用k进制数代替单词,使得任意 ...