redis的c++客户端cpp_redis代码分析

cpp_redis是一个基于c++11编写的redis客户端,比较简单,也比较强大,支持集群

本篇分析是基于一个简单的set命令来展开的

为了便于调试和查看代码运行轨迹,编译时用如下命令:

cmake -DBUILD_EXAMPLES=true -DLOGGING_ENABLED=true .

这是查看完CMakefile.txt后得出的



cpp_redis使用了tacopie库,这个库的作者和cpp_redis是一个人,类结构层次如下:

tacopie:
    tcp_client {io_service, m_socket, std::queue<read_request> m_read_requests, std::queue<write_request> m_write_requests}
        io_service
        {
            std::unordered_map<fd_t, tracked_socket> m_tracked_sockets,
            std::thread m_poll_worker;
            utils::thread_pool m_callback_workers;
                {
                    std::vector<std::thread> m_workers; 线程
                    std::queue<task_t> m_tasks; 函数
                }
            std::vector<struct pollfd> m_poll_fds_info;
            tacopie::self_pipe m_notifier; pipe;
            std::condition_variable m_wait_for_removal_condvar;
                io_service::wait_for_removal(const tcp_socket& socket)
                循环等待直到socket不在m_tracked_sockets中
                
                tcp_client::disconnect(bool wait_for_removal)如果指定wait_for_removal为true,调用
                    
        }
        m_socket
            tcp_socket {m_fd, m_host, m_port, m_type}


cpp_redis:
    future_client {
        redis_client m_client
        {
            redis_connection
            {
                tacopie::tcp_client m_client;
                
                reply_callback_t m_reply_callback;
                    std::function<void(redis_connection&, reply&)>
                    void redis_client::connection_receive_handler(network::redis_connection&, reply& reply)
                        从redis_client对象的m_callbacks中取出1个
                        如果用户定义了m_before_callback_handler,则执行m_before_callback_handler(reply, callback);
                        callback也作为参数传递给用户的回调函数,用户可选择性调callback
    

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值