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上的命令完成数据存储和检索即可

(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/

本博客的文章集合:http://dongxicheng.org/recommend/

时间: 2024-08-03 19:09:44

redis学习研究--基础知识的相关文章

Ant学习-001-ant 基础知识及windows环境配置

一.Ant 概要基础知识 Apache Ant 是一个将软件编译.测试.部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发,用以构建应用,或结合其他开源测试工具例如 git.TestNG等搭建持续集成测试开发环境,从而高效.高质量的构建产品. Ant 有以下一些优点: 跨平台,可移植.Ant 是 Java 语言编写的,所以有很好的跨平台性和可移植性,无论是在 windows.Linux,还是 mac. 操作简单. Ant 是由一个内置任务和可选任务组成的,运行时需要一个构

hadoop学习笔记——基础知识及安装

1.核心 HDFS  分布式文件系统    主从结构,一个namenoe和多个datanode, 分别对应独立的物理机器 1) NameNode是主服务器,管理文件系统的命名空间和客户端对文件的访问操作.NameNode执行文件系统的命名空间操作,比如打开关闭重命名文件或者目录等,它也负责数据块到具体DataNode的映射 2)集群中的DataNode管理存储的数据.负责处理文件系统客户端的文件读写请求,并在NameNode的统一调度下进行数据块的创建删除和复制工作. 3)NameNode是所有

JAVA程序员需要学习哪些基础知识?

极客营认为想要成为一个合格的java程序员,必须需要牢固的基础,这样在未来接触新的知识的时候,才能快速吸收,极客营认为基础不牢固的程序员,随时都会被新的知识和技术所淘汰,下盘不稳风一吹就倒,那么作为一个合格的java程序员应该具备哪些知识呢?今天极客营就来和大家分享java高手之路上的必备基础知识: 一.面向对象的知识:JAVA是一个面向对象的开发语言,因此熟悉面向对象对学习JAVA很有必要,您要了解:什么是对象,什么是类;什么是封装,什么是多态,什么是继承;什么是抽象类,什么是接口.了解了概念

Web前端学习①Web基础知识

<1>Web前端Web基础知识 一.前端工程师的角色 一个网站的建设需要以下角色: ①策划人员:方案 ②美工/UI设计师:设计图 (.psd  .rp) ③前端工程师:静态网页 ④后端工程师:获取数据 ( Java   PHP  .NET) 二.Web的基础知识 1.Web(万维网)与Internet(因特网) ①Internet简介:定义.主要服务.基本实现技术 ②Web与Internet关系 Web是Internet提供的服务. ③Web简介:万维网 2.Web的工作原理 ①Web的工作原

如何学习安卓(android)开发,需要学习哪些基础知识?

随着智能手机的流行,现在很多大大小小的开发商都需要在手机上具备客户端,这里是一片强大的吸金磁场,那么很多想学习android的朋友,都会有个疑问,那就是:安卓(android)应该怎么学,需要哪些基础知识? 下面是我根据自己和周围朋友的一些经验,总结出来的几点,希望对想学安卓(Android)开发的朋友有所帮助. 1.安卓(Android)开发的分类: (1)安卓(Android)底层开发:我们需要掌握C语音.Linux操作系统等比较底层的知识,以后的发展方向应该是驱动.嵌入式开发.协议开发.

.net学习必备基础知识

进入21世纪,开发Windows程序已经成为以Dll为基础,而.NET  Framwork也日益成为我们开发软件的有利工具,下边我们就来先看一下,学习.net的一些必备基础知识. 一,首先.net是由公共语言执行时期(CLR)与基底类别库(BCL)组成.这两个东西是什么呢?我们先来看一下: 1,CLR是公共语言运行时,Common language Runtime 和Java虚拟机一样也是一个运行时环境,他负责资源管理(内存分配和垃圾收集),并保证应用和底层操作系统之间必要的分离.也就是给了我们

web前端学习的基础知识1

Web前端是一个很新的职业,在国内乃至国际上真正开始受到重视的时间不超过5年.Web前端开发是从网页制作演变而来的,名称上有很明显的时代特征.目前看来,这个一个就业前景很大的职业. web前端的学习不能一蹴而就,也不是那么轻而易举就能够学会的,需要我们慢慢的去学习,去理解. 今天,给大家说的就是一些web前端学习中的一些基础知识. web前端中使用的语言不是我们人与人之间进行交流的语言,而是计算机语言.计算机的语言有很多种:C.PHP.Rudy.Java.C#.Basic.JS.....这里主要

SQLServer学习笔记&lt;&gt;.基础知识,一些基本命令,单表查询(null top用法,with ties附加属性,over开窗函数),排名函数

Sqlserver基础知识 (1)创建数据库 创建数据库有两种方式,手动创建和编写sql脚本创建,在这里我采用脚本的方式创建一个名称为TSQLFundamentals2008的数据库.脚本如下:   同时往数据库表插入一些数据,用户后续对数据库的sql的练习.在这里有需要的可以下载相应的脚本进行数据库的初始化.我放到百度云上面,请戳 我:http://yun.baidu.com/share/link?shareid=3635107613&uk=2971209779,提供了<Sqlserver

汇编语言学习(基础知识)01

汇编语言(基础知识)01 1.  汇编语言得主体是汇编指令.汇编指令和机器指令的差别在于指令的表示方法上.汇编指令是机器指令便于记忆的书写格式. 2.  操作 机器指令 汇编指令 3.  汇编语言的组成: (1)       汇编指令:机器码的助记符,有对应的机器码. (2)       伪指令:没有对应的机器码,由编译器执行,计算机并不执行. (3)       其他符号:如+.-.*./等,有编译器识别,没有对应的机器码. 4.  存储器 cpu是计算机的核心部件,他控制整个计算机的运行并进