rd
变量级别:
- mysql架构环境:jsp->action->service->dao->mysql(应用->dao->数据库)
- memcached(缓存)+mysql+垂直拆分(如买家、卖家)(dao->缓存)
- mysql主从复制读写分离(master->slave)
- 分库分表(分库:业务相关的一个库,变化少的一个库;)+水平拆分+mysql集群
- mysql的扩展瓶颈
- 今天是什么样子
- 为什么用nosql:传统的数据库难以支撑业务
mysql引擎innodb的行锁
非关系数据经典公式:ACID,原则一直,独立隔离,不需要固定格式,无需多余操作就可以横向扩展
特点:易扩展、大数据量高性能、多样灵活的数据模型、传统RDBMS VS NOSQL
NOSQL:redis(数据类型丰富,如:淘宝的tair)、memcache(高速缓存)、mongdb
redis的理解就是:KV+cache+persistence
大数据时代的(海量、多样、实时以及高并发、高可扩、高性能)
NOSQL的应用场景:数据结构的日益复杂
(spring源码、arraylist底层)
(如果有VR,支付接口的工程师)
(多数据源多数据类型的存储问题)-- 历史的文件记录
栈内搜索引擎
淘宝架构
99:Perl、CGI、oracle
00:java、servlet
01-04:EJB
05-07:去EJB:spring、ibatis、webx、antx,底层架构:isearch、mq+esb,数据挖掘、CMS
08-09:海量数据:Memcached集群、mysql+数据切分=Cobar、分布式存储、hadoop、KV、CDN
10:安全、镜像:安全、镜像、应用服务器升级、秒杀、nosql、SSD
11:敏捷、开发、体验
支付接口的重要性
多数据源多数据类型的存储问题
冷数据-->关系型数据库(淘宝的mysql是改造过的),去IOE:工业化企业才使用oracle(去掉IBM的小型机,去oracle,去EMC的存储设备)
数据量大-->mon/*gdb
图片:分布式的文件系统-->淘宝、腾讯的TFS,Google的GFS和Hadoop的HDFS
关键字:ISearch
阿里支付倪行军,阿里多隆(ISearch,tier)
波段性的热点高频词汇:tair、redis、memcache
商品的交易、价格计算、积分:第三方支付、支付宝
淘宝中的UDSL:映射、API和热点缓存
nosql的经典应用:以一个电商客户、订单、订购。地址模型来对比关系型和非关系型:建表
bson是一种类json的二进制形式的存储格式
分布式忌讳关联查询,有的使用冗余数据规避关联查询,分布式支持不了太多的并发
网状关系的数据的处理
nosql的四大分类:
- KV键值
- 新浪:/berkeletdb+redis
- 美团:redis+tair
- 阿里、百度:memcache+redis
- 文档型数据库:bson较多:mongodb,更像关系型数据库
- 列存储
- cassandra、HBase
- 分布式文件系统
- 图关系
- 社交网络、推荐系统、网状图
- neo4j、infogrid
分布式系统中CAP原理:CAP+BASE
传统的ACID
C(强一致性)A(高可用性)P(分布式容忍性)理论的核心:一个分布式系统最多满足其中的两个属性:一致性、可用性和分区容错性
CA:单点集群,可扩展性不大(RDBMS传统数据库)
CP:mongodb、HBase、Redis
AP:一致性要求低,大多数网站构架(couchDB)
BASE:(基本可用、软状态、最终一致)系统通过某一时刻数据一致性的要求来延伸系统整体伸缩性和性能上的改观
分布式+集群:不同的服务器部署不同的服务模块,他们之间通过RPC/RMI调用,集群是不同的服务器部署相同的服务模块,通过分布式调度软件进行统一的调度
替代memchched的原因:持久化、多样性、数据备份
用处:持久化数据、取最新数据的操作、模拟httpsession设定过期时间的功能、发布订阅消息系统、定时器、计数器
怎么用:数据类型的基本操作和配置、持久化和复制,RDB/AOF、事务的控制、复制
tar -zxvf
redis目录下make命令出错(缺少gcc)
能上网:yum install gcc-c++
不能上网:光驱的rpm -ivh
再次make的时候会有问题,由于之前安装的时候产生的多余文件,使用make distclean
wget是网址的下载方式
********tplinks******
etc更多的是安装文件的配置文件,usr中放置的是程序和应用,类似windows的program files,安装文件之后在/usr/local/bin,opt是额外安装软件的目录
启动:redis-sercer /myredis/redis.conf
redis-cli -p 6379
使用ping命令可查看是否启动成功
启动后的杂项基础知识:
测试性能:redis-benchmark
单进程模型处理客户端请求,对读写事件的响应是通过epoll函数的包装做到的,速度完全依靠主进程的执行效率,epoll是内核为处理大批量文件描述符而作为改进的poll,是linux下多路复用IO接口select/poll的增强版本,显著提升程序在大并发连接中只有少数活跃的情况下的系统的CPU的利用率
默认16个库,使用select num切换数据库
Dbsize查找key的数量
keys *
flushdb是当前库的数据,flushall是所有库
统一密码管理,16个库都是同样密码
默认端口6379(意大利的女歌手merz)
常用五大类型数据:(string、hash、set、list(1.6的是entry,1.7的是node节点对象,后面有一个泛型的value)、zset)
键:
字符串:二进制安全的,最大512M
列表:
集合:
哈希:类似map<string,object>
有序集合(zset):前面关联一个double的分数
常见的命令:
大:redisdoc.com
中:
del key,删除key
dump key,序列化
exists key,是否存在
expire key second,过期时间
expireat key timestamp,过期时间-时间戳
pexpire key millisecond,毫秒计
pexpireat key millisecond-timestamp,时间戳以毫秒计
keys pattern,符合给定模式的key
move key db,移动key到某个db
persist key,移除key的过期时间
pttl key,返回key剩余的过期时间 毫秒
ttl key,返回key剩余的过期时间 秒
randomkey,当前数据库随机返回一个key
rename key newkey,修改key名
renamenx key newkey,仅当key不存在时修改
type key,key值的类型
小:
string:set、get、del、append、strlen
incr、decr、incrby、decrby(增减)
getrange、setrange(获取范围的值)
setex(set with expire)、setnx(set if not exist)
mset、mget、msetnx(m=more)
getset
list:blpop key timeout,brpop key timeout,brpoplpush source destination timeout
lindex key index(从上到下获得元素),linsert key before|after pivot value(在某个值的后面插入)
llen key
lpop(rpop) key(出栈),lpush(rpush) key values,lpushx key value,lrange key start stop
rpop key,rpoplpush source destination,rpush key values,rpushx key value
lrem key(删除n个值)
ltrim key start end(修剪),lset key index value
set:sadd key values,scard key(元素个数)
sdiff key1 key2,sdiffstore destination key1 key2(差集)
sinter key,sinterstore destination key(交集)
sunion key(并集)
sismember key value,smembers key(不需要start和end),smove source destination value(移动)
spop key(随机出栈)
srandmember key(随机抽取几个数据),srem key value(删除),sunion key,sunionstore destination key
sscan key cursor [match pattern] [count count]
hash:hset、hget、hmset、hmget、hsetall、hdel
hlen、hexists key、hkeys、hvals
hincreby、hincrebyfloat
hsetnx
zset:zadd key score member、zcard key,zcount key min max,
zincrby key increment member,zinterstore destination numkeys
zlexcount key min max,zrange key start end,zrangebylex key min max,zrangebyscore key min max(withscores、( 不包含 、limit),
zcard、zcount(范围)、zrank(下标)、zscore(值),zrem member(删除)
zrevrank key values(逆转),zrevrangebyscore key min max(withscores、( 不包含 、limit)
https://wenku.baidu.com/view/2f22944669eae009581bec2a.html
配置文件(在linux编码,配置大于编码)
include:包含其他的配置文件
general(通用):
daemonize yes(后台运行)
pidfile:(进程管道id文件)
tcp-backlog 511(未完成三次握手+完成三次握手)(除非用apache jemter模拟)
bind:绑定网卡
tcp-keepalive 0
security
limits
maxclients
maxmemory
maxmemory-policy(6种,是否设置过期时间的、是使用LRU还是random算法清楚,还是针对时间的TTL方式移除,以及最后的noeviction永不过期)
maxmemory-samples(LRU和TTL不是精确的算法,需要样本)
redis的持久化(RDB(redis database)、AOF(append only file))
RDB:时间段将内存的保存到磁盘,也就是行话的snapshot快照,恢复是将快照文件直接读到内存中
会单独创建一个子进程进行持久化,先写入一个临时文件,持久化结束后用这个文件替换上一次持久化好的文件。(对数据的完整性不是非常敏感的时候)
Fork:复制一个完全相同的进程
保存的是dump.rdb
配置文件的位置:snapshotting
save seconds changes(after xxx seconds if at least changes keys change)
默认:1min 10000
5min 10
15min 1
stop-writes-on-bgsave-error:配置成no就是不在乎数据的一致性
rdbcompression:采用LZF算法进行压缩
rdbchecksum:使用CRC64算法进行数据校验
rdbfilename
dir
触发RDB的方法:冷拷贝
save,bgsave(前面的是阻塞操作,后面的是后台异步),flushall
如何恢复:dump.rdb移动到安装目录
优势:适合大规模的数据恢复
劣势:最后一次有可能丢失
判断启动的方式:
ps -ef|grep redis
lsof -i:6379
AOF:日志的形式记录写操作,只许追加,不可改写
appendonly on
appendfilename
appendfsync:always、everysec、no
rewrite:把文件压缩,fork一个新的进程,记录上次重写时候aof的大小,默认配置是当aof文件大小是上次rewrite后大小的一倍且文件大于64M时
no-appendfsync-on-rewrite
auto-aof-rewrite-min-size
auto-aof-rewrite-percenttage
aof的优势:数据同步;劣势:aof的文件远大于rdb,恢复慢
事务(2.2后支持CAS:check and set):一个队列中,一次性、顺序性和排他性
常用命令:discard(取消事务)、exec、multi(标记事务块)、unwatch(取消全部监视)、watch key
case1:正常执行:multi--------exec
case2:放弃事务:multi--------discard
case3:全体连坐:原子性
case4:冤头债主
case5:watch监控:悲观锁、乐观锁、CAS
主从复制(读写分离、容灾恢复)
只配置从库
从库配置:slaveof 主库ip 主库端口(每次启动都需要使用,除非配置到配置文件)
修改配置文件细节操作:拷贝多个conf文件,开启daemonize yes,pid文件名字,指定端口,log文件名字,dump.rdb名字
常用:一主二仆(读写分离)
首先看一下信息:info replication
薪火相传:master-->slave-->slave
反客为主:slave no one
复制原理:第一次是全量,之后是增量:发送sync命令,重新连接也要全量
哨兵模式:监控,反客为主的自动版
新建sentinel.conf文件
sentinel monitor host6379 ip count(票数)
之后挂掉的master启动后,成为slave
复制的缺点:复制的延时