转自:http://www.cnblogs.com/xing901022/p/4863929.html


1 什么是Redis

Redis(REmote DIctionary Server,远程数据字典服务器)是开源的内存数据库,常用作缓存或者消息队列。

Redis的特点:
Redis存在于内存,使用硬盘作为持久化;每秒十万读写。
具有丰富的数据结构,字符串、哈希表、列表、集合、有序集合;提供交集、并集、差集等操作。
设置TTL存活时间,到期自动删除。
Redis单线程、Memcached多线程;对于一般的应用场景,单线程也足够使用,优势还是在于多数据类型、持久化。
可以将数据复制到任意数量的从服务器。

2 Redis中的数据结构

字符串
SET keyname value 设置键值keyname的值是value
KEYS * 获取所有的键值
GET keyname 获取keyname的值
EXISTS keyname 判断是否存在键值keyname
DEL keyname 删除键值keyname
TYPE keyname 判断keyname的类型(string字符串,hash哈希表,list列表,set集合,zset有序集合)
哈希表
HSET keyname key value 添加一个哈希属性和值
HGET keyname key 获取值
HKEYS keyname 获取全部的key值
HVALS keyname 获取全部的value值
HGETALL keyname 获取所有的值
列表
通过双向链表实现,头尾操作均为O(1),获取指定元素比较慢。

LPUSH keyname value1或者LPUSH keyname value1 value2 在左边插入
RPUSH keyname value2 在右边插入
LRANGE keyname 0 -1 查询所有的元素
LPOP keyname
RPOP keyname
集合
元素唯一,但是没有顺序。使用值为空的哈希表实现,操作都是O(1)。

SADD keyname value1 value2 添加值
SREM keyname value1 删除
SMEMBERS keyname查询所有元素
有序集合
使用哈希和跳跃表实现,中间速度也很快。

ZADD keyname key value 添加
ZRANGE keyname start end 获取指定范围的元素
与列表的比较:

相同:

都是有序的
都可以获取某一范围的元素
不同:

列表通过双向链表实现,两端数据存取极快,中间缓慢
有序集合通过哈希和跳跃表实现,中间速度也很快,为O(log(N))
列表不能简单地调整某个元素的位置,有序集合可以
有序集合比列表更好费内存

3 Redis持久化

Redis提供了两种持久化方式:1 RDB快照方式 2 AOF方式

RDB方式:

满足一定条件时,会创建一个子进程,复制当前的数据,把数据写入到硬盘中某个文件,写入完成后替换原来的存储文件。数据一般存储在dump.rdb中。UNIX系统中支持写时复制,即刚开始会执行持久化写入磁盘的操作,如果此时有其他的数据发生改变,就复制一份数据执行。

除了这种自动的快照方式,还支持命令方式持久化:

SAVE:通过阻塞的方式,用父进程来持久化,此时无法执行其他的请求。
BGSAVE:通过fork子进程的方式,持久化。
AOF方式:

每次操作都会记录命令,这样会造成某些命令的冗余,比如添加了一个属性,再删除,那么这两个操作都是冗余的。redis提供了一些优化,所以可以避免这些冗余信息。命令记录在appendonly.aof中

4 Redis的消息队列

Redis用于消息队列,通常有两种种使用方式:

LIST:基于列表的方式,所有的消费者数据加起来是列表中的所有数据.

发布/订阅:每个消费者订阅独立的channel,每个数据都是独立的。

redis——基础介绍的更多相关文章

  1. Redis基础介绍及安装示例

    1.基本概念 Redis是由Salvatore Sanfilippo(意大利)开发的一个开源的高性能键值存储数据库,于2009年发布第一个版本并与同一年开源,官方站点:http://www.redis ...

  2. Redis基础知识补充及持久化、备份介绍(二)--技术流ken

    Redis知识补充 在上一篇博客<Redis基础认识及常用命令使用(一)--技术流ken>中已经介绍了redis的一些基础知识,以及常用命令的使用,本篇博客将补充一些基础知识以及redis ...

  3. Redis基础知识补充及持久化、备份介绍

    Redis知识补充 在上一篇博客<Redis基础认识及常用命令使用(一)–技术流ken>中已经介绍了redis的一些基础知识,以及常用命令的使用,本篇博客将补充一些基础知识以及redis持 ...

  4. Redis安装介绍

    Redis安装介绍 一.Linux版本及配置 1.  Linux版本:Red Hat Enterprise Linux 6虚拟机 2.  配置: 内存:1G:CPU:1核:硬盘:20G 二.Redis ...

  5. [.net 面向对象程序设计深入](14)Redis——基础

    [.net 面向对象程序设计深入](14)Redis——基础 很长一段时间没更新博客了,坚持做一件事,真不是件容易的事,后面我会继续尽可能的花时间更新完这个系列文章. 因这个系列的文章涉及的范围太大了 ...

  6. Redis全面介绍

    最近重新认识了一下Redis,借着这个机会,也整理一篇算是比较详尽和全面的文章吧.   缓存 缓存就是数据交换的缓冲区(称作Cache)——摘自百度百科.无论是在计算机硬件体系结构还是软件体系结构中, ...

  7. [.net 面向对象程序设计深入](36)Redis——基础

    [.net 面向对象程序设计深入](36)Redis——基础 很长一段时间没更新博客了,坚持做一件事,真不是件容易的事,后面我会继续尽可能的花时间更新完这个系列文章. 因这个系列的文章涉及的范围太大了 ...

  8. 4 Redis 配置文件介绍

    2016-12-22 14:28:39 该系列文章链接NoSQL 数据库简介Redis的安装及及一些杂项基础知识Redis 的常用五大数据类型(key,string,hash,list,set,zse ...

  9. Redis基础用法、高级特性与性能调优以及缓存穿透等分析

     一.Redis介绍 Redis是一个开源的,基于内存的结构化数据存储媒介,可以作为数据库.缓存服务或消息服务使用.Redis支持多种数据结构,包括字符串.哈希表.链表.集合.有序集合.位图.Hype ...

随机推荐

  1. 循环效率对比 js node c# mssql

  2. Unity5.1 新的网络引擎UNET(十五) Networking 引用--上

    http://blog.csdn.net/u010019717/article/details/46993697 孙广东  2015.7.21 本节提供了与网络系统一起使用的组件的详细信息. 1.Ne ...

  3. VS2012更改项目编译后文件输出目录

    1.现在我的解决方案里有存在两个项目,分别是类库项目ClassLibrary1和控制台项目ConsoleApplication1,默认情况下当解决方案重新生成后,这两个项目所对应的编译后文件分别会存在 ...

  4. isDebugEnabled作用

       早上写了日志级别,然后想起在使用的时候经常用isDebugEnabled,一鼓作气.彻底弄懂它: 现象 if (logger.isDebugEnabled()) { logger.debug(m ...

  5. GIS软件列表

    3map:行星地球项目由3map驱动,这是一个自由软件,由Telstra宽带基金会创建并支持,提供客户端与服务器的能力以在线再现虚拟地球. Amein!:其界面介于ArcMap和UMN Mapserv ...

  6. css3 keyframes animation

    html,body,div,span,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,address,big,cite,code,del,em,font,img ...

  7. JButton按钮

    1.方法 void  setSize(width,height):设置按钮大小 void  setBounds(x,y,width,heigth):设置按钮的左上角顶点位置和大小 void  setC ...

  8. HDU 3466

    Proud Merchants Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) ...

  9. iscroll4框架解析[webapp开发](转)

    概要 iScroll 4 这个版本完全重写了iScroll这个框架的原始代码.这个项目的产生完全是因为移动版webkit浏览器(诸如iPhone,iPad,Android 这些系统上广泛使用)提供了一 ...

  10. Java多线程-新特征-锁(上)

    在Java5中,专门提供了锁对象,利用锁可以方便的实现资源的封锁,用来控制对竞争资源并发访问的控制,这些内容主要集中在java.util.concurrent.locks 包下面,里面有三个重要的接口 ...