一、NoSQL
1.1、什么是NoSQL?NoSQL最常见的解释是“non-relational”, 很多人也说它是“Not Only SQL”
NoSQL仅仅是一个概念,泛指非关系型的数据库
区别于关系数据库,它们不保证关系数据的ACID特性。原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。
NoSQL是一项全新的数据库革命性运动,提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。
1.2、NoSQL的特点
1.2.1、应用场景高并发的读写
海量数据读写
高可扩展性
速度快
1.2.2、不适用场景需要事务支持
基于sql的结构化查询存储,处理复杂的关系,需要即席查询(用户自定义查询条件的查询)
二、Redis的特点高效性。Redis读取的速度是110000次/s,写的速度是81000次/s
原子性。Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
支持多种数据结构。string(字符串)、list(列表)、hash(哈希)、set(集合)、zset(有序集合)
稳定性:持久化,主从复制(集群)。
其他特性:支持过期时间,支持事务,消息订阅。
三、Redis的应用场景
1.1、取最新N个数据的操作
比如典型的取网站最新文章,可以将最新的5000条评论ID放在Redis的List集合中,并将超出集合部分从数据库获取。
1.2、排行榜应用,取TOP N操作
这个需求与上面需求的不同之处在于,前面操作以时间为权重,这个是以某个条件为权重,比如按顶的次数排序,可以使用Redis的zset,将要排序的值设置成zset的score,将具体的数据设置成相应的value,每次只需要执行一条ZADD命令即可。
1.3、需要精准设定过期时间的应用
比如可以把上面说到的zset的score值设置成过期时间的时间戳,那么就可以简单地通过过期时间排序,定时清除过期数据了,不仅是清除Redis中的过期数据,你完全可以把Redis里这个过期时间当成是对数据库中数据的索引,用Redis来找出哪些数据需要过期删除,然后再精准地从数据库中删除相应的记录。
1.4、计数器应用
Redis的命令都是原子性的,你可以轻松地利用INCR,DECR命令来构建计数器系统。
1.5、Uniq操作,获取某段时间所有数据排重值
这个使用Redis的set数据结构最合适了,只需要不断地将数据往set中扔就行了,set意为集合,所以会自动排重。
1.6、缓存
四、Redis的数据类型
1.1、对字符串string的操作序号命令及描述示例
1SET key value
设置指定 key 的值示例:SET hello world
2GET key
获取指定 key 的值。示例:GET hello
4GETSET key value
将给定 key 的值设为 value ,并返回 key 的旧值(old value)。示例:GETSET hello world2
5MGET key1 [key2..]
获取所有(一个或多个)给定 key 的值。示例:MGET hello world
6SETEX key seconds value
将值 value 关联到 key ,并将 key 的过期时间