NOSQL
什么是nosql
(a) nosql 它是非关系型数据库
(b) nosql 解决网站里面 大数据和高并发的问题(SNS社交网络上面/电商/12306)
Nosql数据库的分类(特点)
key-value(键值对形式)型 nosql数据库 – 典型代码 redis
Redis的认识
(1) redis开源 高性能nosql数据库,数据可以存储在内存或磁盘上面
(2) Redis 主要key-value结构形式存储,redis底层支持各种类型的数据存储结构
包括 list set map(hash) string等
Redis的特点
(1) 数据存储内存,速度比较快
(2) 支持类型比较多
string(字符串)、list(链表)、set(集合)、 zset(sorted set --有序集合–api)和hash(哈希类型)。
(3)支持磁盘存储 – 完成持久化操作 (aof rdb)
(4) 支持数据的过期 --(设置过期时间 expire)
(5) 支持集群操作 --(明天讲)
(6)支持订阅和发布 --(了解 MQ)
不同点:
memcach和redis的不同点
支持类型: 表来存储 string/list/map/set/… map
相同点: memcache和redis 都是 key-value 非关系型数据
redis 它是 key-value型的非关系型数据库,作用 做缓存
redis的使用场景
(1)redis使用最多的地方 就是缓存 --(内存最多)
(2)可以处理大数据量的计数问题 --(微博转发 点赞)
(3)实时的攻防系统
银行登录 (登出多少次 会锁定) --暴力破解(穷举法)
userid 1/2/3
(4)有效期应用 – 优惠劵
(5)自动去重应用 – set
(6)队列的结构 – (FIFO) (list存储) -->消息队列(RabbitMQ) --地铁
(7)消息订阅和发布
redis 使用
(1)String 操作(掌握)
set key value
get key
(2)key的操作(掌握)
keys *
expire key second
ttl key
(3)list操作(掌握)
lpush/rpush key value1/value2
lrange key start end
lindex key index
(4)set操作
sadd key val1 /val2/val3
smembers key
srem key member
(5) hash操作(掌握)
hset key name value
hget key name
hmset key name1 key1 name2 key2
hmget key name1 name2
(6)订阅 发布 事务 了解
(7)设置密码 --通过配置文件操作(掌握)
java代码操作redis
springboot (连接方式 – 只需要做配置) jedis
string 操作
list操作
set操作
hash操作
事务操作 了解
redis里面持久化
为什么需要持久化?
防止数据丢失
怎么持久化?
磁盘存储 和 内存磁盘
redis如果要实现磁盘存储(做持久化过程) 两种方案
rdb方式 : 在一个时间点内 保存一个数据的快照
save 1 1 1s钟之内至少有一个变化的时候,做持久化
缺点: 1s 之内的数据 操作时候,丢失,不能做持久化
aof方式 :
追加执行的配置文件的方式 (配置文件就有操作的命令)
保存到redis里面的数据永久存在的吗?
– 不是
可以设置过期时间 到过期时间之后, 会淘汰数据
达到内存最大值,也会淘汰
淘汰数据,怎么去淘汰(10000 个数据 – 淘汰)
(2)淘汰策略:(理解)
大体三种 : lru(最近最少使用) ttl(即将过期的数据) random(随机淘汰)
volatile-lru:从已设置过期的数据集中挑选最近最少使用的淘汰
volatile-ttr:从已设置过期的数据集中挑选将要过期的数据淘汰
volatile-random:从已设置过期的数据集中任意挑选数据淘汰
allkeys-lru:从数据集中挑选最近最少使用的数据淘汰
allkeys-random:从数据集中任意挑选数据淘汰
noenviction:禁止淘汰数据
redis (淘汰策略通过公司里面的架构师来配置 --集群)
https://www.cnblogs.com/Mike_Chang/p/9560509.html
什么是集群
多个服务器集中再一起 ,去处理同一个业务
集群和分布式概念(理解)
为什么需要集群 ,集群有什么好处?
集群的特点
(1) 扩展性 --可以动态的去扩展的服务器
(2) 高可用 --> 具备容错的功能 (错误恢复)
(3) 负载均衡 -->把请求 分配到不同的服务器里面
面试题 :集群和分布式区别?
(1)相同点
解决高并发 和 大数据的问题
(2)不同点
集群 是 多个服务去实现同一个功能
分布式 不同的服务器实现不同的功能
如果要做集群 应该怎么做?
Redis-Cluster (搭建)
好处:可以完成分布式存储问题,解决容量问题
Redis-Cluster 采用无中心结构
redis集群搭建步骤
(1) 拷贝6份 redis文件
修改 端口 为 6379 , 6380,6381,6382,6383,6384
修改配置
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000
appendonly yes
(2) 编写一个启动脚本
在对应的文件夹里面新创建文件 startup.bat
title redis-6379
redis-server.exe redis.windows.conf
(3) 安装ruby环境
傻瓜式安装
(4) 安装ruby驱动环境
\rubygems-2.7.7 目录里面执行文件 ruby setup.rb
(5)通过驱动安装redis
切换到6379文件夹里面 安装 redis
gem install redis
(6)启动服务 创建集群
启动6379-6384服务
创建集群
redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384