当前位置: 首页 > news >正文

[C++项目框架库]redis的简单介绍和使用

redis

  • 1.redis介绍
  • 2.接口
  • 3.使用

1.redis介绍

Redis(Remote Dictionary Server)是一个开源的高性能键值对(key-value)数据库。
它通常用作数据结构服务器,因为除了基本的键值存储功能外,Redis 还支持多种类型的数据结构,如字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)以及范围查询、位图、超日志和地理空间索引等。
以下是 Redis 的一些主要特性:

  1. 内存中数据库:Redis 将所有数据存储在内存中,这使得读写速度非常快。
  2. 持久化:尽管 Redis 是内存数据库,但它提供了持久化选项,可以将内存中的数据保存到磁盘上,以防系统故障导致数据丢失。
  3. 支持多种数据结构:Redis 不仅支持基本的键值对,还支持列表、集合、有序集合等复杂的数据结构。
  4. 原子操作:Redis 支持原子操作,这意味着多个操作可以作为一个单独的原子步骤执行,这对于并发控制非常重要。
  5. 发布/订阅功能:Redis 支持发布订阅模式,允许多个客户端订阅消息,当消息发布时,所有订阅者都会收到消息。
  6. 高可用性:通过 Redis 哨兵(Sentinel)和 Redis 集群,Redis 可以提供高可用性和自动故障转移。
  7. 复制:Redis 支持主从复制,可以提高数据的可用性和读写性能。
  8. 事务:Redis 提供了事务功能,可以保证一系列操作的原子性执行。
  9. Lua 脚本:Redis 支持使用 Lua 脚本进行复杂的数据处理,可以在服务器端执行复杂的逻辑。
  10. 客户端库:Redis 拥有丰富的客户端库,支持多种编程语言,如 Python、Ruby、Java、C# 等。
  11. 性能监控:Redis 提供了多种监控工具和命令,可以帮助开发者监控和优化性能。
  12. 易于使用:Redis 有一个简单的配置文件和命令行界面,使得设置和使用变得容易。
    Redis 广泛用于缓存、会话存储、消息队列、排行榜、实时分析等领域。由于其高性能和灵活性,Redis 成为了现代应用程序中非常流行的数据存储解决方案之一。

总结:就是一个内存数据库,存储键值对
在项目中的应用:用户的登录会话管理;验证码管理,群聊成员ID

2.接口

redis本身支持很多数据类型的键值对,但是在聊天室项目中只涉及到了字符串键值对的操作,因此这里主要介绍字符串键值对的基础操作。

```cpp
C++
namespace sw {
namespace redis {struct ConnectionOptions {std::string host;int port = 6379;std::string path;std::string user = "default";std::string password;int db = 0; // 默认0号库bool keep_alive = false;}struct ConnectionPoolOptions {std::size_t size = 1; //最大连接数量}class Redis {// uri e.g 'tcp://127.0.0.1:6379'explicit Redis(const std::string &uri)explicit Redis(const ConnectionOptions &connection_opts,const ConnectionPoolOptions &pool_opts = {})//删除当前库中所有数据void flushdb(bool async = false);//删除指定键值对long long del(const StringView &key);//判断指定键值对是否存在long long exists(const StringView &key);//获取一个 string 键值对OptionalString get(const StringView &key);//存放一个 string 键值对,且设置过期时间-毫秒bool set(const StringView &key,const StringView &val,const std::chrono::milliseconds &ttl =std::chrono::milliseconds(0), // 0 表示不设置超时UpdateType type = UpdateType::ALWAYS);void setex(const StringView &key,long long ttl,const StringView &val);//向一个列表中尾插/头插 string 键值对long long rpush(const StringView &key, const StringView &val);long long lpush(const StringView &key, const StringView &val);long long rpush(const StringView &key,Input first, Input last);// std::vector<std::string> elements;// redis.lrange("list", 0, -1, std::back_inserter(elements));void lrange(const StringView &key,long long start, long long stop, Output output);}
}
}

3.使用

这里只进行字符串键值对的增删改查操作以及数据的生命周期设置。

#include <iostream>
#include <gflags/gflags.h>
#include <sw/redis++/redis.h>
#include<thread>
using namespace std;DEFINE_string(ip, "127.0.0.1", "这是服务器的IP地址,格式: 127.0.0.1");
DEFINE_int32(port, 6379, "这是服务器的端口: 6379");
DEFINE_int32(db, 0, "库的编号: 0");
DEFINE_bool(keep_alive, true, "是否进行长连接的保活");void print(sw::redis::Redis &client)
{auto user1 = client.get("会话id1");if (user1)cout << *user1 << endl;auto user2 = client.get("会话id2");if (user2)cout << *user2 << endl;auto user3 = client.get("会话id3");if (user3)cout << *user3 << endl;auto user4 = client.get("会话id4");if (user4)cout << *user4 << endl;auto user5 = client.get("会话id5");if (user5)cout << *user5 << endl;
}void add_string(sw::redis::Redis &client)
{client.set("会话id1", "用户id1");client.set("会话id2", "用户id2");client.set("会话id3", "用户id3");client.set("会话id4", "用户id4");client.set("会话id5", "用户id5");client.del("会话id3");client.set("会话id5", "用户id55555555555");auto user1 = client.get("会话id1");print(client);
}void expired_test(sw::redis::Redis &client)
{client.set("会话id1", "用户id1111", std::chrono::milliseconds(1000)); // 修改+设置1s的过期时间print(client);cout<<"-----------休眠2s----------------"<<endl;this_thread::sleep_for(std::chrono::seconds(2));print(client);
}
void list_test(sw::redis::Redis &client)
{client.rpush("群聊1","成员1");client.rpush("群聊1","成员2");client.rpush("群聊1","成员3");client.rpush("群聊1","成员4");client.rpush("群聊1","成员5");vector<string> users;client.lrange("群聊1",0,-1,std::back_inserter(users));for(auto user:users){cout<<user<<endl;}
}
int main(int argc, char *argv[])
{google::ParseCommandLineFlags(&argc, &argv, true);// 功能接口// 1.实例化对象,构造连接选项,连接服务器sw::redis::ConnectionOptions opts;opts.host = FLAGS_ip;opts.port = FLAGS_port;opts.db = FLAGS_db;opts.keep_alive = FLAGS_keep_alive;sw::redis::Redis client(opts);// 2.添加字符串键值对,删除键值对,获取键值对add_string(client);// 3.控制数据有效时间的操作expired_test(client);// 4.列表的操作,数据的右插左取cout<<"------------------------------"<<endl;list_test(client);return 0;
}
./main
用户id1
用户id2
用户id4
用户id55555555555
用户id1111
用户id2
用户id4
用户id55555555555
-----------休眠2s----------------
用户id2
用户id4
用户id55555555555
------------------------------
成员1
成员2
成员3
成员4
成员5
http://www.dtcms.com/a/419407.html

相关文章:

  • redis特性和应用场景
  • 手机网站建设制作wordpress2019谷歌字体
  • 网站建设一个月多少钱网站图片设置教程
  • Linux零基础入门:权限与常用命令详解
  • 【Pyzmq】python 跨进程线程通信 跨平台跨服务器通信
  • 科技企业网站建设网站建设咨询什么
  • K8s部署与NodePort暴露全指南
  • 数据结构 02 线性表
  • 建设工商联网站的意义湟源县网站建设
  • 浙江网站建设技术公司淘宝客商品推广网站建设
  • 【HarmonyOS】鸿蒙应用实现微信分享-最新版
  • 房地产项目网站建设方案做外贸的网站简称为什么网站
  • Vue 3 开发的 HLS 视频流播放组件+异常处理
  • 前端核心框架vue之(路由核心案例篇3/5)
  • vue中不同的watch方法的坑
  • 网站首页排版设计广州网络公关公司
  • 批量重命名技巧:使用PowerShell一键整理图片文件命名规范
  • 手机版网站怎么做的企业解决方案架构师
  • 网站企业备案改个人备案专业微网站制作
  • 新天力科技以创新驱动发展,铸就食品包装容器行业领军者
  • crew AI笔记[7] - flow特性示例
  • 广州制作网站公司网站开发收税
  • 二阶可降阶微分方程的求解方法总结
  • 纯静态企业网站模板免费下载手机app编程
  • Redis在高并发场景中的核心优势
  • 教育网站 网页赏析网络营销推广的优缺点
  • 金溪县建设局网站品牌网站怎么建立
  • 中国气候政策不确定性数据(2000-2022)
  • 大发快三网站自做青海省城乡建设厅网站
  • 800G DR8与其他800G光模块的对比分析