32人参与 • 2025-11-27 • Redis
redis(remote dictionary server)是一个开源的高性能键值对(key-value)数据库。它通常用作数据结构服务器,因为除了基本的键值存储功能外,redis 还支持多种类型的数据结构,如字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)以及范围查询、位图、超日志和地理空间索引等
以下是 redis 的一些主要特性:
redis 广泛用于缓存、会话存储、消息队列、排行榜、实时分析等领域。由于其高性能和灵活性,redis 成为了现代应用程序中非常流行的数据存储解决方案之一。
总结:redis是一个内存数据库,存储键值对 – val可以是多种数据类型。
sudo apt install redis -y
默认安装只支持本地去连接,当前也可以修改一下配置支持远程连接
支持远程连接
修改 /etc/redis/redis.conf
启动 redis 服务
service redis-server start
停止 redis 服务
service redis-server stop
重启 redis 服务
service redis-server restart
开机启动 redis 服务
sudo systemctl enable redis-server
c++ 操作 redis 的库有很多,我们使用 redis-plus-plus,这个库的功能强大,使用简单。但是redis-plus-plus 是基于 hiredis 实现的。hiredis 是一个 c 语言实现的 redis 客户端。因此需要先安装 hiredis。 直接使用包管理器安装即可。
sudo apt install libhiredis-dev
下载 redis-plus-plus 源码
git clone https://github.com/sewenew/redis-plus-plus.git
编译/安装 redis-plus-plus
使用 cmake 构建
cd redis-plus-plus mkdir build cd build cmake -dcmake_install_prefix=/usr .. #安装到系统库 make make install # 这一步操作需要管理员权限. 如果是非 root 用户, 使用sudo make install 执行
构建成功后, 会在 /usr/local/include/ 中多出 sw 目录,并且内部包含 redis-plus-plus 的一系列头文件。会在 /usr/local/lib/ 中多出一系列 libredis 库文件。
redis 本身支持很多数据类型的键值对接口特别多,这里简单介绍字符串键值对的操作。
namespace sw
{
namespace redis
{
struct connectionoptions
{
std::string host;//ip
int port = 6379;//port
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
{
//直接给redis服务器ip+port构造,各种配置信息采用默认的进行连接
// uri e.g 'tcp://127.0.0.1:6379'
explicit redis(const std::string &uri)
//或者自己在connectionoptions配置信息进行连接
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 键值对,它的val是一个列表
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);
}
}
}
这里只进行字符串键值对的增删改查操作以及数据的生命周期设置
#include<iostream>
#include<sw/redis++/redis++.h>
#include<thread>
void print(sw::redis::redis& client)
{
auto user1 = client.get("会话1");
if(user1) std::cout<<*user1<<std::endl;
auto user2 = client.get("会话2");
if(user2) std::cout<<*user2<<std::endl;
auto user3 = client.get("会话3");
if(user3) std::cout<<*user3<<std::endl;
auto user4 = client.get("会话4");
if(user4) std::cout<<*user4<<std::endl;
}
void add_string(sw::redis::redis& client)
{
client.set("会话1","id1");
client.set("会话2","id2");
client.set("会话3","id3");
client.set("会话4","id4");
client.del("会话2");
//数据已存在则进行修改,不存在则新增
client.set("会话3","id33333");
print(client);
}
void expired_test(sw::redis::redis& client)
{
//这次的新增,数据其实已经有了,因此本次是修改
//不仅仅修改了val,而且还给键值对新增了过期时间
client.set("会话1","id1111",std::chrono::milliseconds(1000));
print(client);
std::cout << "------------休眠2s-----------\n";
std::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");
std::vector<std::string> users;
client.lrange("群聊1",0,-1,std::back_insert_iterator(users));
for(auto& user : users)
{
std::cout<< user << std::endl;
}
}
int main()
{
//1. 构造连接选项,实例化redis对象,连接服务器
sw::redis::connectionoptions opts;
//库ip地址
opts.host = "127.0.0.1";
//库的端口
opts.port = 6379;
//库的编号:默认0号
opts.db = 0;
//是否进行长连接保活
opts.keep_alive = true;
sw::redis::redis client(opts);
//2. 添加字符串键值对,删除字符串键值对,获取字符串键值对
add_string(client);
//3. 实践控制数据有效时间的操作
expired_test(client);
//4. 列表的操作,主要实现数据的右插,左获取
std::cout << "--------------------------\n";
list_test(client);
return 0;
}
到此这篇关于redis安装与使用方法的文章就介绍到这了,更多相关redis安装与使用内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论