NoSql之相逢Redis

前端之家收集整理的这篇文章主要介绍了NoSql之相逢Redis前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

为了应对海量数据的到来,出现了非关系型数据库Nosql,为了在互联网中得以生存和发展,我们不得不去掌握一两个Nosql数据库的使用。当然我们不可能全部都掌握,只要掌握几个有代表性的就行。这里我们接触一下redis,希望以此来理解Nosql给我们带来的好处。

1、是什么

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

2、有什么

  • 字符串(Strings)

字符串是Redis值的最基础的类型。Redis字符串是二进制安全的,这意味着一个Redis字符串可以包含任何种类的数据,例如一个JPEG图像或者一个序列化的Ruby对象。 一个字符串值最多可以保存512M字节的内容

  • 列表(Lists)

Redis列表是简单的字符串列表,按照插入顺序排序。 Redis list的应用场景非常多,我们不仅可以轻松地实现最新消息排行等功能,还可以利用Lists的PUSH操作,将任务存在Lists中,然后工作线程再用POP操作将任务取出进行执行。

  • 哈希(Hashes)

Redis Hashes是字符串字段和字符串值之间的映射,因此他们是展现对象的完美数据类型。

  • 集合(Set)

是一个无序的字符串集合. 你可以以O(1)的时间复杂度 (无论集合中有多少元素时间复杂度都是常量)完成添加删除,以及测试元素是否存在。 Redis 集合拥有令人满意的不允许包含相同成员的属性。多次添加相同的元素,最终在集合里只会有一个元素。 实际上说这些就是意味着在添加元素的时候无须检测元素是否存在。

set特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择。比如在微博应用中,每个人的好友存在一个集合(set)中,这样求两个人的共同好友的操作,可能就只需要用求交集命令即可。Redis还为集合提供了求交集、并集、差集等操作,可以非常方便的实现。

  • 有序集合(Sorted Sets)

与set类似,是一个没有重复元素的字符串集合。区别是set不是自动有序的,而sorted set可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序。当你需要一个有序的并且不重复的集合列表,那么 可以选择sorted set数据结构,比如twitter 的public timeline可以以发表时间作为score来存储,这样获取时就是自动按时间排好序的。

3、干什么

众多语言都支持Redis,因为Redis交换数据快,所以在服务器中常用来存储一些需要频繁调取的数据,这样可以大大节省系统直接读取磁盘来获得数据的I/O开销,更重要的是可以极大提升速度。

拿大型网站来举个例子,比如a网站首页一天有100万人访问,其中有一个板块为推荐新闻。要是直接从数据库查询,那么一天就要多消耗100万次数据库请求。上面已经说过,Redis支持丰富的数据类型,所以这完全可以用Redis来完成,将这种热点数据存到Redis(内存)中,要用的时候,直接从内存取,极大的提高了速度和节约了服务器的开销。

4、优缺点

  • 优点
性能极高 – Redis能支持超过 100K+ 每秒的读写频率。
丰富的数据类型 – Redis支持二进制案例的 Strings,Lists,Hashes,Sets 及 Ordered Sets 数据类型操作。
原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
丰富的特性 – Redis还支持 publish/subscribe,通知,key 过期等等特性。
  • 缺点
持久化

redis直接将数据存储到内存中,可通过两种方式持久化:定时快照(snapshot)和基于语句的追加(AppendOnlyFile,AOF)。Snapshot方法是指每隔一段时间,将整个数据库的数据写到磁盘上,很明显,每次都是写全部数据,代价非常高;而AOF方法只追踪变化的数据,这类似与MysqL的binlog方法,但追加log可能过大,同时所有操作均需要重新执行一遍,恢复速度缓慢。

耗内存

尽管redis对一些数据结构采用了压缩算法存储,但是占用内存量还是很高。

总结:

今天我们通过redis的学习,知道Nosql的重要性,而且在以后的学习中避免不了与大数据的接触,所以学会对数据的处理变得尤为重要,我们的奋斗历程也才刚刚开始。

猜你在找的NoSQL相关文章