当前位置: 代码网 > it编程>数据库>Redis > redis安装与使用方法示例讲解

redis安装与使用方法示例讲解

2025年11月27日 Redis 我要评论
1. 介绍redis(remote dictionary server)是一个开源的高性能键值对(key-value)数据库。它通常用作数据结构服务器,因为除了基本的键值存储功能外,redis 还支持

1. 介绍

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 成为了现代应用程序中非常流行的数据存储解决方案之一。

总结:redis是一个内存数据库,存储键值对 – val可以是多种数据类型。

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,这个库的功能强大,使用简单。但是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;
}

总结 

到此这篇关于redis安装与使用方法的文章就介绍到这了,更多相关redis安装与使用内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com