redis1具体内容:https://mp.csdn.net/postedit/88673523
redis的shell操作及java操作Redis:https://mp.csdn.net/postedit/88666550
redis2具体操作:https://mp.csdn.net/postedit/88752840
一 总结
1.Nosql
2.数据库的架构演变
3.redis介绍、下载和安装
4.reids的数据类型
5.reids的Shell操作
6.Redis的持久化
7.Redis配置文件
8.Jedis
二 重点
1.说说你对nosql的理解(nosql是什么,说出几个Nosql实现的技术)
Nosql:not only sql ,不仅仅是sql,nosql随着互联网的发展,数据类型多种多样(有文字,图片,视频,音频等等类型的数据),而且数据量非常多,我们要把这些数据我们都要保存下来,原来的数据都是保存在关系型数据库。传统的数据库(关系型数据库,MySql,ORACLE,DB2,Sql Server)无法解决这些问题(数据的存储和高效读取问题),就促进了Nosql的发展,Nosql中存储数据没有固定的格式,而传统数据库存储数据都是二维表的形式。
Nosql实现的技术:Memcach MogoDB Memcache
nosql的特点:里边存储的数据没有关系,所以可以把任何数据都往里塞
2.说说你怎么理解数据库水平拆分和垂直拆分
就是表中的数据量很多,(一张表可能存不下了,这是分表)(或者一个数据库存不下了,这是分库),假如有一张用户表,里边的字段非常多,80个字段,用户页很多,存了90万的用户,这么多数据,数据库的性能肯定会受到影响。
我就以拆分表为例说一下吧。
水平拆分:就是把这一张表(一个库)拆分成多份,把user表可以拆分成三份,第一张表放30万的数据,第二张放20万,第三张放40万的数据
垂直拆分:就是把表中的字段拿出来,可以把不常用的字段取出来放在一张表中,常用的字段再放在另一张表中
3.说说你为什么使用redis,有什么用,redis的优势
redis是一个非关系型数据库(NoSql),存储的数据都是以key-value存放的。可以用作数据存储,缓存,支持五种数据类型: 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets)。
redis的优势是:里边的数据类型很多,可以存储多种类型的数据;支持缓存,支持高效的读取;支持持久化,可以把内存中的数据持久化到磁盘上,reidis在我们做项目时经常用来做缓存,然后redis重启时就可以从该文件中加载数据加载到内存中
4.Redis的五种数据类型
String是Redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value,String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象。
List:单键多值Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。Redis的Set是string类型的无序集合。它底层其实是一个value为null的hash表,所以添加,删除,查找的复杂度都是O(1)。它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。
Redis hash 是一个键值对集合。Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。类似Java里面的Map<String,Object>
Redis有序集合zset与普通集合 set(无序集合) 非常相似,是一个没有重复元素的字符串集合。不同之处是有序集合的每个成员都关联了一个评分(score) ,这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了 。因为元素是有序的, 所以你也可以很快的根据评分(score)或者次序(position)来获取一个范围的元素。访问有序集合的中间元素也是非常快的,因此你能够使用有序集合作为一个没有重复成员的智能列表。
5.redis如何启动,停止
启动服务端:./redis-server [配置文件路径] 默认会到redis安装目录下找redis.conf 文件,当然我们可以自动以文件位置
启动客户端:./redis-cli [-p 端口] [-h IP] [-a 密码],默认自动连接本机端口为6379,redis默认是没有密码的。
关闭服务端:
客户端执行:shutdown
直接杀死该进程:kill -9 进程号
获取进程号:ps -ef | grep redis
关闭客户端:exit/quit
6.说出你经常用的Redis配置
logfile: 日志存放位置 可以修改
daemonize:是否后台运行,默认是不运行
timeout:超时时间
port:端口号,端口号可以修改
bind:绑定ip,后边写的ip才可以连进来
databases:数据库的个数
security安全:访问密码的查看、设置和取消
关于持久化的:
RDB:默认打开的,我们可以修改save,设置落盘时间,每当时间M内改动的键个数大于N时,则触发快照备份。存在多个快照条件时,条件之间是或的关系,也就是说只有一个条件被触发就会执行快照备份
文件存放位置
AOF:默认是关闭的,我们需要到配置文件中打开,将appendonl改为yes开启AOF 。OF会将每次写的操作记录下来,存发到文件中,redis重启之后会将appendonly.aof中的命令全部执行一次
两者都存在优先使用aof
7.Redis的持久化
Redis主要的作用是存储数据,用来做缓存,提高数据的高效查询,缓存的数据是存放在内存中的,那么一旦关机内存中的数据就会丢失,重启之后数据就没有了,而Redis的一大特征就是支持持久化,会将内存中的数据进行落盘,电脑重启之后会从磁盘上读取数据在加载到内存中。 Redis支持RDB和AOF两种持久化策略
落盘:往磁盘上写数据(从内存-----到磁盘),把内存中的数据存到磁盘上,防止重启redis后数据丢失
详情见链接:四 redis的持久化 https://mp.csdn.net/postedit/88752840
8.Jedis的主要对象是什么?
Java操作Redis这个技术叫Jedis
可以在java里操作redis的五大数据类型
9.数据库的架构演变
01单机时代(单个数据库)----》02Memcached(缓存)+Mysql+垂直拆分(Memcached作为一个独立的分布式的缓存服务器,使用缓存技术可以减缓数据库的压力,多台web机器通过文件缓存也可以实现共享,能缓解数据库的读取压力,但不能解决数据库的写入压力)----》03Mysql主从读写分离(使用主从复制技术来达到读写分离,以提高读写性能和读库的可扩展性,解决了数据库写的压力)---》04分表分库+水平拆分+mysql集群(这时MySQL主库的写压力开始出现瓶颈,而数据量的持续猛增,这时候开始流行使用分表分库来缓解写压力和数据增长的扩展问题,MySQL还推出了MySQL Cluster集群,但性能并不是很稳定)---》05MySql的扩展瓶颈(mySQL数据库也经常存储一些大文本字段,导致数据库表非常的大,在做数据库恢复的时候就导致非常的慢,不容易快速恢复数据库。MySQL的扩展性差(需要复杂的技术来实现),大数据下IO(磁盘)压力大,表结构更改困难,正是当前使用MySQL的开发人员面临的问题)--06今天数据库架构的样子:。。。。