最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

redis安裝與使用方法示例講解

 更新時(shí)間:2025年11月27日 10:36:07   作者:LuckyRich1  
Redis是一個(gè)高性能的內(nèi)存鍵值存儲(chǔ)數(shù)據(jù)庫(kù),它支持多種數(shù)據(jù)結(jié)構(gòu),如字符串、哈希、列表、集合和有序集合等這篇文章主要介紹了redis安裝與使用方法的相關(guān)資料,需要的朋友可以參考下

1. 介紹

Redis(Remote Dictionary Server)是一個(gè)開(kāi)源的高性能鍵值對(duì)(key-value)數(shù)據(jù)庫(kù)。它通常用作數(shù)據(jù)結(jié)構(gòu)服務(wù)器,因?yàn)槌嘶镜逆I值存儲(chǔ)功能外,Redis 還支持多種類型的數(shù)據(jù)結(jié)構(gòu),如字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)以及范圍查詢、位圖、超日志和地理空間索引等

以下是 Redis 的一些主要特性:

  1. 內(nèi)存中數(shù)據(jù)庫(kù):Redis 將所有數(shù)據(jù)存儲(chǔ)在內(nèi)存中,這使得讀寫(xiě)速度非??臁?/li>
  2. 持久化:盡管 Redis 是內(nèi)存數(shù)據(jù)庫(kù),但它提供了持久化選項(xiàng),可以將內(nèi)存中的數(shù)據(jù)保存到磁盤上,以防系統(tǒng)故障導(dǎo)致數(shù)據(jù)丟失。
  3. 支持多種數(shù)據(jù)結(jié)構(gòu):Redis 不僅支持基本的鍵值對(duì),還支持列表、集合、有序集合等復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。
  4. 原子操作:Redis 支持原子操作,這意味著多個(gè)操作可以作為一個(gè)單獨(dú)的原子步驟執(zhí)行,這對(duì)于并發(fā)控制非常重要。
  5. 發(fā)布/訂閱功能:Redis 支持發(fā)布訂閱模式,允許多個(gè)客戶端訂閱消息,當(dāng)消息發(fā)布時(shí),所有訂閱者都會(huì)收到消息。
  6. 高可用性:通過(guò) Redis 哨兵(Sentinel)和 Redis 集群,Redis 可以提供高可用性和自動(dòng)故障轉(zhuǎn)移。
  7. 復(fù)制:Redis 支持主從復(fù)制,可以提高數(shù)據(jù)的可用性和讀寫(xiě)性能。
  8. 事務(wù):Redis 提供了事務(wù)功能,可以保證一系列操作的原子性執(zhí)行。
  9. Lua 腳本:Redis 支持使用 Lua 腳本進(jìn)行復(fù)雜的數(shù)據(jù)處理,可以在服務(wù)器端執(zhí)行復(fù)雜的邏輯。
  10. 客戶端庫(kù):Redis 擁有豐富的客戶端庫(kù),支持多種編程語(yǔ)言,如 Python、Ruby、Java、C# 等。
  11. 性能監(jiān)控:Redis 提供了多種監(jiān)控工具和命令,可以幫助開(kāi)發(fā)者監(jiān)控和優(yōu)化性能。
  12. 易于使用:Redis 有一個(gè)簡(jiǎn)單的配置文件和命令行界面,使得設(shè)置和使用變得容易。

Redis 廣泛用于緩存、會(huì)話存儲(chǔ)、消息隊(duì)列、排行榜、實(shí)時(shí)分析等領(lǐng)域。由于其高性能和靈活性,Redis 成為了現(xiàn)代應(yīng)用程序中非常流行的數(shù)據(jù)存儲(chǔ)解決方案之一。

總結(jié):Redis是一個(gè)內(nèi)存數(shù)據(jù)庫(kù),存儲(chǔ)鍵值對(duì) – val可以是多種數(shù)據(jù)類型。

2. 安裝

2.1 服務(wù)端

sudo apt install redis -y

默認(rèn)安裝只支持本地去連接,當(dāng)前也可以修改一下配置支持遠(yuǎn)程連接

支持遠(yuǎn)程連接

修改 /etc/redis/redis.conf

  • 修改 bind 127.0.0.1 為 bind 0.0.0.0
  • 修改 protected-mode yes 為 protected-mode n

啟動(dòng) Redis 服務(wù)

service redis-server start

停止 Redis 服務(wù)

service redis-server stop

重啟 Redis 服務(wù)

service redis-server restart

開(kāi)機(jī)啟動(dòng) Redis 服務(wù)

sudo systemctl enable redis-server

2.2 客戶端

C++ 操作 redis 的庫(kù)有很多,我們使用 redis-plus-plus,這個(gè)庫(kù)的功能強(qiáng)大,使用簡(jiǎn)單。但是redis-plus-plus 是基于 hiredis 實(shí)現(xiàn)的。hiredis 是一個(gè) C 語(yǔ)言實(shí)現(xiàn)的 redis 客戶端。因此需要先安裝 hiredis。 直接使用包管理器安裝即可。

sudo apt install libhiredis-dev

下載 redis-plus-plus 源碼

git clone https://github.com/sewenew/redis-plus-plus.git

編譯/安裝 redis-plus-plus

使用 cmake 構(gòu)建

cd redis-plus-plus
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr .. #安裝到系統(tǒng)庫(kù)
make
make install # 這一步操作需要管理員權(quán)限. 如果是非 root 用戶, 使用sudo make install 執(zhí)行

構(gòu)建成功后, 會(huì)在 /usr/local/include/ 中多出 sw 目錄,并且內(nèi)部包含 redis-plus-plus 的一系列頭文件。會(huì)在 /usr/local/lib/ 中多出一系列 libredis 庫(kù)文件。

3. 接口介紹

redis 本身支持很多數(shù)據(jù)類型的鍵值對(duì)接口特別多,這里簡(jiǎn)單介紹字符串鍵值對(duì)的操作。

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; // 默認(rèn) 0 號(hào)庫(kù)
            bool keep_alive = false;//長(zhǎng)連接/短連接
        } 
        //連接池
        struct ConnectionPoolOptions
        {
            std::size_t size = 1; // 最大連接數(shù)量
        } 
        class Redis
        {	
        	//直接給Redis服務(wù)器ip+port構(gòu)造,各種配置信息采用默認(rèn)的進(jìn)行連接
            // uri e.g 'tcp://127.0.0.1:6379'
            explicit Redis(const std::string &uri) 
            //或者自己在ConnectionOptions配置信息進(jìn)行連接
            explicit Redis(const ConnectionOptions &connection_opts,const ConnectionPoolOptions &pool_opts = {})
            // 刪除當(dāng)前庫(kù)中所有數(shù)據(jù)
            void flushdb(bool async = false);
            // 刪除指定鍵值對(duì)
            long long del(const StringView &key);
            // 判斷指定鍵值對(duì)是否存在
            long long exists(const StringView &key);
            // 獲取一個(gè) string 鍵值對(duì)
            OptionalString get(const StringView &key);
            // 存放一個(gè) string 鍵值對(duì),且設(shè)置過(guò)期時(shí)間-毫秒
            bool set(const StringView &key,
                     const StringView &val,
                     const std::chrono::milliseconds &ttl =
                         std::chrono::milliseconds(0), // 0 表示不設(shè)置超時(shí)
                         UpdateType type = UpdateType::ALWAYS);
            void setex(const StringView &key,
                       long long ttl,
                       const StringView &val);
            // 向一個(gè)列表中尾插/頭插 string 鍵值對(duì),它的val是一個(gè)列表
            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);
            //獲取列表數(shù)據(jù)
            // 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. 使用

這里只進(jìn)行字符串鍵值對(duì)的增刪改查操作以及數(shù)據(jù)的生命周期設(shè)置

#include<iostream>
#include<sw/redis++/redis++.h>
#include<thread>

void print(sw::redis::Redis& client)
{
    auto user1 = client.get("會(huì)話1");
    if(user1) std::cout<<*user1<<std::endl;
    auto user2 = client.get("會(huì)話2");
    if(user2) std::cout<<*user2<<std::endl;
    auto user3 = client.get("會(huì)話3");
    if(user3) std::cout<<*user3<<std::endl;
    auto user4 = client.get("會(huì)話4");
    if(user4) std::cout<<*user4<<std::endl;

}

void add_string(sw::redis::Redis& client)
{
    client.set("會(huì)話1","ID1");
    client.set("會(huì)話2","ID2");
    client.set("會(huì)話3","ID3");
    client.set("會(huì)話4","ID4");


    client.del("會(huì)話2");

    //數(shù)據(jù)已存在則進(jìn)行修改,不存在則新增
    client.set("會(huì)話3","ID33333");

    print(client);
}

void expired_test(sw::redis::Redis& client)
{
    //這次的新增,數(shù)據(jù)其實(shí)已經(jīng)有了,因此本次是修改
    //不僅僅修改了val,而且還給鍵值對(duì)新增了過(guò)期時(shí)間
    client.set("會(huì)話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. 構(gòu)造連接選項(xiàng),實(shí)例化Redis對(duì)象,連接服務(wù)器
    sw::redis::ConnectionOptions opts;
    //庫(kù)IP地址
    opts.host = "127.0.0.1";
    //庫(kù)的端口
    opts.port = 6379;
    //庫(kù)的編號(hào):默認(rèn)0號(hào)
    opts.db = 0;
    //是否進(jìn)行長(zhǎng)連接?;?
    opts.keep_alive = true;
    sw::redis::Redis client(opts);
    //2. 添加字符串鍵值對(duì),刪除字符串鍵值對(duì),獲取字符串鍵值對(duì)
    add_string(client);
    //3. 實(shí)踐控制數(shù)據(jù)有效時(shí)間的操作
    expired_test(client);
    //4. 列表的操作,主要實(shí)現(xiàn)數(shù)據(jù)的右插,左獲取
    std::cout << "--------------------------\n";
    list_test(client);
    return 0;
}

總結(jié) 

到此這篇關(guān)于redis安裝與使用方法的文章就介紹到這了,更多相關(guān)redis安裝與使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • caffeine_redis自定義二級(jí)緩存

    caffeine_redis自定義二級(jí)緩存

    這篇文章詳細(xì)介紹了caffeine_redis 自定義二級(jí)緩存,文中有相關(guān)的背景前提與出現(xiàn)的問(wèn)題,感興趣的同學(xué)可以參考一下
    2023-04-04
  • Redis內(nèi)存滿了的幾種原因和最佳解決方案

    Redis內(nèi)存滿了的幾種原因和最佳解決方案

    Redis是一款高性能的內(nèi)存數(shù)據(jù)庫(kù),被廣泛應(yīng)用于緩存、消息隊(duì)列、計(jì)數(shù)器等場(chǎng)景,然而,由于Redis是基于內(nèi)存的數(shù)據(jù)庫(kù),當(dāng)數(shù)據(jù)量過(guò)大或者配置不合理時(shí),就有可能導(dǎo)致Redis的內(nèi)存滿,本文將介紹Redis內(nèi)存滿的幾種原因,并提供相應(yīng)的解決方案,需要的朋友可以參考下
    2023-11-11
  • Java實(shí)現(xiàn)多級(jí)緩存的方法詳解

    Java實(shí)現(xiàn)多級(jí)緩存的方法詳解

    對(duì)于高并發(fā)系統(tǒng)來(lái)說(shuō),有三個(gè)重要的機(jī)制來(lái)保障其高效運(yùn)行,它們分別是:緩存、限流和熔斷,所以本文就來(lái)和大家探討一下多級(jí)緩存的實(shí)現(xiàn)方法,希望對(duì)大家有所幫助
    2024-02-02
  • Redis集群節(jié)點(diǎn)通信過(guò)程/原理流程分析

    Redis集群節(jié)點(diǎn)通信過(guò)程/原理流程分析

    這篇文章主要介紹了Redis集群節(jié)點(diǎn)通信過(guò)程/原理,詳細(xì)介紹了Cluster(集群)的節(jié)點(diǎn)通信的流程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • Redis Value過(guò)大問(wèn)題(鍵值過(guò)大)

    Redis Value過(guò)大問(wèn)題(鍵值過(guò)大)

    這篇文章主要介紹了Redis Value過(guò)大問(wèn)題(鍵值過(guò)大),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Redis線程模型的原理分析

    Redis線程模型的原理分析

    Redis是一個(gè)高性能的數(shù)據(jù)存儲(chǔ)框架,在高并發(fā)的系統(tǒng)設(shè)計(jì)中,Redis也是一個(gè)比較關(guān)鍵的組件,是我們提升系統(tǒng)性能的一大利器,本文詳細(xì)的介紹了Redis線程模型,感興趣的可以了解一
    2021-11-11
  • Redis實(shí)現(xiàn)庫(kù)存扣減的解決方案防止商品超賣

    Redis實(shí)現(xiàn)庫(kù)存扣減的解決方案防止商品超賣

    在日常開(kāi)發(fā)中有很多地方都有類似扣減庫(kù)存的操作,比如電商系統(tǒng)中的商品庫(kù)存,抽獎(jiǎng)系統(tǒng)中的獎(jiǎng)品庫(kù)存等,基于redis實(shí)現(xiàn)扣減庫(kù)存的具體實(shí)現(xiàn),初始化庫(kù)存回調(diào)函數(shù)(IStockCallback)扣減庫(kù)存服務(wù)(StockService),感興趣的朋友跟隨小編一起看看吧
    2022-06-06
  • redis學(xué)習(xí)之RDB、AOF與復(fù)制時(shí)對(duì)過(guò)期鍵的處理教程

    redis學(xué)習(xí)之RDB、AOF與復(fù)制時(shí)對(duì)過(guò)期鍵的處理教程

    這篇文章主要給大家介紹了關(guān)于redis學(xué)習(xí)之RDB、AOF與復(fù)制時(shí)對(duì)過(guò)期鍵處理的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用redis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • 在redis中存儲(chǔ)ndarray的示例代碼

    在redis中存儲(chǔ)ndarray的示例代碼

    在Redis中存儲(chǔ)NumPy數(shù)組(ndarray)通常需要將數(shù)組轉(zhuǎn)換為二進(jìn)制格式,然后將其存儲(chǔ)為字符串,這篇文章給大家介紹了在redis中存儲(chǔ)ndarray的示例代碼,感興趣的朋友一起看看吧
    2024-02-02
  • Redis如何使用HyperLogLog的實(shí)現(xiàn)

    Redis如何使用HyperLogLog的實(shí)現(xiàn)

    本文主要介紹了Redis如何使用HyperLogLog的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06

最新評(píng)論

瑞金市| 浦东新区| 佛冈县| 小金县| 锡林郭勒盟| 九龙县| 疏勒县| 新干县| 文昌市| 南部县| 共和县| 方山县| 灯塔市| 桦甸市| 台南县| 米脂县| 桦南县| 灌云县| 清水河县| 平乡县| 元氏县| 略阳县| 巫溪县| 富源县| 马山县| 四平市| 堆龙德庆县| 霍城县| 昭苏县| 湘潭市| 凉城县| 上林县| 香港 | 高尔夫| 山西省| 镇康县| 丰镇市| 沅江市| 萨嘎县| 乐陵市| 佛坪县|