80 个版本

0.6.4 2024 年 7 月 29 日
0.6.3 2024 年 3 月 15 日
0.6.2 2023 年 4 月 22 日
0.6.1 2021 年 7 月 23 日
0.3.27 2017 年 7 月 26 日

数据库接口 中排名 #110

Download history 3/week @ 2024-04-27 11/week @ 2024-05-25 9/week @ 2024-06-01 5/week @ 2024-06-08 2/week @ 2024-06-15 20/week @ 2024-07-20 271/week @ 2024-07-27 9/week @ 2024-08-03

每月下载量 300

Apache-2.0 协议

1MB
752 行代码(不含注释)

包含 (WOFF 字体,400KB) NanumBarunGothic-00000000f861df9d.ttf.woff2,(WOFF 字体,135KB) FiraSans-Medium-0000000066e2bc86.woff2,(WOFF 字体,130KB) FiraSans-Regular-0000000084b1ad12.woff2,(WOFF 字体,82KB) SourceSerif4-Bold-00000000ad926a49.ttf.woff2,(WOFF 字体,77KB) SourceSerif4-Regular-0000000007da4a04.ttf.woff2,(WOFF 字体,45KB) SourceCodePro-It-00000000668aca82.ttf.woff2 等 3 个文件。

simple_redis

crates.io CI codecov
license Libraries.io for GitHub Documentation downloads
Built with cargo-make

为 Rust 编写的简单且具有弹性的 redis 客户端。

概述

此库为最常见的 redis 操作提供非常基本、简单的 API。
虽然不如 redis-rs 全面或灵活,但它为大多数常见用例和操作提供了更简单的 API,以及自动和具有弹性的内部连接和订阅(pubsub)处理。
此外,整个 API 都可以通过简单的客户端接口访问,无需管理多个实体,如连接或 pubsub。

连接弹性

连接弹性通过在每次操作之前对 redis 服务器进行内部管理的连接进行验证来管理。
如果在连接上出现任何问题,将分配一个新的连接以确保仅在有效的连接上执行操作。
然而,这会给 redis 服务器带来小的 PING 操作性能成本。

//! 在 redis-rs 中,如果连接中断,则连接将不再可用;如果直接在客户端上调用操作,它将为每次操作基本上打开一个新的连接,这是非常昂贵的。

订阅弹性

通过在从订阅的频道中获取消息时出现任何错误的情况下自动重新创建内部 pubsub 并发出新的订阅请求来确保订阅弹性。

redis-rs 不提供此类自动弹性和重新订阅功能。

使用方法

初始化和简单操作

fn main() {
    match simple_redis::create("redis://127.0.0.1:6379/") {
        Ok(mut client) => {
            println!("Created Redis Client");

            match client.set("my_key", "my_value") {
                Err(error) => println!("Unable to set value in Redis: {}", error),
                _ => println!("Value set in Redis"),
            };

            match client.get_string("my_key") {
                Ok(value) => println!("Read value from Redis: {}", value),
                Err(error) => println!("Unable to get value from Redis: {}", error),
            };

            match client.set("my_numeric_key", 255.5) {
                Err(error) => println!("Unable to set value in Redis: {}", error),
                _ => println!("Value set in Redis"),
            };

            match client.get::<f32>("my_numeric_key") {
                Ok(value) => println!("Read value from Redis: {}", value),
                Err(error) => println!("Unable to get value from Redis: {}", error),
            };

            match client.hgetall("my_map") {
                Ok(map) => match map.get("my_field") {
                    Some(value) => println!("Got field value from map: {}", value),
                    None => println!("Map field is empty"),
                },
                Err(error) => println!("Unable to read map from Redis: {}", error),
            };

            // run some command that is not built in the library
            match client.run_command::<String>("ECHO", vec!["testing"]) {
                Ok(value) => assert_eq!(value, "testing"),
                _ => panic!("test error"),
            };

            // publish messages
            let result = client.publish("news_channel", "test message");
            assert!(result.is_ok());
        }
        Err(error) => println!("Unable to create Redis client: {}", error),
    }
}

订阅流程

use simple_redis::{Interrupts, Message};

fn main() {
    match simple_redis::create("redis://127.0.0.1:6379/") {
        Ok(mut client) => {
            println!("Created Redis Client");

            let mut result = client.subscribe("important_notifications");
            assert!(result.is_ok());
            result = client.psubscribe("*_notifications");
            assert!(result.is_ok());

            // fetch messages from all subscriptions
            let mut polling_counter: usize = 0;
            client
                .fetch_messages(
                    &mut |message: Message| -> bool {
                        let payload: String = message.get_payload().unwrap();
                        println!("Got message: {}", payload);

                        // continue fetching
                        false
                    },
                    // interrupts enable you to break the fetching blocking call
                    &mut || -> Interrupts {
                        let mut interrupts = Interrupts::new();
                        interrupts.next_polling_time = Some(150);

                        polling_counter = polling_counter + 1;
                        if polling_counter > 3 {
                            interrupts.stop = true;
                        }

                        interrupts
                    },
                )
                .unwrap();
        }
        Err(error) => println!("Unable to create Redis client: {}", error),
    }
}

关闭连接

fn main() {
    match simple_redis::create("redis://127.0.0.1:6379/") {
        Ok(mut client) => {
            println!("Created Redis Client");

            match client.set("my_key", "my_value") {
                Err(error) => println!("Unable to set value in Redis: {}", error),
                _ => println!("Value set in Redis"),
            };

            match client.quit() {
                Err(error) => println!("Error: {}", error),
                _ => println!("Connection Closed."),
            }
        }
        Err(error) => println!("Unable to create Redis client: {}", error),
    }
}

安装

要使用此库,只需将其添加为依赖项

[dependencies]
simple_redis = "^0.6.4"

API 文档

请参阅完整的文档: API 文档

贡献

请参阅 贡献指南

版本历史

请参阅 变更日志

许可证

由 Sagie Gur-Ari 开发,并许可在 Apache 2 开源许可证下。

依赖项

~3.5MB
~95K SLoC