redis 非关系型数据库,缓存型数据库
关系型数据库和非关系型数据库的区别:
关系型数据库是一个结构化的数据库,行和列
列:声明对象
行:记录对象的属性
表与表之间是有关联的,使用sql语句来对指定的表,库进行增删改查
在创建表时,我们是设计好了表的结构。按照表结构来存储数据。数据与表结构不匹配,存储数据会失败
非关系型数据库:nosql:not only sql
不需要定义库,也不需要定义表结构,直接记录即可,而且每条记录都可以有不同的数据类型,字段(字段个数)
redis key:value 键值的形式存储。每个键之间没有直接关联,库与库之间相互独立
区别:
1、数据的存储方式不同
2、扩展方式,性能上的提示,关系型数据库靠的是提升本机性能。非关系型数据库,可以横向扩展,加入节点服务器的方式提高性能
3、对事务的支持性,mysql支持事务
原子性
隔离性
一致性
执行性
非关系型数据库也支持事务,redis也可以支持事务,但是其稳定性和处理能力都不如关系型数据库
非关系型数据的主要场景:1、操作的扩展
2、海量数据处理
web2.0:交互
纯动态网站的三高问题:
1、对数据库高并发写的需求
2、对海量数据高效存储与访问的需求
3、对数据库的高可扩展性与高可用性的需求
数据库缓存:
web页面缓存
cpu和硬盘之间缓存
常见的缓存需求场景
关系型数据库:
库-------表-------行,列--------存储数据
非关系型数据库:
库-------集合-------键值对
不需要手动的创建库和集合
redis:开源的,使用c语言编写的一个nql数据库
redis:基于内存运行,支持持久化(数据恢复),采用的就是key-value(键值对)的存储形式,目前在分布式架构中,是非常重要的一环
redis服务器程序,是一个单进程模式,即只有一个主进程工作,也就是说在一台服务器上可以启动多个redis(端口号不能冲突)
redis的实际处理速度是完全依靠主进程的执行效率
服务器只部署了一个redis进程,多个客户端访问,可能会导致redis的处理能力下降
如果部署了多个redis进程,虽然能提高redis并发处理能力,但是会给服务器的cpu带来很大的压力
一台服务器,一般部署三个redis进程(根据情况来看,高并发,要部署多个,一般情况下,单进程足够)
redis的特点:
1、具有极高的读写速度,数据读取每秒110000次,写入数据每秒可以执行81000的写入
2、支持丰富的数据类型
3、支持持久化。平常的数据都是保存在内存中,持久化可以写入磁盘中,既可以保存到本地,也可以实现备份
4、原子性,所有的操作都是原子性
5、支持主从模式----master-slave模式
面试题:
redis为什么这么快?
1、redis是纯内存结构,避免磁盘I/O的耗时
2、核心模块是一个单进程,减少了线程切换和回收线程的时间
3、I/O的多路复用机制,每一个执行线路,都可以同时执行读和写,高并发的效率大大提高
*特殊说明:redis的读写仍然是单进程处理
编译安装redis实验:
setenforce 0
systemctl stop firewalld
将安装包redis-5.0.7.tar.gz拖到opt目录下
安装环境:yum install -y gcc gcc-c++ make
解压tar -xf redis-5.0.7.tar.gz
cd redis-5.0.7/
make -j 4
make PREFIX=/usr/local/redis install
cd utils/
./install_server.sh
四个回车,第五个输入/usr/local/redis/bin/redis-server,然后回车,再回车
添加软连接ln -s /usr/local/redis/bin/* /usr/local/bin/
vim /etc/redis/6379.conf
在70行后面加上主机ip地址
重启服务:/etc/init.d/redis_6379 restart
redis的服务控制命令:
/etc/init.d/redis_6379 stop start restart status
redis的命令工具:
redis-server:直接启动redis,只能启动
redis-benchmark:检测redis在本机的运行效率
redis-cli:命令行工具
redis-check-aof:检测AOF文件是否正常
redis-check-rdb:检测rdb文件是否正常
redis-benchmark:
-h 指定服务器的主机名 ip地址
-p 指定服务器的端口号
-c 指定并发连接数
-n 指定请求数
vim /etc/redis/
70行后面添加本机ip地址
如何进入redis
redis-cli -h 192.168.233.30 -p 6379
redis-cli:直接使用,仅限于本地,远程登陆还是需要指定目标服务器的ip地址
redis-cli -h 192.168.233.30 -p 6379
-h 指定ip地址
-p 指定端口号
-a 指定登录密码
redis数据类型:五大数据类型
1、string(字符串):也是redis最近本地类型,最大能存储512MB的数据,可以存储任何数据,数字,文字,图片等等
2、list数据类型
列表当中的元素还是string类型
3、hash类型
hash类型用于存储对象,采用hash格式进行操作。占用的磁盘空间少,而且一个hash可以存储4294967295个键值对
4、set数据类型(无序集合)元素类型也是string,元素是唯一的,不允许重复,多个集合类型可以进行并集,交集和差集运算。set当中的元素类型是唯一的,可以跟踪一些唯一性的数据,访问微博的用户名,只要把对应名称redis,set集合可以自动保存唯一性方便下一次的访问
5、有序集合 元素类型也是string,元素唯一 不能重复。每个元素都会关联一个double(小数点)的分数(score,表示权重),可以通过权重的大小进行排序,元素的权重可以相同
zset
在线积分的排行榜,可以实时更新用户的分数。zrange命令回去积分top10的用户,zrank命令通过username来获取用户的排行信息
存键:set test guoqi
查键:get test
在生产中查看键值,一般不用keys *,一般用keys t*或者keys t?
APPEND test1 hello:键值对不存在,会将test1写入到键值对,然后报5的长度
APPEND test1 world:键值对已存在,会将world也一并和前面的字符进行拼接,返回当前和之前的长度
STRLEN test1:直接返回键的长度
STRLEN test1:set可以直接覆盖
INCR test1:自增1
decr test1:自减1
INCRBY test1 20:指定增加数值20
ttl test:显示出来的如果是(integer) -2表示已过期
显示出来的如果是(integer) -1表示永不过期
EXPIRE test 30:对已有键值对设置生命周期。30是秒数
setex test2 15 lo:新建键值的生命周期
MSET key1 hello key2 world:同时创建多个键值对key1 key2
mget key1 key2:同时打印多个键值对的内容
RPUSH guoqi1 5:从右往左插入数据
LPUSH guoqi1 10:从左往右插入数据
LRANGE guoqi1 0 -1:查询数据
lrange guoqi1 1 2:查找数据1和2
LPOP guoqi1:从左删除
RPOP guoqi1:从右删除
LINSERT guoqi before 3 10:指定位置前面进行插入
sadd myset a a c:创建aac,但是只会有a和c,set具有唯一性
SMEMBERS myset:查看
srem myset e f c:指定移除e f c
ZCOUNT myzset 1 3:表示权重的范围:1<=scroe<=3
ZCARD myzset:获取成员数量
set和hset:创建普通类型和hash类型,一般情况下如无特殊需求,普通的创建方式即可
对一个键值进行多字段存储,节省内存,使用hash方式
redis的库 库都是创建好的库,16个库
数字排名:0-15 每个数据库之间互相独立,互不干扰
redis的特点:读写速度块
数据类型:
1、string
2、list
3、hash对一个键进行多字段操作要使用hash节省内存空间
4、无序集合 set元素不能重复,可以用来定义唯一值
5、有序集合 zset,元素不能重复,但是权重可以相同,用来排名
KEYS v* #查看当前数据库中以 v 开头的数据
KEYS v? #查看当前数据库中以 v 开头后面包含任意一位的数据
KEYS v?? #查看当前数据库中以 v 开头 v 开头后面包含任意两位的数据
EXISTS test:查看键值test是否存在,返回1表示存在,返回0表示不存在
del t1:表示删除数据库的指定t1
HSET:创建单个键值
HMSET:连续创建多个键值
select 0:切换至目标数据库 0
config set requirepass 123456:设置密码
在数据库里面登录密码:auth 123456
在数据库外面登录:redis-cli -h 192.168.233.11 -p 6379 -a 123456
默写:
1、redis的特点
具有极高的读写速度,数据读取每秒110000次,写入数据每秒可以执行81000的写入
支持丰富的数据类型
支持持久化。平常的数据都是保存在内存中,持久化可以写入磁盘中,既可以保存到本地,也可以实现备份
原子性,所有的操作都是原子性
支持主从模式----master-slave模式
2、redis执行速度快的原因
redis是纯内存结构,避免磁盘I/O的耗时
核心模块是一个单进程,减少了线程切换和回收线程的时间
I/O的多路复用机制,每一个执行线路,都可以同时执行读和写,高并发的效率大大提高
3、redis的数据类型
string类型
list类型
hash类型
set类型
zset类型
面试题:
Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?
Squid、Varinsh和Nginx都是代理服务器什么是代理服务器: 能当替用户去访问公网,并且能把访问到的数据缓存到服务器本地,等用户下次再访问相同的资源的时候,代理服务器直接从本地回应给用户,当本地没有的时候,我代替你去访问公网,我接收你的请求,我先在我自日的本地缓存找,如果我本地缓存有,我直接从我本地的缓存里回复你如果我在我本地没有找到你要访问的缓存的数据,那么代理服务器就会代替你去访问公网。
区别: 1)Nginx本来是反向代理/web服务器,用了插件可以做做这个副业但是本身不支持特性挺多,只能缓存静态文件:
2)从这些功能上。varnish和squid是专业的cache服务,而nginx这些是第三方模块完成
3)varnish本身的技术上优势要高于squid,它采用了可视化页面缓存技术,在内存的利用上,Varnish比Squid具有优势,性能要比Squid高。还有强大的通过Varnish管理端口,可以使用正则表达式快速、批量地清除部分缓存它是内存缓存,速度一流,但是内存缓存也限制了其容量,缓存页面和图片一般是挺好的;
4)squid的优势在于完整的庞大的cache技术资料,和很多的应用生产环境
工作中选择: 要做cache服务的话,我们肯定是要选择专业的cache服务,优先选择squid或者varnish。