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

示例

下面的示例显示了保护Redis实例的步骤。

127.0.0.1:6379> CONFIG get requirepass
1) "requirepass"
2) ""
Shell

默认情况下,此属性为空,这表示还没有为此实例设置密码。您可以通过执行以下命令更改此属性。

127.0.0.1:6379> CONFIG set requirepass "yiibai"
OK
127.0.0.1:6379> CONFIG get requirepass
1) "requirepass"
2) "yiibai"
Shell

设置密码后,如果任何客户端运行命令而不进行身份验证,则会返回一个(error) NOAUTH Authentication required.的错误信息。 因此,客户端需要使用AUTH命令来验证。

语法

以下是AUTH命令的基本语法。

127.0.0.1:6379> AUTH password
Shell

示例

127.0.0.1:6379> AUTH "yiibai"
OK
127.0.0.1:6379> SET mykey "Test value"
OK
127.0.0.1:6379> GET mykey
"Test value"

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

语法

以下是基准测试命令的基本语法。

yiibai@ubuntu:~$ redis-benchmark [option] [option value]
Shell

示例

以下示例通过调用100000个命令检查Redis。

yiibai@ubuntu:~$ redis-benchmark -n 100000
====== PING_INLINE ======
100000 requests completed in 1.56 seconds
50 parallel clients
3 bytes payload
keep alive: 1 97.59% <= 1 milliseconds
99.78% <= 2 milliseconds
99.83% <= 3 milliseconds
99.86% <= 4 milliseconds
99.91% <= 5 milliseconds
99.98% <= 6 milliseconds
99.99% <= 47 milliseconds
100.00% <= 47 milliseconds
64226.07 requests per second ====== PING_BULK ======
100000 requests completed in 1.57 seconds
50 parallel clients
3 bytes payload
keep alive: 1 98.40% <= 1 milliseconds
99.68% <= 2 milliseconds
99.91% <= 3 milliseconds
99.94% <= 4 milliseconds
99.95% <= 45 milliseconds
100.00% <= 45 milliseconds
63694.27 requests per second ====== SET ======
100000 requests completed in 1.49 seconds
50 parallel clients
3 bytes payload
keep alive: 1 97.58% <= 1 milliseconds
99.92% <= 2 milliseconds
99.94% <= 3 milliseconds
100.00% <= 3 milliseconds
67340.07 requests per second
Shell

以下是Redis基准测试中可用选项的列表。

序号 选项 说明 默认值
1 -h 指定服务器主机名 127.0.0.1
2 -p 指定服务器端口 6379
3 -s 指定服务器套接字  
4 -c 指定并行连接的数量 50
5 -n 指定请求的总数 10000
6 -d 指定SET/GET值的数据大小(以字节为单位) 2
7 -k 1=keep alive, 0=reconnect 1
8 -r 使用SET/GET/INCR的随机键,SADD的随机值  
9 -p 管道<numreq>请求 1
10 -h 指定服务器主机名  
11 -q 强制让Redis安装。 只显示query/sec  
12 --csv 以CSV格式输出  
13 -l 生成循环,永久运行测试  
14 -t 只运行逗号分隔的测试列表  
15 -I 空闲模式。 只打开N个空闲连接并等待

示例

下面的示例显示了Redis基准实用程序中多个选项的使用。

redis-benchmark -h 127.0.0.1 -p 6379 -t set,lpush -n 100000 -q  

SET: 146198.83 requests per second
LPUSH: 145560.41 requests per second

Redis在配置的监听TCP端口和Unix套接字上等待和接受客户端的连接(如果已启用)。 当接受新的客户端连接时,执行以下操作 -

  • 由于Redis使用复用和非阻塞I/O,因此客户端套接字处于非阻塞状态。
  • 设置TCP_NODELAY选项是为了确保连接不延迟。
  • 创建可读文件事件,以便Redis能够在套接字上读取新数据时收集客户端查询。

最大客户数

在Redis配置文件(redis.conf)中,有一个名称为maxclients的属性,它描述了可以连接到Redis的客户端的最大数量。

以下是命令的基本语法。

127.0.0.1:6379> config get maxclients
1) "maxclients"
2) "3984"
Shell

默认情况下,此属性设置为10000(取决于操作系统的文件描述符限制的最大数量),但您可以更改此属性。

示例

在以下示例中,我们已将客户端的最大数目设置为100000,并启动服务器。

yiibai@ubuntu:~$ redis-server --maxclients 100000
Shell

客户端命令

编号 命令 描述
1 CLIENT LIST 返回连接到Redis服务器的客户端列表
2 CLIENT SETNAME 为当前连接分配/设置新的名称
3 CLIENT GETNAME 返回由CLIENT SETNAME设置的当前连接的名称
4 CLIENT PAUSE 这是一个连接控制命令,能够将所有Redis客户端按指定的时间量(以毫秒为单位)挂起
5 CLIENT KILL 此命令关闭指定的客户端连接。

Redis是一个TCP服务器,支持请求/响应协议。 在Redis中,请求通过以下步骤完成:

  • 客户端向服务器发送查询,并从套接字读取,通常以阻塞的方式,用于服务器响应。
  • 服务器处理命令并将响应发送回客户端。

管道的意义

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

示例

要检查Redis管道,只需启动Redis实例,并在终端中键入以下命令。

$(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
Shell

在上面的例子中,我们将使用PING命令检查Redis连接。这里设置了一个名称为tutorial的字符串,值为redis。 然后得到键值,并增加 visitor 数量三次。 在结果中,我们可以看到所有命令都提交到Redis一次,Redis在一个步骤中提供所有命令的输出。

管道的好处

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

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

分区的优点

  • 它允许更大的数据库,使用更多计算机的内存总和。如果没有分区,则限制为单个计算机可以支持的内存量。
  • 它允许将计算能力扩展到多个核心和多个计算机,并将网络带宽扩展到多个计算机和网络适配器。

分区的缺点

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

分区类型

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

范围分区

范围分区通过将对象的范围映射到特定的Redis实例来实现。假设在上面示例中,从ID 0到ID 10000的用户将进入实例R0,而从ID 10001到ID 20000的用户将进入实例R1,以此类推。

哈希分区

在这种类型的分区中,使用散列函数(例如,模函数)将键转换成数字,然后将数据存储在不同的Redis实例中。

Redis记录-Redis高级应用的更多相关文章

  1. Redis记录-Redis介绍

    Redis是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的Web应用程序. Redis有三个主要特点,使它优越于其它键值数据存储系统 - Redis将其数据库完全保存在内存中, ...

  2. Redis记录-Redis命令

    Redis命令是用于在Redis服务器上执行一些操作.要在Redis服务器上运行命令,需要一个Redis客户端.Redis客户端在Redis包中有提供,这个包在我们前面的安装教程中就有安装过了. 语法 ...

  3. Redis记录-redis和memcached的区别

    1.Redis和Memcache都是将数据存放在内存中,都是内存数据库.不过memcache还可用于缓存其他东西,例如图片.视频等等: 2.Redis不仅仅支持简单的k/v类型的数据,同时还提供lis ...

  4. Redis基础、高级特性与性能调优

    本文将从Redis的基本特性入手,通过讲述Redis的数据结构和主要命令对Redis的基本能力进行直观介绍.之后概览Redis提供的高级能力,并在部署.维护.性能调优等多个方面进行更深入的介绍和指导. ...

  5. Redis 基础、高级特性与性能调优

    本文将从Redis的基本特性入手,通过讲述Redis的数据结构和主要命令对Redis的基本能力进行直观介绍.之后概览Redis提供的高级能力,并在部署.维护.性能调优等多个方面进行更深入的介绍和指导. ...

  6. redis的使用和安装,redis基础和高级部分

    redis的使用和安装,redis基础和高级部分 在后端开发中,为了提高性能,对于一些经常查询但是又不太变化的内容会使用redis,比如前端的列表展示项等,如果数据有变化也可以清空缓存,让前端查一次数 ...

  7. 【redis】redis常用命令及操作记录

    redis-cli是Redis命令行界面,可以向Redis发送命令,并直接从终端读取服务器发送的回复. 它有两种主要模式:一种交互模式,其中有一个REPL(read eval print loop), ...

  8. JAVA记录-redis缓存机制介绍(一)

    1.redis介绍 Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Re ...

  9. CentOS上安装redis记录

    下载稳定版 curl -O http://download.redis.io/releases/redis-stable.tar.gz tar -zxvf redis-stable.tar.gz cd ...

随机推荐

  1. Easy Pipeline,一种轻量级的Python Pipeline库

    嗯,很久没有写博客了,最近的工作都是偏开发性质的,以至于没有时间对自己感兴趣的领域进行探索,感觉个人的成长停滞了一些.如何在枯燥的工作中,提取出有助于自己成长的养分,对于每个人来说都是不小的考验. 这 ...

  2. Spring+SpringMVC+MyBatis整合基础篇

    基础篇 Spring+SpringMVC+MyBatis+easyUI整合基础篇(一)项目简介 Spring+SpringMVC+MyBatis+easyUI整合基础篇(二)牛刀小试 Spring+S ...

  3. 解决SSH登录用户执行的命令部分环境变量参数不生效的问题

    问题概况 linux机器在/etc/profile配置完成环境变量后,SSH到目标机器执行命令,但是获取不到已配置的环境变量值. 例如场景: 在/etc/profile配置了http代理 export ...

  4. CodeMirror 小册子

    User manual and reference guide      version 5.41.1 用户手册和参考指南 CodeMirror is a code-editor component ...

  5. es6箭头函数使用场景导致的一些问题

    1. 今天在使用draggable组件时,监听dragmove事件时获取到的事件对象有一些异常, 代码如下 draggable.on('drag:move', (event) => { cons ...

  6. Daily Scrumming* 2015.12.16(Day 8)

    一.团队scrum meeting照片 二.成员工作总结 姓名 任务ID 迁入记录 江昊 任务1036 https://github.com/buaaclubs-team/temp-front/com ...

  7. Linux内核设计(第一周)——从汇编语言出发理解计算机工作原理

    Linux内核设计(第一周)——从汇编语言出发理解计算机工作原理 计算机工作原理 汇编指令 C语言代码汇编分析 by苏正生 原创作品转载请注明出处 <Linux内核分析>MOOC课程htt ...

  8. 第二阶段冲刺——six

    个人任务: 季方:优化统计团队博客的方法. 马佳慧:选择功能界面的logo.背景与功能选择框的整体设计组合. 司宇航:合并程序(添加打印txt). 王金萱:搭建网络服务器,上传数据库及程序. 站立会议 ...

  9. PAT 甲级 1115 Counting Nodes in a BST

    https://pintia.cn/problem-sets/994805342720868352/problems/994805355987451904 A Binary Search Tree ( ...

  10. Linux命令(二十二) 改变文件权限 chomd

    目录 1.命令简介 2.常用参数介绍 3.实例 4.直达底部 命令简介 chmod 命令是用来改变文件权限或目录的命令,可以将指定文件的拥有着改为指定的用户或组,用户可以是用户名或用户ID,组可以是组 ...