什么是redis

Redis 是一个开源(BSD 许可)的内存数据结构存储系统,可用作数据库、缓存和消息中间件。 It supports many types of data structures, such as strings, hashes, lists, sets, sorted sets And range query, bitmaps, hyperloglogs and 地理空间索引半径查询。 Redis has built-in replication,Lua scripting, LRU event,transactions And different levels of Disk persistence , and passed Redis Sentinel And automatic Partition (Cluster)提供高可用性。

测试性能

Redis benchmark 是一款压力测试工具,也是官方的性能测试工具。

用法:redis benchmark [option] [option value]

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

1u003d保持活动状态 0u003d重新连接

1

8

-r

SET/GET/INCR 使用随机键,Sadd 使用随机值

9

-P

管道请求

1

10

-q

强制退出redis。仅显示查询/秒值

11

–csv

以 CSV 格式导出

12

*-L *(L的小写字母)

生成循环并永久执行测试

13

-t

仅运行以逗号分隔的测试命令列表。

14

*-i * (i 的大写字母)

空闲模式。仅打开 N 个空闲连接并等待。

开始测试:

#测试100个并发连接100000个请求

redis 基准 -h 本地主机 -p 6379 -c 100 -n 100000

入门知识

redis默认有16个数据库,可以在配置文件中找到

默认使用 0 数据库。您可以使用 select 命令切换数据库。

//查看数据库大小

127.0.0.1:6379> 数据库大小

(整数)4

//切换数据库

127.0.0.1:6379> 选择 3

好的

127.0.0.1:6379[3]> 数据库大小

(整数) 0

不同的数据库相互独立

127.0.0.1:6379[3]> 设置名称 lingg

好的

127.0.0.1:6379[3]> 数据库大小

(整数)1

127.0.0.1:6379[3]> 获取名称

"灵感"

127.0.0.1:6379[3]> 选择 1

好的

127.0.0.1:6379[1]> 获取名称

(无)

127.0.0.1:6379[1]>

redis是单线程的

为什么?

根据官方FAQ,由于Redis是基于内存的操作,CPU并不是Redis的瓶颈。 Redis 最可能的瓶颈是机器内存大小或网络带宽。由于单线程很容易实现,CPU也不会成为瓶颈,所以采用单线程方案是顺理成章的(毕竟使用多线程会很麻烦!)。

问题:为什么单线程这么快?

1、基于内存的操作:首先,传统数据库的I/O速度由于多线程慢而慢,而大部分redis操作都是在内存中进行的。

2.优化后:redis自己的数据结构是专门设计的。数据结构简单,对数据结构的操作也简单

3、减少开销:由于redis是单线程的,避免了多线程cpu时间片旋转锁所需的上下文切换的开销。各种锁都没有问题,也没有加锁和释放锁的操作。

4.复用I/O:使用linux的复用I/O模型中的epoll模型和非阻塞I/O模型。IO模型介绍见这里

5、自建VM:底层实现方式和与客户端通信的应用协议不同。 redis 构建了自己的VM,因为通过系统调用调用系统函数时有一定的时间开销。

但是,我们不能通过单线程来充分发挥多核CPU的性能,但是我们可以通过在单机上打开多个Redis实例来提高它!

核心:redis 把所有的数据都放在内存中,所以使用单线程操作是最高效的,多线程的(CPU上下文切换:耗时)。对于内存来说,如果没有上下文切换,效率最高。同一个context用于多次读写CPU,在内存的情况下,单线程效率最高。

基本操作

查看所有键:键*

127.0.0.1:6379> 键 *

  1. “军民主义”

2)“关键:__rand_int__”

  1. “我的哈希”

4)“计数器:__rand_int__”

清空当前数据库:flushdb

127.0.0.1:6379[3]> 选择 0

好的

127.0.0.1:6379> 键 *

  1. “军民主义”

2)“关键:__rand_int__”

  1. “我的哈希”

4)“计数器:__rand_int__”

127.0.0.1:6379> 刷新数据库

好的

127.0.0.1:6379> 键 *

(空数组)

清除所有数据库:flush

127.0.0.1:6379> 选择 0

好的

127.0.0.1:6379> 键 *

(空数组)

127.0.0.1:6379> 设置名称“lingg”

好的

127.0.0.1:6379> 获取名称

"灵感"

127.0.0.1:6379> 选择 2

好的

127.0.0.1:6379[2]> 冲洗

好的

127.0.0.1:6379[2]> 选择 0

好的

127.0.0.1:6379> 键 *

(空数组)

127.0.0.1:6379>

Logo

Redis社区为您提供最前沿的新闻资讯和知识内容

更多推荐