Mysql and Redis
基础部分
外键: 外键用来关联两个表
索引: 索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录 ,索引可以大大提高mysql的检索速度 ,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。
拿汉语字典的目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排序的目录(索引)快速查找到需要的字。
简单的增删改查
create table `user`(`id` int(11) NOT NULL, `name` varchar(128) NOT NULL ,`age` int(11) NOT NULL,PRIMARY KEY(`id`))ENGINE=InnoDB DEFAULT CHARSET=utf8;
select * from user;
insert into user(name,age) values('aa','22');
update user set user.name =‘aa’;
delete from user where user.name='aa';
在sql结构化查询语句中,like语句有着至关重要的作用
A:% 包含零个或多个字符的任意字符串:
1、like'Mc%' 将搜索以字母 Mc 开头的所有字符串(如 McBadden)。
2、like'%inger' 将搜索以字母 inger 结尾的所有字符串(如 Ringer、Stringer)。
3、like'%en%' 将搜索在任何位置包含字母 en 的所有字符串(如 Bennet、Green、McBadden)
order by 也是经常使用语句一般和desc 、asc一起使用,前者是降序,后者是升序
group by 语句 经常和count、sum avg等函数一起使用
Mysql 连接的使用
内连接(inner join): 获取两个表中字段匹配关系的记录
左连接(left join) : 获取左表所有记录,即使右表没有对应匹配的记录
右连接(right join): 用于获取右表所有记录,即使左表没有对应匹配的记录
InnoDB存储引擎介绍
支持事务,其设计目标主要面向在线事务处理的应用。其特点是行锁设计、支持外键,并支持类似于Oracle的非锁定读,InnoDB存储引擎是默认的存储引擎。
数据放在一个逻辑的表空间中,InnoDB使用多版本并发控制来获得高并发性,使用一种被称为next-key locking的策略来避免幻读现象的产生,插入缓冲、二次写、自适应哈希索引、预读等高性能和高可用的功能。
redis数据结构:string、hash、list、set(无序、不重复)、zset(有序、不重复)
1、String字符串类型
redis最基本的数据类型 key---value 二进制安全,string可以包含任何数据,如数字、字符串、图片或者序列化的对象
使用 :get 、set、del、incr、decr
实战场景: 缓存 ,把常用信息(token、手机验证码)、图片或者视频等信息放到redis,redis作为缓存层,mysql做持久层,降低mysql的读写压力
session spring session +redis 实现session共享
2、Hash(哈希)
其值本身又是一种键值对结构 value={{field1,value1},....}
使用:hset、 hget、 hdel
实战场景:缓存,比string更节省空间,用户信息、视频信息
3、List(链表)
redis 使用双端链表实现的List,有序,value可重复,可以通过下标去除对应的value值,左右两边都能进行插入和删除数据
实战场景:微博的时间轴 有人发布微博,用lpush加入时间轴,展示新的列表信息。
4、Set集合
用来保存多个字符串的元素,不允许重复的元素,集合中元素是无序的,不能通过索引下标来获取数据元素
实战场景:用户标签、点赞、收藏
5、zset集合
集合不能有重复,可排序,给每个元素设置一个分数。作为排序的依据
排行榜,榜单可以按照用户关注数、更新时间等打分,做排行