Redis安装及操作指南

Redis安装及操作指南

redis安装与使用

  • 1. 介绍
  • 2. 安装
    • 2.1 服务端
    • 2.2 客户端
  • 3. 接口介绍
  • 4. 使用

1. 介绍

Redis(Remote Dictionary Server)是一款开源的高性能键值对数据库。它常被当作数据结构服务器来运用,除了基础的键值存储功能外,还支持多种数据结构,例如字符串、哈希、列表、集合、有序集合等,同时还具备范围查询、位图、超日志以及地理空间索引等功能。

以下是Redis的一些关键特性:

  1. 内存存储特性:Redis将所有数据存储于内存之中,这使得数据的读写速度极为迅速。
  2. 持久化机制:尽管Redis是内存数据库,但它提供了持久化方案,能够把内存中的数据保存到磁盘上,避免系统故障时数据丢失。
  3. 数据结构多样性:Redis不仅支持基本的键值对,还支持列表、集合、有序集合等复杂的数据结构。
  4. 原子操作能力:Redis支持原子操作,意味着多个操作可以作为一个单独的原子步骤来执行,这对并发控制至关重要。
  5. 发布订阅功能:Redis支持发布订阅模式,允许多个客户端订阅消息,当有消息发布时,所有订阅者都能接收到消息。
  6. 高可用特性:通过Redis哨兵和Redis集群,Redis能够实现高可用性以及自动故障转移。
  7. 复制功能:Redis支持主从复制,可提高数据的可用性和读写性能。
  8. 事务功能:Redis提供事务功能,能够保证一系列操作原子性执行。
  9. Lua脚本支持:Redis支持使用Lua脚本进行复杂的数据处理,能够在服务器端执行复杂的逻辑。
  10. 客户端库丰富:Redis拥有丰富的客户端库,支持多种编程语言,像Python、Ruby、Java、C#等。
  11. 性能监控手段:Redis提供多种监控工具和命令,帮助开发者监控和优化性能。
  12. 易用性:Redis拥有简单的配置文件和命令行界面,设置和使用起来都很便捷。

Redis被广泛应用于缓存、会话存储、消息队列、排行榜、实时分析等领域。凭借其高性能和灵活性,成为现代应用程序中广受欢迎的数据存储解决方案之一。

总结:Redis是一款内存数据库,用于存储键值对,其中值可以是多种数据类型。

2. 安装

2.1 服务端

通过执行sudo apt install redis -y命令进行默认安装,默认安装状态下仅支持本地连接,不过可以修改配置以支持远程连接。

支持远程连接

修改/etc/redis/redis.conf文件:
* 将bind 127.0.0.1修改为bind 0.0.0.0
* 将protected-mode yes修改为protected-mode n

启动Redis服务

执行service redis-server start命令。

停止Redis服务

执行service redis-server stop命令。

重启Redis服务

执行service redis-server restart命令。

设置开机启动Redis服务

执行sudo systemctl enable redis-server命令。

2.2 客户端

有众多C++操作redis的库,我们选用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库文件。

3. 接口介绍

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);
        }
    }
}

4. 使用

此处仅进行字符串键值对的增删改查操作以及数据生命周期设置相关操作。

#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;
}

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/12840.html

(0)
LomuLomu
上一篇 2025 年 7 月 9 日
下一篇 2025 年 7 月 9 日

相关推荐

  • 2025年最新IDEA激活码及永久破解教程(支持2099年有效期)

    JetBrains全家桶通用破解指南 本教程适用于IntelliJ IDEA、PyCharm、DataGrip、GoLand等JetBrains全系列开发工具,让您轻松获取长期使用权限。以下是成功激活至2099年的效果展示: 下面将详细介绍完整的激活流程,该方法同样适用于旧版本软件,无论您使用何种操作系统或软件版本都能完美适配。 获取IDEA官方安装包 若已…

    IDEA破解教程 2025 年 7 月 20 日
    30400
  • Slurm HPC 集群安装 Slurm-web(python Flask开源项目)

    slurm-web,也称为 slurm-wlm-web,是为 Slurm 工作负载管理器提供的一个 Web 界面。Slurm 是一个用于管理大型和小型 Linux 集群的开源、容错且高度可扩展的集群管理和作业调度系统。slurm-web 的主要功能是提供一个方便用户监控和管理 Slurm 集群的途径,而无需直接使用命令行工具。 Slurm-web 在 Slu…

    2025 年 1 月 14 日
    56000
  • 官方同步clion激活码免费入口和专业clion破解教程

    免责声明:以下教程所涉及的 Clion 破解补丁与激活码均源自网络公开渠道,仅供个人学习研究,禁止商业用途。若条件允许,请支持正版! 先放张图镇楼——Clion 2025.2.1 已成功“续命”到 2099 年,爽翻! 下面用图文一步步带你搞定最新版 Clion 的激活流程。 前期准备 ⚠️ 如果你之前折腾过别的补丁却没成功,建议先卸载干净再重装,或者直接删…

    3天前
    2200
  • IDEA破解教程合集|Mac/Win/Linux全平台支持!

    本教程适用于 IDEA、PyCharm、DataGrip、GoLand 等,支持 JetBrains 全家桶! 废话不多说,先上最新 IDEA 版本破解成功的截图,如下,可以看到已经成功破解到 2099 年辣,舒服! 接下来,我就将通过图文的方式,来详细讲解如何激活 IDEA 至 2099 年。当然这个激活方法,同样适用于之前的旧版本!不管你是什么操作系统,…

    IDEA破解教程 2025 年 9 月 17 日
    5000
  • DataGrip激活码在哪里填?填错怎么补救?

    声明:以下破解补丁与激活码均源自网络公开渠道,仅供个人学习研究,禁止商业用途。若条件允许,请支持正版!官方正版低至 32 元/年:https://panghu.hicxy.com/shop/?id=18 先放一张成果图:DataGrip 2025.2.1 已顺利激活到 2099 年,爽歪歪! 下面用图文方式带你一步步搞定最新版 DataGrip 的激活。 前…

    DataGrip激活码 2025 年 9 月 20 日
    6100

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信