Redis简介

Jun 13, 2015


之前讲到了使用django-redis作为项目缓存,其实redis的作用不仅仅只有缓存,诸如消息队列、关系等都可以通过redis来实现,下面主要是redis的一些简介和基础知识


redis的优势

  • Redis主要特点如下:

    • Redis数据库完全在内存中,使用磁盘仅用于持久性

    • 相比许多键值数据存储,Redis拥有一套较为丰富的数据类型

    • Redis可以将数据复制到任意数量的从服务器

    • Redis的速度非常快,每秒能执行约11万集合,每秒约81000+条记录

    • 所有Redis操作是原子的,这保证了如果两个客户端同时访问的Redis服务器将获得更新后的值


redis数据类型

  • 字符串:Redis字符串是二进制安全的,这意味着他们有一个已知的长度没有任何特殊字符终止,所以你可以存储任何东西,512兆为上限。

  • 哈西:Redis的哈希是键值对的集合。 Redis的哈希值是字符串字段和字符串值之间的映射,因此它们被用来表示对象。

  • 列表:Redis的列表是简单的字符串列表,排序插入顺序。您可以添加元素到Redis的列表的头部或尾部。列表的最大长度为 2^32 - 1 个元素。

  • 集合:Redis的集合是字符串的无序集合。

  • 有序集合:Redis的有序集合类似于Redis的集合,字符串不重复的集合。不同的是,虽然成员具有唯一性,分数可能会重复。


redis的启动和安装

  • 安装:

    • 下载页面: http://redis.io/

    • sudo make test

    • sudo make install

  • 服务器启动:

    • 普通启动:redis-server

    • 传递参数配置文件,并覆盖某些参数:redis-server path/to/redis/confug.conf –loglevel warning

  • 客户端启动:

    • 本地:redis-cli

    • redis-cli -h host -p port -a password 远程启动

    • 检查是否处于工作状态:

      
        $redis-cli
        redis 127.0.0.1:6379> ping
        PONG
        

      或者使用echo命令检测

  • 多数据库

    • 默认支持16个数据库,建立连接后自动选择0,可通过select 1进行切换,不支持单独为某一数据库设置密码。尽量保证某一应用只针对在某一数据库。

redis的一些术语

  • 事务: 在一个事务中的所有命令按顺序执行作为单个隔离操作。通过另一个客户端发出的请求在Redis的事务的过程中执行,这是不可能的。 Redis的事务具有原子性。原子意味着要么所有的命令都执行或都不执行

  • 链接:Redis的连接命令基本上都是用于管理与Redis的服务器客户端连接。

  • 还原:要恢复Redis的数据只需移动 Redis 的备份文件(dump.rdb)到 Redis 目录,然后启动服务器。

  • 基准:Redis基准是公用工具同时运行Ñ命令检查Redis的性能。

  • 客户端连接:Redis接受配置监听TCP端口和Unix套接字客户端的连接。 客户端套接字置于非阻塞状态,因为Redis使用复用和非阻塞I/O操作。

  • 管道传输:客户端可以发送多个请求给服务器,而无需等待答复所有,并最后读取在单个步骤中的答复。这种技术的好处是极大地改善协议的性能。通过管道将慢互联网连接速度从5倍的连接速度提高到localhost至少达到百过倍

  • 分区: 好处:

    • 它允许更大的数据库,使用的多台计算机的存储器的总和。如果不分区,一台计算机的内存可支数量有限。

    • 它允许以大规模的计算能力,以多个内核和多个计算机,以及网络带宽向多台计算机和网络适配器。

    缺点:

    • 通常不支持涉及多个键的操作。涉及多个键的Redis事务不能被使用。

    • 当分区时,数据处理比较复杂,比如要处理多个RDB/AOF文件,使数据备份需要从多个实例和主机聚集持久性文件。

    • 添加和删除的能力可能很复杂。

    分类:

    • 范围分区:范围分区被映射对象转化为具体的Redis实例的范围内实现。假定在本例中用户ID0〜ID10000将进入实例R0,而用户形成ID10001至20000号将进入实例R1等等。

    • 散列分区:在这种类型的分区,一个散列函数(例如,模数函数)被用于转换键成数字,然后数据被存储在不同redis的实例