redis&db查询测试对比

本文详细介绍了使用Redis进行数据插入、分页查询的方法,并与数据库查询进行了对比,包括不读取总数和读取总数两种情况。通过JMeter测试,展示了不同查询方式的性能差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

// 往redis插入数据
 public function redispage_add($id,$data){
        $instance = Redis::instance();
        $hash_prefix = "test";
        if(!is_numeric($id) || !is_array($data)) return false;
        $hashName = $hash_prefix.'_'.$id;
        $instance->hMset($hashName, $data);
        $instance->zAdd($hash_prefix. '_sort', $id, $id);
        return true;
    }

// 读取redis分页数据
    public function redispage_list($page, $pageSize, $key = [])
    {
        $instance = Redis::instance();
        $hash_prefix = "test";

        if (!is_numeric($page) || !is_numeric($pageSize)) return false;
        $limit_s = ($page - 1) * $pageSize;
        $limit_e = ($limit_s + $pageSize) - 1;
        $range = $instance->zRange($hash_prefix . '_sort', $limit_s, $limit_e); //指定区间内,带有 score 值(可选)的有序集成员的列表。
        $count = $instance->zCard($hash_prefix . '_sort'); //统计ScoreSet总数
        $pageCount = ceil($count / $pageSize); //总共多少页
        $pageList = array();
        foreach ($range as $qid) {
            if (count($key) > 0) {
                $pageList[] = $instance->hMGet($hash_prefix . '_' . $qid, $key); //获取hash表中所有的数据
            } else {
                $pageList[] = $instance->hGetAll($hash_prefix . '_' . $qid); //获取hash表中所有的数据
            }
        }

        $data['total'] = $count;
        $data['page'] = $page;
        $data['pagecount'] = $pageCount;
        $data['list'] = $pageList;
        return $data;
    }
    //db 查询,不读取总数
    public function list_dbl()
    {
        $pageSize = 20;

        $filed = 'id,title,positionid,positiontitle,experience,。。。字段省略 ....groupid';
        $rs = db('job_recruit')->field($filed)->order('id asc')->limit(20)->select();

       
        $data['list'] = $rs;
        $this->returnSuccess($data);
    }

    //  db查询 读取总数
    public function list_db_with_total()
    {
        $pageSize = 20;

        $filed = 'id,title,positionid,positiontitle,experience,。。。字段省略 ....groupid';
        $rs = db('job_recruit')->field($filed)->order('id asc')->limit(20)->select();

        $total = db('job_recruit')->count();


        $data['total'] = $total;
        $data['page'] = 1;
        $data['pagecount'] = ceil($total / $pageSize);;
        $data['list'] = $rs;
        $this->returnSuccess($data);
    }

    // redis查询
    public function list_redis()
    {
        $rs = $this->redis_page_info(1, 20,[]);
        $this->returnSuccess($rs);
    }

jmeter 运行在我本机上,
HttpRequest接口放在远程服务器上,远程服务器为单机架构。
设置1000次, 结果如下:
Http_request name

<think>好的,用户想了解如何使用Redis进行数据测试,我需要详细思考这个问题。首先,我需要明确数据测试通常包括哪些方面,比如性能测试、功能测试、压力测试等。然后结合Redis的特点,思考在这些测试中的具体应用方法。 Redis是一个内存数据库,常用于缓存、消息队列等场景,所以数据测试可能需要关注其读写速度、并发处理能力、数据持久化等方面。接下来,我应该回忆一下Redis的基本命令和工具,比如redis-benchmark,这是Redis自带的性能测试工具,可以用来模拟多个客户端同时发送请求,测试服务器的性能。此外,可能还需要编写脚本来自动化测试流程,比如使用Python的redis-py库来执行各种操作并验证结果。 用户可能需要具体的示例,比如如何测试读写性能,如何测试不同数据结构的操作,或者如何模拟高并发场景。同时,还需要考虑数据持久化的测试,比如RDB和AOF的配置是否有效,数据恢复是否正确。此外,异常情况下的测试也很重要,比如网络中断时Redis的表现,或者内存不足时的处理策略。 还要注意引用用户提供的资料,尤其是引用[1]中提到的Redis数据类型和Java操作,可能需要在测试时涉及不同数据类型的操作验证。引用[2]提到了使用Redis和本地缓存的统一接口,可能在测试时需要对比两者的性能差异,或者测试分布式环境下Redis的稳定性。 最后,要确保回答结构清晰,分步骤说明测试方法,并提供代码示例,比如使用redis-benchmark的命令行示例,以及Python脚本的示例。同时,生成相关问题,帮助用户进一步探索,比如性能优化方法或不同数据类型的测试案例。</think>### 使用 Redis 进行数据测试的方法与示例 #### 一、测试准备 1. **安装与启动 Redis** 确保本地或测试环境已安装 Redis 服务,并通过 `redis-server` 启动服务,使用 `redis-cli` 连接数据库。 2. **选择客户端工具** - 命令行工具 `redis-cli`:适合基础操作验证 - Python 的 `redis-py` 库:适合编写自动化测试脚本 - 性能测试工具 `redis-benchmark`:Redis 自带的基准测试工具[^2] --- #### 二、核心测试方法 ##### 1. **基础功能测试** 验证 Redis 数据类型的操作是否符合预期: ```python import redis # 连接 Redis r = redis.Redis(host='localhost', port=6379, db=0) # 测试字符串写入与读取 r.set("test_key", "hello_redis") print(r.get("test_key")) # 输出: b'hello_redis' # 测试哈希表操作 r.hset("user:1", "name", "Alice") print(r.hget("user:1", "name")) # 输出: b'Alice' ``` 通过断言(assert)验证结果是否符合预期。 ##### 2. **性能测试** 使用 `redis-benchmark` 测试吞吐量和延迟: ```bash # 模拟 100 个并发连接,总计 10 万次请求 redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 100000 ``` 输出结果包含每秒处理请求数(QPS)、平均延迟等指标。 ##### 3. **持久化测试** 验证 RDB/AOF 数据恢复: 1. 修改 `redis.conf` 启用 RDB 和 AOF: ```conf save 60 1 # 60 秒内至少 1 次修改触发 RDB appendonly yes # 启用 AOF ``` 2. 插入测试数据后重启 Redis,检查数据是否完整加载。 ##### 4. **高并发场景测试** 使用 Python 多线程模拟并发请求: ```python import threading def test_concurrent_write(): for i in range(1000): r.set(f"concurrent_key_{i}", "value") # 启动 50 个线程 threads = [] for _ in range(50): t = threading.Thread(target=test_concurrent_write) threads.append(t) t.start() for t in threads: t.join() ``` --- #### 三、测试报告分析 | 测试类型 | 指标 | 示例结果 | |----------------|---------------------|------------------| | 基础功能 | 操作正确率 | 100% 通过断言 | | 性能测试 | QPS(SET 操作) | 89,000/秒 | | 持久化 | 数据恢复完整性 | RDB/AOF 均有效 | | 高并发 | 错误率 | <0.01% | --- #### 四、高级测试场景 1. **缓存穿透/雪崩测试** - 模拟大量请求不存在的 Key,测试缓存层与数据库的交互逻辑。 - 使用随机过期时间避免雪崩。 2. **集群模式测试** 搭建 Redis Cluster,测试数据分片和故障转移能力: ```bash redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 ... --cluster-replicas 1 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值