1.1 什么是 NoSql
为了解决高并发、高可扩展(集群)、高可用(不能宕机)、大数据存储问题而产生的数据库解决方案,就是 NoSql 数据库。
NoSql : 全称 not only sql ,非关系型数据库。可以作为关系型数据库的一个很好的补充。不能替代。
1.2 NoSql 数据库分类
┣▶键值(Key-Value)存储数据库
相关产品:Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB。
典型应用:内容缓存,主要用于处理大量数据的高访问负载。
数据模型:一系列键值对
优势:快速查询
劣势:存储的数据缺少结构化
┣▶列存储数据库
相关产品:Cassandra,HBase,Riak
典型应用:分布式的文件系统
数据模型:以列簇式存储,将同一列数据存在一起
优势:查找速度快,可扩展性强,更容易进行分布式扩展
劣势:功能相对局限
┣▶文档型数据库
相关产品:CouchDB、MongoDB
典型应用:Web应用
数据模型:一系列键值对(与Key-Value类似,但Value是结构化的)
优势:数据结构要求不高
劣势:查询性能不高,而且缺乏统一的查询语法
┣▶图形(Graph)数据库
相关产品:Neo4J、InfoGrid、Infinite Graph
典型应用:社交网络
数据模型:图结构
优势:利用图结构相关算法。
劣势:需要对整个图做计算才能得出结果,不容易做分布式的集群方案。
1.3 什么是 redis
Redis 是用 C 语言开发的一个开源的高性能键值对(Key-Value)数据库(NoSql),应用在缓存。它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止 Redis支持的键值数据类型有5种。String、Hash、List、Set、SortedSet。
1.4 redis 的五种数据类型
首先,① redis 中的数据都是字符串。② redis是单线程的,不适合存储比较大的数据(因为先进先出,大的数据占位子,哈哈哈哈哈)
◤ String: Key-Value
字符串类型
redis 命令不区分大小写,但是 key 是区分的
使用 incr 命令,如果 key 不存在。会自动创建 key 并自动+1。
① set key value 设置值
② get key 获取值
③ incry key 加一
④ decr key 减一
◤Hash:Key-Field-Value
散列类型
相当于一个 key 对应一个map (map 中又是 key-value(field-value))
应用于归类
① hset key field value 设置值
② hget key field 获取值
③ hincrby key field num 设置增数量(负数就减咯)
◤List
列表类型
List 是有顺序可重复(数据结构中的:双链表,队列)
可作为链表,从左添加元素,也可以从右添加元素。
① lpush list a b c d 从左添加元素
② rpush list 1 2 3 4 从右添加元素
③ lrange list 0 -1 从 0 到 -1 元素查看:也就表示查看所有
④ lpop list 从左边取,删除
⑤ rpop list 从右边取,删除
◤Set
集合类型
无序,不可重复
① sadd set1 a b c d d 向 set1 中添加元素(元素不重复)
② smembers set1 查询元素
③ srem set1 a 删除元素
◤SortedSet(zSet)
有序集合类型
有序,不能重复
适合做排行榜 排序需要一个分数属性
① zadd zset1 9 a 8 c 10 d 1 e (添加元素 zadd key score member )
② ZRANGE key start stop [WITHSCORES] (查看所有元素:zrange key 0 -1 withscores:如果要查看分数,加上withscores)
③ zrange zset1 0 -1 (分数从小到大排列)
④ zrevrange zset1 0 -1 (从大到小)
⑤ zincrby zset2 score member (对元素member 增加 score)
1.5 redis 的应用场景
缓存。
分布式集群架构中的session分离。 session默认的时候半个小时,可以把 redis 的时效也设为半个小时。key-->userid value -->user
任务队列。(秒杀、抢购、12306等等)
应用排行榜。(SortedSet)
网站访问统计。
数据过期处理。(expire)
1.6 key 命令
① expire key second 设置 key 的过期时间 0 - key不存在 1 - 设置成功
② ttl key 查看剩余时间 -2 - 表示不存在, -1 - 表示已被持久化, 正数表示剩余时间
③ persist key 清除过期时间,即持久化。 持久化成功提示1,不成功0。
④ del key 删除 key 。
⑤ exists key key存在返回1,否则返回0 。
⑥ select 0 选择0号数据库。默认是0号数据库。
1.6 redis 持久化方案
Redis 数据都放在内存中。如果机器挂掉,内存的数据就不存在。
需要做持久化,将内存中的数据保存在磁盘,下一次启动的时候就可以恢复数据到内存中。
1. RDB 快照形式 默认(定期将当前时刻的数据保存磁盘中)会产生一个dump.rdb文件
持久化依据:多长时间多少个key发生改变。
特点:会存在数据丢失,性能较好,用于数据备份。
2.AOF append only file (所有对redis的操作命令记录在.aof文件中),恢复数据,重新执行一遍即可。
持久化依据:多长时间 或者 多少个key发生改变。
特点:每秒保存,数据完整性比较好,耗费性能。