黑马Redis实战篇
黑马Redis 黑马点评网:https://www.bilibili.com/video/BV1cr4y1671t/ 笔记参考:https://blog.csdn.net/Ydin00?type=blog 包括: 短信登录:Redis的共享Session应用 商户查询缓存:企业的缓存技巧、缓存雪崩、穿透等问题解决 达人探店(博客):基于List的点赞列表、基于SortedSet的点赞排行榜 优惠券秒杀:Redis的计数器、Lua脚本Redis、分布式锁、Redis的三种消息队列 好友关注:基于Set集合的关注、取关、共同关注、消息推送等功能 附近的商户:Redis的GeoHash应用 用户签到:Redis的BitMap数据统计功能 UV统计:Redis的HyperLogLog的统计功能 项目运行: 1、nginx 2、redis 3、项目8081、8082 4、Mysql Redis在秒杀场景下的应用: 缓存 分布式锁 超卖问题 Lua脚本 Redis消息队列 Redis各数据结构使用点: String: 查询商铺:ShopServiceImpl.queryById H ...
MySQL_12进阶_视图/存储过程/触发器
MySQL 视图/存储过程/触发器 视图介绍 视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。 通俗的讲,视图只保存了查询的SQL逻辑,不保存查询结果。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上。 视图语法 创建视图 1CREATE [OR REPLACE] VIEW 视图名称[(列名列表)] AS SELECT语句 [ WITH [ CASCADED | LOCAL ] CHECK OPTION ] 查询视图 12查看创建视图语句:SHOW CREATE VIEW 视图名称;查看视图数据:SELECT * FROM 视图名称 ...... ; 删除视图 1DROP VIEW [IF EXISTS] 视图名称 [,视图名称] ... 演示实例: {2,6,14}1234567891011121314151617181920212223242526272829303132333435363738--创建视图mysql> create ...
MySQL_09进阶_三种存储引擎
MySQL 存储引擎 MySQL 体系结构 连接层 最上层是一些客户端和链接服务,包含本地sock 通信和大多数基于客户端/服务端工具实现的类似于TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。 服务层 第二层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化,部分内置函数的执行。所有跨存储引擎的功能也在这一层实现,如 过程、函数等。在该层,服务器会解析查询并创建相应的内部解析树,并对其完成相应的优化如确定表的查询的顺序,是否利用索引等,最后生成相应的执行操作。如果是select语句,服务器还会查询内部的缓存,如果缓存空间足够大,这样在解决大量读操作的环境中能够很好的提升系统的性能。 引擎层 存储引擎层, 存储引擎真正的负责了MySQL中数据的存储和提取,服务器通过API和存储引擎进行通信。不同的存储引擎具有不同的功能,这样我们可以根据自己的需要,来选 ...
Java线程补充(创建与通信)
创建线程的5种方法 1、继承Thread类 123456789101112public class createthread { static class Mythread extends Thread{ @Override public void run() { System.out.println("线程创建的第一种方法"); } } public static void main(String[] args) { new Mythread().start(); }} 2、实现Runnable接口 1234567891011public class createthread implements Runnable{ @Override public void run() { System.out.println("线程创建的第 ...
MySQL_08基础_视图与管理
MySQL 视图与管理 视图(view) 看需求 基本概念 视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含列,其数据来自对应的真实表(基表) 视图和基表关系的示意图 视图的基本使用 create view视图名as select语句 alter view视图名as select语句 --更新成新的视图 SHOW CREATE VIEW 视图名 drop view视图名1,视图名2 1234567891011121314151617181920-- 视图的使用-- 创建一个视图 emp_view01,只能查询emp表的(emp、ename、job和deptno)信息-- 创建视图CREATE VIEW emp_view01 AS SELECT empno,ename,job,deptno FROM emp; -- 查看视图DESC emp_view01SELECT * FROM emp_view01SELECT empno,job FROM emp_view01;-- 查看创建视图的指令SHOW CREATE VIEW emp_view01-- 删除视图 ...
MySQL_06基础_索引与事务
MySQL 索引与事务 mysql索引(index) 索引快速入门 说起提高数据库性能,索引是最物美价廉的东西了。不用加内存,不用改程序,不用调sql,查询速度就可能提高百倍干倍。 没有建立索引的字段,查询起来依旧很慢 索引的原理 没有索引为什么会慢?因为全表扫描. 使用索引为什么会快?形成一个索引的数据结构,比如二叉树 索引的代价 磁盘占用 对dml(update delete insert)语句的效率影响, 索引的类型 索引使用 查询索引(三种方式) show index(ex) from table_name; show keys from table_name; desc table_Name; 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889-- 演示mysql的 ...
MySQL_05基础_约束与自增长
MySQL 约束与自增长 mysql约束 基本介绍 约束用于确保数据库的数据满足特定的商业规则。在mysql中,约束包括: not null、unique,primary key,foreign key,和check五种。 primary key(主键)-基本使用 细节说明: primary key不能重复而且不能为null。 一张表最多只能有一个主键,但可以是复合主键主键的指定方式有两种 直接在字段名后指定:字段名primakry key在表定义最后写primary key(列名); 使用desc表名,可以看到primary key的情况. 在实际开发中,每个表往往都会设计一个主键. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455-- 主键使用-- id name emailCREATE TABLE t17( id INT PRIMARY KEY,-- 表示id列是主键 `name` VARCHAR(32), email ...
MySQL_04基础_多表查询
mysql多表查询 问题的引出(重点,难点) 说明 多表查询是指基于两个和两个以上的表查询.在实际应用中,查询单个表可能不能满足你的需求. 多表查询练习 12345678910111213141516171819202122232425262728293031323334353637-- 多表查询-- 显示雇员名,雇员工资及所在部门的名字【笛卡尔积】SELECT * FROM salgradeSELECT * FROM empSELECT * FROM dept/* 分析 1.雇员名,雇员工资 来自 emp表 2.部门的名字,来自dept表 (1)从第一张表中,取出一行和第二张表的每一行进行组合,返回结果[含有两张表的所有列] (2)一共返回的记录数第一张表行数*第二张表的行数 (3)这样多表查询默认处理返回的结果,称为【笛卡尔积】 (4)解决这个多表的关键就是要写出正确的过滤条件 where 3.当我们需要指定显示某个表的列时,需要 表.列名 */SELECT ename,sal,dname,emp.deptno FROM emp,d ...
MySQL_03基础_函数
MySQL-函数 合计/统计函数 count Select count(*) | count(列名) from table_name [WHERE where_definition] 统计一个班级共有多少学生? 统计数学成绩大于90的学生有多少个? 统计总分大于250的人数有多少? count(*)和count(列)的区别 1234567891011121314151617181920212223242526-- 演示mysql的统计函数的使用-- 统计一个班级有多少学生SELECT COUNT(*) FROM student;-- 统计数学成绩大于90的学生有多少个SELECT COUNT(*) FROM student WHERE math>90 -- 统计总分大于250的人数有多少SELECT COUNT(*) FROM student WHERE (chinese+math+english)>250; -- count(*)和count(列)的区别-- 解释:conut(*)返回满足条件记录的总行数-- count(列):统计满足条件的某列有多少个,但是会排除为 ...
MySQL_02基础_CRUD
MySQL-CRUD 数据库 CRUD语句 Insert语句 (添加数据) Update语句 (更新数据) Delete语句 (删除语句) Select语句 (查找语句) Insert 语句 使用 INSERT 语句向表中插入数据 1234567891011121314151617# 练习insert语句-- 创建一张商品表 goods(id int,goods_name varchar(10),price double);-- 添加2条记录CREATE TABLE goods( id INT, goods_name VARCHAR(10), price DOUBLE);-- 添加数据INSERT INTO goods( id,goods_name,price) VALUES(10,'华为手机',2000); INSERT INTO goods(id,goods_name,price) VALUES(20,'苹果手机',3000); SELECT * FROM goods 细节说明 1234567891011121314151617181 ...