NOSQL的必要性:
High performance - 对数据库高并发读写的需求
Huge Storage - 对海量数据的高效率存储和访问的需求
High Scalability && High Availability- 对数据库的高可扩展性和高可用性的需求
NOSQL的特点:
易扩展 :一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。
大数据量,高性能:大数据量和高并发的读写快速
灵活的数据模型:无需为存储的数据建立字段,灵活组建,降低增删字段的难度。
高可用
什么是redis
redis是一种高级的key-value的存储系统,redis底层使用C语言编写, 存储数据是放在内存中, 速度非常快.
支持五种数据类型
字符串类型 string
散列类型 hash
列表类型 list
集合类型 set
有序集合类型 sortedset
整个redis就相当于一个大的hashmap
key value
value的格式分为string, hash, list, set, zset这五大类型
如果value是hash类型, 那么value也相当于一个HashMap
testkey1 field value
001 张三
002 李四
testkey2
001 青龙
002 白虎
String:在Redis中字符串类型的Value最多可以容纳的数据长度是512M
set key value:给key赋特定的value,会覆盖
get key:只能用于获取String类型
del key:删除指定key
Hash:Redis中的Hash类型可以看成具有String Key和String Value的map容器,每一个Hash可以存储4294967295个键值对。key是相当于一个鱼缸,其中的field-value键值对,就是鱼。
hset key field value:例:hset myhash username haohao,此中key是myhash,username haohao是field和value的“键值对”,这两个联合组成key的value。
hget key field:返回指定的key中的field的值
hdel key field [field … ] :可以删除一个或多个字段,返回值是被删除的字段个数
hgetall key:可以获取该键的所有数据
列表类型list:List类型是按照插入顺序排序的字符串链表。我们可以在其头部(left)和尾部(right)添加新的元素。在插入时,如果该键不存在,Redis将为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除。list中头部数据就是最后一个被存入的数据,相当于桶装薯片盒拆开最靠前的一块薯片。
lpush key values[value1 value2…] :在key头部插入
lpop key:弹出指定的key关联的链表中的第一个元素
rpop key:从尾部弹出元素
lrange key 索引 索引:便理数据,若是0 -1则遍历所有数据
集合类型set:与List类型不同的是,
Set集合中不允许出现重复的元素sadd key values[value1、value2…]:向set中添加数据,如果该key的值已有则不会重复添加
smembers key:获取set中所有的成员
srem key members[member1、member2…]:删除set中指定的成员
有序集合类型sortset:可以保证不重复的元素,仍然可以进行排序
zadd key values[value1、value2…]:向set中添加成员
zrem key value:移除set中的成员
zrange key 索引 索引:通过索引区间返回有序集合成指定区间内的成员
redis通用指令
keys pattern
获取所有与pattern匹配的key,返回所有与该key匹配的keys。*表示任意一个或多个字符,?表示任意一个字符
del key1 key2…
删除指定的key
exists key
判断该key是否存在,1代表存在,0代表不存在
type key
获取指定key的类型
redis主要作用:分布式缓存
redis持久化
Redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式,可单独可结合。
RDB持久化(默认支持,无需配置)
该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘。
优点:
Redis数据库将只包含一个文件,方便备份
在Redis的服务进程中,在开始持久化时,会fork出子进程,进行持久化操作,这样就可以极大的避免服务进程执行IO操作了
数据集很大,RDB的启动效率会更高
缺点:
若在时间间隔内宕机,则不能恢复。
在持久化时,由于会分出子进程,数据量较大时可能会导致服务器停止几百毫秒,甚至是1秒钟。
AOF持久化
该机制将以日志的形式记录服务器所处理的每一个写操作,在Redis服务器启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的
优点:
更高的数据安全性
每秒同步、每修改同步和不同步:每修改同步效率最低
对日志文件的写入操作采用的是append模式,不会破坏之前的日志
通过redis-check-aof工具来帮助我们解决数据一致性的问题
日志过大,Redis可以自动启用rewrite机制。即Redis以append模式不断的将修改数据写入到老的磁盘文件中,同时Redis还会创建一个新的文件用于记录此期间有哪些修改命令被执行
缺点:
AOF文件通常要大于RDB文件
mongodb和redis区别:
mongodb也是一个nosql数据库, 存储的数据是非结构化的, 但是mongdb和redis不能放在一起对比,因为完全没有可比性, 使用场景完全不同
redis: 主要使用内存, 有两种持久化方案, 速度非常快, 一般做分布式缓存使用
mongodb: 主要使用硬盘存储, 所以不会担心数据丢失, 速度介于redis和传统数据库之间.
但是mongodb更擅长存储大文本数据, 以及一些非结构化数据, mongodb比redis的数据类型更加丰富. 例如: 存储小说网站的小说, 存储电商网站的评论等这些数据