Redis相关知识

来源:互联网 发布:韩信点兵 算法 编辑:程序博客网 时间:2024/06/17 02:50

Redis教程及命令 -传送门

Redis简介

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。一个用于构建高性能的解决方案,,可扩展的Web应用程序。

三个特点

  • Redis将其数据库完全保存在内存中,仅使用磁盘进行持久化。
  • 与其它键值数据存储相比,Redis有一组相对丰富的数据类型。
  • Redis可以将数据复制到任意数量的从机中。

Redis的优点

  • 异常快
    • Redis非常快,每秒可执行大约110000次的设置(SET)操作,每秒大约可执行81000次的读取/获取(GET)操作。
  • 支持丰富的数据类型

    • string:就跟普通的键值对无区别,value是一个字符串
    • hash:被存储的value又是一个键值对
    • list:一个链表,分别有zipList、linkedList(底层编码方式)
    • set:存储字符串类型的无序集合,要求里面的字符串都不相同
    • sort-set:一个有序集合,里面的字符串与一个分值相关联,然后根据分值对所有的字符串排序的有序集合
  • 操作具有原子性

    • 所有Redis操作都是原子操作,这确保如果两个客户端并发访问,Redis服务器能接收更新的值。
  • 多实用工具
    • 可用于多种用例,如:缓存,消息队列(Redis本地支持发布/订阅),应用程序中的任何短期数据,例如,web应用程序中的会话,网页命中计数等。

Redis环境安装配置 - 传送门

Redis本地实现发布-订阅者模式

Redis本地实现发布-订阅者模式,发布者在订阅者接收消息时发布消息,传送消息的链路称为信道。这使得redis实现消息队列。

  • 订阅者订阅redisChat信道
SUBSCRIBE redisChat(信道名称自定义)
  • 发布者发布消息到redisChat信道
PUBLISH redisChat "this is a message"  

Redis事务

事务由MULTI启动,EXEC执行。

redis 127.0.0.1:6379> MULTI OK redis 127.0.0.1:6379> SET mykey "redis" QUEUED redis 127.0.0.1:6379> GET mykey QUEUED redis 127.0.0.1:6379> INCR visitors QUEUED redis 127.0.0.1:6379> EXEC1) OK 2) "redis" 3) (integer) 1

Redis脚本

Redis脚本用于使用Lua解释器来执行脚本。从Redis 2.6.0版开始内置到Redis中。使用脚本的命令是EVAL命令。

redis 127.0.0.1:6379 > EVAL "return {KEYS[1],KEYS[2],ATGS[1],ARGS[2]}" 2 key1 key2 first second 1) "key1" 2) "key2" 3) "first" 4) "second"

Redis备份

Redis数据库可以使用安全的方案,使得进行连接的任何客户端在执行命令之前都需要进行身份验证。要保护Redis安全,需要在配置文件中设置密码。

  • 为实例设置密码
    redis
    CONFIG get requirepass "xxxxxx"

Redis准则

Redis基准测试是通过同时运行n个命令来检查Redis的性能的实用程序。

  • 准则测试命令的基本语法
    redis
    yiibai@ubuntu:~$ redis-benchmark [option] [option value]

Redis客户端连接

  • Redis在配置的监听TCP端口和Unix套接字上等待和接受客户端的连接(如果已启用)。 当接受新的客户端连接时,执行以下操作
    • 由于Redis使用复用和非阻塞I/O,因此客户端套接字处于非阻塞状态。
    • 设置TCP_NODELAY选项是为了确保连接不延迟。
    • 创建可读文件事件,以便Redis能够在套接字上读取新数据时收集客户端查询。

Redis管道

管道的基本含义是,客户端可以向服务器发送多个请求,而不必等待回复,并最终在一个步骤中读取回复。

  • reids默认请求模式

    redis是一个TCP服务器,默认支持请求/响应模式。

  • 请求/响应步骤

    • 客户端向服务器发消息,以阻塞的方式,等待服务器响应。
    • 服务器处理命令并将响应发送回客户端。
  • 管道的好处

    大大提高了协议性能:通过管道从连接到本地主机速度增加五倍,因特网连接的至少快一百倍。

  • 示例:
$(echo -en "PING\r\n SET tutorial redis\r\nGET tutorial\r\nINCR visitor\r\nINCR visitor\r\nINCR visitor\r\n"; sleep 10) | nc localhost 6379  +PONG +OK redis :1 :2 :3

Redis分区

分区是将数据拆分为多个Redis实例的过程,因此每个实例只包含一部分键。

  • 分区类型

    Redis中有两种类型的分区。假设有四个Redis实例:R0,R1 ,R2,R3以许多代表用户的键,如user:1,user:2,…等等。

    • 范围分区
      将对象的范围映射到特定的Redis实例来实现。从ID 0到ID 10000的用户将进入实例R0,而从ID 10001到ID 20000的用户将进入实例R1,以此类推。
    • 哈希分区
      在这种类型的分区中,使用散列函数(例如,模函数)将键转换成数字,然后将数据存储在不同的Redis实例中。
  • 分区的优点

    • 允许使用更大的数据库,不会再被单机最大内存限制
    • 将计算和宽带负担分摊给多台计算机
  • 分区的缺点
    • 通常不支持涉及多个键的操作。 例如,如果两个集合存储在映射到不同Redis实例的键中,则不能执行两个集合之间的交集操作
    • 不能使用涉及多个键的Redis事务
    • 分区粒度是关键,因此不可能使用单个巨大的键(如非常大的排序集合)来分割数据集。
    • 使用分区时,数据处理更复杂:例如必须处理多个RDB/AOF文件,并获得数据的备份,需要聚合来自多个实例和主机的持久性文件 。
    • 添加和删除容量可能很复杂:例如Redis Cluster支持大多数透明的数据重新平衡,具有在运行时添加和删除节点的能力。但是,其他系统(如客户端分区和代理)不支持此功能。但可以使用一种叫作Presharding的技术来处理这方面的问题。

Redis持久化

Redis采用RDB和AOF进行持久化处理,可单独使用,也可以两种结合使用
- RDB(默认的持久化方式)
- 实现方式
一定的时间间隔将内存中的数据持久化到磁盘中,实现内存快照
- 优点
RDB文件是一个二进制文件,根据时间点进行数据记录,可以对其进行压缩处理后占用的存储空间很小,压缩后的文件可以进行远程存储,方便备份和全量的复制。并且Redis重启后的恢复速度很快
- 缺点
会造成出故障的时间点到上一次持久化的时间间隔内的数据丢失,因此适合做冷备份,在数据恢复的时候要创建进程,有时会使机器短时间不可用
- AOF
- 实现方式
以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中的命令达到恢复数据的 目的
- 优点
以追加写命令的方式实现持久化,保证了更好的数据完整性,使目前主流的持久化方式
- 缺点
需要不断重写持久化文件来降低持久化文件的空间消耗

原创粉丝点击