高并发基本概念
名词解决
高并发:多人同时访问同一个WEB应用程序
高可用:在高并发的运行环境中,保证WEB应用程序正常运行
需求
在高并发的环境下面,要达到高可用的目标
解决方案
方案指的是解决高并发问题的一系列方法,必不局限于某一种(硬件层面、软件层面、思想层面)
Redis数据库
基于内存的,以key-value形式保存数据的数据库(硬件层面)
Rabbitmq
消息队列(时间换高可用)
Spring cloud
系统架构层面的解决方案
微服务架构(去中心化的思想)(思想层面的解决方案)
系统架构层面核心概念
集群部署
分布式部署
微服务部署
集群部署
分布式部署(拆分概念)
微服务部署
软件即服务
Spring cloud
正在实现微服务思想的框架技术
Redis数据库
什么是redis
Redis是完全开源免费的,遵守BSD协议,
是一个高性能key-value内存数据库(具备持久化的能力)
为什么会有redis
高并发的必然产物
谁在用
Google、Qq、Alibaba
宣传口号
NOSQL
NO SQL
NOT ONLY SQL
存储方式
采用key-value的方式存储数据 类似集合框架中的map
Redis的特点
- Redis支持数据的持久化
- Redis不仅仅支持简单的key-value ,同时还提供 list set zset hash等数据结构
- Redis 支持数据备份,master-slave(主从模式的数据备份)
安装配置
直接解决
微软
https://github.com/MicrosoftArchive/redis/releases
文件说明
Redis-server.exe 数据库主程序
Redis-cli.exe 命令行的管理工具
Redis.window.conf 主程序的配置文件(访问端口等参数)
运行(打开cmd)
1.先跳目录
Cd E: ginx_tomcat_redis edis-clusterRedis-x64-3.2.100
执行这条命令 redis-server.exe redis.winwos.conf
redis 数据库的使用
数据类型
String 字符串
- 最大 512m
- 类似java中的字符串
- 语法
a) Set key value
b) Get key
c) Del key
Hash 哈希
- 每个hash可以存储2^32-1键值对
- 类似java中的hashMap
- 语法
a) hset key 属性 属性值
b) hmset key 属性1 属性值1 [属性2 属性值2]
c) hget key 属性名
d) hgetall key
list 列表
- 列表最多可存储2^32-1
- 类似LinkedList
- 语法
a) 可以左推送和右推送
b) 可以右取左推
c) Rpush key 属性名 属性值
d) Lpush key 属性名 属性值
e) Lrange key start stop (下标从0开始)
f) Lpop key
g) Rpop key
Set 集合
- 类似HashSet
- 重复的值会被忽略
- 语法
a) sadd key 值 [值2]
b) smembers key 查看
c) spop key
d) srem key 值 删除
e) sdiff key1 key2 返回两个集合不同的值(只包含第一个集合)
f) sinter key1 key2 返回两个集合的交集(只包含第一个集合)
sorted-set 有序集合
语法
Zadd key 序号 值 序号2 值2
Zrange key start stop (start从0开始 stop -1 获取到最后一个值)
Zrange key start stop withscores (返回结果包含序号)
注:值不能重复,序号可以重复,并且可以是小数
特殊用法
加减操作
Incr 加1
Decr 减1
Incrby 加n
Decrby 减n
商品维度(喜欢数、评价数、浏览数)
hset product:10001 like 4
hset product:10001 comment 5
hset product:10001 visitor 6
hincrby product:10001 like 3
hget product:10001 like
hgetall product:10001
用户维度(关注数、粉丝数、动态数、发帖数)
hset user:1 follow 10
存储社交关系
有序集合
Sorted-set
zadd u:1:f 1 2
Zadd u: 1:f 2 3
Zadd u: 1:f 3 6
Zadd u: 2:f 4 1
Zadd u: 2:f 5 3
Zadd u: 2:f 6 8
zintersore 把一个或多个交集的比较结果保存到一个新的集合中
zinterstore out:1:2 2 u:1:f u:2:f
zrange out:1:2 0 -1
api文档
性能测试
cmd执行 redis-benchmark.exe –n 10000 –q
JAVA连接redis
Jedis (持久层框架)
Redis缓存
持久层的二级缓存
Spring boot 基于redis的缓存机制
Redis缓存使用
依赖包
配置文件
注解
@EnableCache 启动缓存
@Cacheable 执行了查询,缓存查询结果
@CachePut 执行了插入或修改,更新缓存数据
@CacheEvict 执行删除,清除缓存
Redis安装部署
核心概念
主从复制
达到高可用的目的
负载均衡
主从模式示意图
安装配置主从模式
- 修改redis端口