zoukankan      html  css  js  c++  java
  • Redis源码研究—基础知识

    1. Redis 是什么

    Redis是一个开源的使用ANSI C语言编写的基于内存的key/value存储系统,与memcache类似,但它支持的value类型更多,包括:字符串(string)、链表(list)、集合(set)、有序集合(sorted set)和hash tablehttp://blog.nosqlfan.com/html/2235.html等,这些数据类型支持push/pop、add/remove、交集并集差集及其他更丰富的操作,且这些操作均是原子性的。

    按照分布式领域的CAP理论,Consisency、Availability、Tolerance to network Partitions这三个部分在任何系统架构实现时,只能同时满足其中两点,没法三者兼顾。Redis是一个数据库,它将重点放在了Consisency和Availability上,因而Redis只是一个单机的key/value系统,并不直接支持分布式,同时考虑到Tolerance to network Partitions,它支持将数据同步到多台从库上。

    2. Redis 有哪些优点

    与memcache和MySQL等类似产品比较,Redis有以下几个优点:

    (1) 非常丰富的数据结构,且这些数据结构的常见操作均是原子性的;

    (2) 高速读写。Memcached提供了CAS命令,可以保证多个并发访问操作同一份数据的一致性问题。 Redis没有提供CAS命令,不过Redis提供了事务的功能,可以保证一串 命令的原子性,中间不会被任何操作打断。MYSQL使用了锁,而memcache未使用锁,进而效率极高。总之,Redis用自己实现的事件分离器,代码量很短,没有CAS,没有lock,因而效率非常高。

    关于memcache与redis的比较,可参考这篇文章:《Redis与Memcached的比较》http://tech.it168.com/a2011/0818/1234/000001234403_1.shtml

    3. Redis 有哪些缺点

    Redis主要缺点有两个:

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

    (2) 耗内存。尽管Redis对一些数据结构采用了压缩算法存储,但占用内存量还是过高。

    4. Redis 的应用场景

    Redis的作者antirez曾笑称其为一个数据结构服务器(data structures server),的确,利用Redis灵活多变的数据结构和数据操作,我们可以很容易的实现各种功能,下面列举几个典型的操作:

    (1) 计数器

    Redis的命令均是原子性的,可以很容易使用INCR、DECR命令来构建计数器系统

    (2) 获取最新的N个数据操作

    可使用list何种的LPUSH和LTRIM操作。

    (3) 排行榜应用,取TOP N操作

    上面一个操作是按时间就行排序,而这个则是用于自定义的一个条件,比如点击次数等,这时候可使用sorted set这种数据结构。

    更多应用场景,可参考一下几篇文章:

    【1】《redis 点滴》:http://www.jeffkit.info/2011/05/994/

    【2】 Redis中7种集合类型应用场景:http://blog.prosight.me/index.php/2011/08/802

    【3】  Redis作者谈Redis应用场景:http://blog.nosqlfan.com/html/2235.html

    5. Redis 使用体验

    (1)选定某个数据库select

    对于SQL类的数据库,我们可以创建n个数据库,且每个数据库都对应一个名字,我们通常会先选择一个数据库,再对数据库中的表操作,而Redis则不同,在Redis中,数据库被赋以一个整数编号(从0开始),默认情况下是对数据库0进行操作,数据库的数目可以在配置文件redis.conf中databases属性指定。

    (2)数据库存储和检索

    直接使用http://redis.io/commands上的命令完成数据存储和检索即可

    1. Redis 是什么

    Redis是一个开源的使用ANSI C语言编写的基于内存的key/value存储系统,与memcache类似,但它支持的value类型更多,包括:字符串(string)、链表(list)、集合(set)、有序集合(sorted set)和hash tablehttp://blog.nosqlfan.com/html/2235.html等,这些数据类型支持push/pop、add/remove、交集并集差集及其他更丰富的操作,且这些操作均是原子性的。

    按照分布式领域的CAP理论,Consisency、Availability、Tolerance to network Partitions这三个部分在任何系统架构实现时,只能同时满足其中两点,没法三者兼顾。Redis是一个数据库,它将重点放在了Consisency和Availability上,因而Redis只是一个单机的key/value系统,并不直接支持分布式,同时考虑到Tolerance to network Partitions,它支持将数据同步到多台从库上。

    2. Redis 有哪些优点

    与memcache和MySQL等类似产品比较,Redis有以下几个优点:

    (1) 非常丰富的数据结构,且这些数据结构的常见操作均是原子性的;

    (2) 高速读写。Memcached提供了CAS命令,可以保证多个并发访问操作同一份数据的一致性问题。 Redis没有提供CAS命令,不过Redis提供了事务的功能,可以保证一串 命令的原子性,中间不会被任何操作打断。MYSQL使用了锁,而memcache未使用锁,进而效率极高。总之,Redis用自己实现的事件分离器,代码量很短,没有CAS,没有lock,因而效率非常高。

    关于memcache与redis的比较,可参考这篇文章:《Redis与Memcached的比较》http://tech.it168.com/a2011/0818/1234/000001234403_1.shtml

    3. Redis 有哪些缺点

    Redis主要缺点有两个:

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

    (2) 耗内存。尽管Redis对一些数据结构采用了压缩算法存储,但占用内存量还是过高。

    4. Redis 的应用场景

    Redis的作者antirez曾笑称其为一个数据结构服务器(data structures server),的确,利用Redis灵活多变的数据结构和数据操作,我们可以很容易的实现各种功能,下面列举几个典型的操作:

    (1) 计数器

    Redis的命令均是原子性的,可以很容易使用INCR、DECR命令来构建计数器系统

    (2) 获取最新的N个数据操作

    可使用list何种的LPUSH和LTRIM操作。

    (3) 排行榜应用,取TOP N操作

    上面一个操作是按时间就行排序,而这个则是用于自定义的一个条件,比如点击次数等,这时候可使用sorted set这种数据结构。

    更多应用场景,可参考一下几篇文章:

    【1】《redis 点滴》:http://www.jeffkit.info/2011/05/994/

    【2】 Redis中7种集合类型应用场景:http://blog.prosight.me/index.php/2011/08/802

    【3】  Redis作者谈Redis应用场景:http://blog.nosqlfan.com/html/2235.html

    5. Redis 使用体验

    (1)选定某个数据库select

    对于SQL类的数据库,我们可以创建n个数据库,且每个数据库都对应一个名字,我们通常会先选择一个数据库,再对数据库中的表操作,而Redis则不同,在Redis中,数据库被赋以一个整数编号(从0开始),默认情况下是对数据库0进行操作,数据库的数目可以在配置文件redis.conf中databases属性指定。

    (2)数据库存储和检索

    直接使用http://redis.io/commands上的命令完成数据存储和检索即可

    (3)支持事务

    MULTI, EXEC, DISCARD 和 WATCH 命令是Redis事务的基石。一个Redis事务允许一组Redis命令单步执行,并提供下面两个重要保证:一个事务中的所有命令串行执行;要么全部命令要么没有任何命令被处理。具体可参开这篇文章:http://blog.xiping.me/2010/12/transaction-in-redis.html

    (4) Redis客户端

    Redis支持非常各种语言的客户端,具体参:http://redis.io/clients

    原创文章,转载请注明: 转载自董的博客

    本文链接地址: http://dongxicheng.org/nosql/redis-code-basic-points/

    作者:Dong,作者介绍:http://dongxicheng.org/about/

    本博客的文章集合:

    (3)支持事务

    MULTI, EXEC, DISCARD 和 WATCH 命令是Redis事务的基石。一个Redis事务允许一组Redis命令单步执行,并提供下面两个重要保证:一个事务中的所有命令串行执行;要么全部命令要么没有任何命令被处理。具体可参开这篇文章:http://blog.xiping.me/2010/12/transaction-in-redis.html

    (4) Redis客户端

    Redis支持非常各种语言的客户端,具体参:http://redis.io/clients

    原创文章,转载请注明: 转载自董的博客

    本文链接地址: http://dongxicheng.org/nosql/redis-code-basic-points/

    作者:Dong,作者介绍:http://dongxicheng.org/about/

    本博客的文章集合:

  • 相关阅读:
    C++与AS3
    基于Hadoop的大数据平台实施记——整体架构设计
    as3用鼠标拖动图形拼图——灰常简单的教程
    as3 与js相互通信
    cocos2d-x获取系统时间
    lucene3.6笔记添加搜索功能
    Ubuntu小私房(3)--Uubutnu启动美化大变身
    C++一维数组和指针的关系总结
    poj2486 Apple Tree (树形dp)
    opencv 中cvZero()的使用
  • 原文地址:https://www.cnblogs.com/kluan/p/6020163.html
Copyright © 2011-2022 走看看