单个数据库架构下,数据存储的瓶颈是什么?redis
Web数据库架构的发展sql
优化数据库的结构和索引,使用缓存技术缓解数据库的压力(Memcached+MySQL+垂直拆分)shell
MySQL主从复制和读写分离数据库
分库分表+水平拆分+MySQL集群缓存
MySQL的扩展性瓶颈:扩展性差、大数据下IO压力大、表结构更改困难安全
现在:负载均衡等一系列架构数据结构
为何使用NoSQL?架构
传统数据库难以处理网状数据或大量无固定结构的数据app
易扩展:数据之间无关系负载均衡
大数据量高性能:NoSQL的Cache是记录级,MySQL的Cache是QueryCache,粒度不一样
灵活的数据类型:随时能够存储自定义的数据格式
RDBMS(Relational Database Management System):
NoSQL:
Redis一个高性能的K-V分布式内存数据库
Redis支持数据的持久化,能够将内存中的数据保存在磁盘中,重启时能够再次加载进行使用
Redis不只支持简单的K-V(string)型数据,还支持list、set、zset、hash等数据结构的存储
Redis支持数据的备份,即master-slave模式的数据备份
难点:数据类型多样化、数据源多样化和变化重构、数据源和数据服务的耦合
解决方案:统一数据平台服务层(UDSL)
K-V、BSon(Binary Json)、列族、图形
传统ACID:Atomicity、Consistency、Isolation、Durability
CAP(只能3选2):Consistency(强一致性)、Availability(可用性)、Partition tolerance(分区容错性)
BASE:Basically Available(基本可用)、Soft state(软状态)、Eventually consistent(最终一致)
内存存储和持久化
取最新n个数据的操做
设定过时时间
发布、订阅消息系统
定时器、计数器
string:二进制安全,能够存储jpg图片或序列化对象。一个redis字符串value最大能够是512M
hash:一个string类型的field和value的映射表,适合用于存储对象,相似于Map<String,Object>
list:底层是经过链表实现的。能够添加元素至头部或尾部
set:集合,底层基于hashtable
zset:sorted set,每一个元素都会关联一个double类型的分数,经过分数来进行排序
key:keys *
exsits [key]
move [key] [db]
expire [key] [seconds]
ttl [key]
type [key]
del[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
get
/set
list:lpush
/rpush
/lrange
(l/r表明left/right) lpop
/rpop
lindex
llen
lrem
ltrim
rpoplpush
lset
linsert...before/after
set:sadd
/smembers
/sismember
scard
srem
srandmember
spop
smove
sdiff
sinter
sunion
hash:hset
/hget
/hmset
/hmget
/hgetakk
/hdel
hlen
hexists
hkeys
/hvals
hincrby
/hincrbyfloat
hsetnx
zset:zadd
zrange
/zrevrange
(withscores) zrangebyscore
/zrevrangebyscore
(使用'('表示开区间,使用limit对结果进行截取) zrem
zcard
/zcount
zrank
zscore
zrevrank
GENERAL(通用):
On Windows, daemonize and pidfile are not supported.
SECURITY(安全):Redis认证默认关闭
开启认证:
config set requirepass "[password]"
而后操做前使用下列语句进行权限认证:
auth [password]
LIMITS(限制)
maxclients:10000(最大链接数)
maxmemory:(最大内存,到达最大内存后没法进行写入操做,但能够继续读取)
maxmemory-policy:noeviction(过时策略,可选项以下)
volatile-lru -> remove the key with an expire set using an LRU algorithm
allkeys-lru -> remove any key according to the LRU algorithm
volatile-random -> remove a random key with an expire set
allkeys-random -> remove a random key, any key
volatile-ttl -> remove the key with the nearest expire time (minor TTL)
noeviction -> don't expire at all, just return an error on write operations
maxmemory-sample:5(样本数量,越高可使LRU或TTL越精确,但会增长CPU功耗)
待续~