redis+mget+java,Redis get vs. mget Benchmark

这篇博客通过bash脚本展示了Redis中get、mget和set、mset命令的性能基准测试。在不同数量的键值对下,比较了单个键操作与批量键操作的吞吐量。结果显示,随着批量操作键的数量增加,mget和mset的性能有所提升,但在达到一定数量后性能开始下降。测试环境为Manjaro Linux,Redis版本为5.0.8。
摘要由CSDN通过智能技术生成

Redis get vs. mget Benchmark

0. Background

Scripts

#!/bin/bash

key="testkey"

value="testvalue"

int=0

while (($int <= 1024)); do

echo -e $key$int $value

redis-cli set $key$int $value

let "int++"

done

#!/bin/bash

int=0

keys=""

while (($int < 64)); do

keys="$keys","'testkey$int'"

let "int++"

done

redis-benchmark -n 100000 script load "redis.call('mget'$keys)"

System Info

[p1gd0g@p1gd0g-pc ~]$ screenfetch

██████████████████ ████████ p1gd0g@p1gd0g-pc

██████████████████ ████████ OS: Manjaro 19.0.2 Kyria

██████████████████ ████████ Kernel: x86_64 Linux 5.4.31-1-MANJARO

██████████████████ ████████ Uptime: 1h 1m

████████ ████████ Packages: 1224

████████ ████████ ████████ Shell: bash

████████ ████████ ████████ Resolution: 1920x1080

████████ ████████ ████████ DE: GNOME 3.36.1

████████ ████████ ████████ WM: Mutter

████████ ████████ ████████ WM Theme: Matcha-sea

████████ ████████ ████████ GTK Theme: Matcha-sea [GTK2/3]

████████ ████████ ████████ Icon Theme: Papirus-Dark-Maia

████████ ████████ ████████ Font: Noto Sans 11

████████ ████████ ████████ Disk: 41G / 473G (10%)

CPU: AMD Ryzen 5 3550H with Radeon Vega Mobile Gfx @ 8x 2.1GHz

GPU: AMD RAVEN (DRM 3.35.0, 5.4.31-1-MANJARO, LLVM 9.0.1)

RAM: 2237MiB / 6956MiB

Redis version

Redis server v=5.0.8 sha=00000000:0 malloc=jemalloc-5.2.1 bits=64 build=b2bf869b5247fdeb

1. get vs. mget

redis-benchmark -n 100000 script load "redis.call('get', 'testkey0')"

====== script load redis.call('get', 'testkey0') ======

100000 requests completed in 0.65 seconds

50 parallel clients

3 bytes payload

keep alive: 1

99.98% <= 1 milliseconds

100.00% <= 1 milliseconds

152905.20 requests per second

redis-benchmark -n 100000 script load "redis.call('mget', 'testkey0')"

====== script load redis.call('mget', 'testkey0') ======

100000 requests completed in 0.66 seconds

50 parallel clients

3 bytes payload

keep alive: 1

99.99% <= 1 milliseconds

100.00% <= 1 milliseconds

151975.69 requests per second

cmd

RPS(9 bytes)

RPS(18 bytes)

RPS(36 bytes)

RPS(72 bytes)

RPS(144 bytes)

RPS(288 bytes)

RPS(576 bytes)

RPS(1152 bytes)

RPS(2304 bytes)

get

152905

152207

151285

156494.52

148148.14

148588.42

150602.42

149700.61

144508.67

mget(1)

151975

152207

141242

149253.73

151975.69

152671.77

145985.41

145348.83

152439.02

mget(2)

146842

148809

152207

150602.42

152905.20

147929.00

147492.62

152439.02

150829.56

mget(4)

151745

152439

154798

150829.56

149700.61

152439.02

151975.69

149253.73

149031.30

mget(8)

148148

148367

144717

150602.42

152905.20

142045.45

147058.83

151057.41

144092.22

mget(16)

155763

147275

158478

151745.08

152905.20

151057.41

148148.14

152905.20

149700.61

mget(32)

150375

151057

156739

159489.64

147058.83

154559.50

151745.08

149925.03

151057.41

mget(64)

154559

143678

145985

147275.41

145560.41

152207.00

151745.08

151285.92

144927.53

mget(128)

124688

130208

125156

131233.59

127226.46

123915.74

129032.27

123456.79

124223.60

mget(256)

14714

14952

15130

14744.91

14677.82

15003.75

14974.54

15117.16

14988.01

mget(512)

13455

13904

13925

13892.75

14046.92

13886.96

13804.53

13958.68

13976.24

mget(1024)

11825

12051

12032

11748.12

11526.05

11923.21

12003.36

12195.12

12105.07

2. set vs. mset

cmd

RPS

set

152671

mset(1)

151057

mset(2)

149476

mset(4)

147710

mset(8)

145772

mset(16)

145985

mset(32)

145137

mset(64)

122549

mset(128)

15820

mset(256)

14524

mset(512)

12751

mset(1024)

9726

3. What happended if keys=248?

keys

RPS

mget(128)

124688

mget(192)

110497

mget(224)

99502

mget(240)

95147

mget(244)

94966

mget(246)

94607

mget(247)

93896

mget(248)

14945

mget(256)

14714

`sw/redis++/redis++.h`通常指的是`StackExchange.Redis++`库的一部分,这是一个用于C++的Redis客户端库,它是基于`libredismodules`和`hiredis`库的封装。`StackExchange.Redis++`简化了与Redis的交互,使得C++开发者能够轻松地通过面向对象的方式操作Redis服务器。 使用它来操作Redis,你可以按照以下步骤进行: 1. **包含头文件**:首先,在你的C++源文件中,你需要包含`redis++.h`来使用库提供的API: ```cpp #include <stackexchange/redis.hpp> ``` 2. **创建连接**:创建一个Redis客户端实例,代表与Redis服务器的连接: ```cpp RedisClient client("localhost", 6379); // 连接到本地Redis服务器 ``` 3. **执行命令**:使用库提供的方法执行常见的Redis操作,如设置、获取、删除键值对,或者使用`scanscan`命令进行遍历: ```cpp client.set("mykey", "myvalue"); string value = client.get("mykey"); // 获取键对应的值 Scan scan(client.db()); for (const auto& entry : scan) { // 使用迭代器遍历scan结果 std::cout << "Key: " << entry.first << ", Value: " << entry.second << std::endl; } ``` 4. **错误处理**:记得检查操作是否成功,并处理可能出现的异常: ```cpp try { if (!client.ping().ok()) { throw std::runtime_error("Failed to connect to Redis"); } } catch (const RedisException& e) { std::cerr << "Redis error: " << e.what() << std::endl; } ``` 5. **释放资源**:确保在程序结束时关闭连接以释放系统资源: ```cpp client.quit(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值