Redis連接字元串詳解

Redis是一款高性能的鍵值存儲系統。作為一名全能編程開發工程師,我們需要對Redis的連接字元串有深入的了解。本文將從Redis連接字元串密碼、Redis字元串操作命令、Redis字元串最大容量、Redis字元串最大長度、Redis字元串、Redis動態字元串、Redis字元串底層實現原理、Redis存儲JSON字元串、Redis簡單動態字元串、.NET Core Redis哨兵連接字元串等多個方面進行講解。

一、Redis連接字元串密碼

Redis連接字元串包含了Redis資料庫連接所需的所有信息,包括Redis伺服器的IP地址、埠號、密碼等。其中密碼是連接Redis資料庫時必不可少的一個信息。如果沒有密碼,連接Redis伺服器時直接省略密碼即可。


public static ConnectionMultiplexer Connection
{
    get
    {
        if (_connection == null || !_connection.IsConnected)
        {
            lock (_lock)
            {
                if(_connection == null || !_connection.IsConnected)
                {
                    var connectionOptions = new ConfigurationOptions();
                    connectionOptions.EndPoints.Add(_redisHost);
                    connectionOptions.AbortOnConnectFail = false;
                    connectionOptions.Password = _redisPassword;
                    _connection = ConnectionMultiplexer.Connect(connectionOptions);
                }
            }
        }
        return _connection;
    }
}

二、Redis字元串操作命令

Redis字元串操作命令,是指Redis所提供的對字元串類型的數據進行操作的命令。常見的命令有:GET、SET、MSET、STRLEN、APPEND、INCR、DECR等。


// GET命令,獲取指定鍵的值
public static RedisValue HashGet(RedisKey key, RedisValue hashField, CommandFlags flags = CommandFlags.None)
{
    var db = Connection.GetDatabase();
    return db.HashGet(key, hashField, flags);
}

// SET命令,設置指定鍵的值
public static bool HashSet(RedisKey key, RedisValue hashField, RedisValue value, When when = When.Always,
        CommandFlags flags = CommandFlags.None)
{
    var db = Connection.GetDatabase();
    return db.HashSet(key, hashField, value, when, flags);
}

// MSET命令,設置多個鍵值對
public static void HashSetAll(RedisKey key, List<HashEntry> hashEntries, CommandFlags flags = CommandFlags.None)
{
    var db = Connection.GetDatabase();
    db.HashSet(key, hashEntries.ToArray(), flags);
}

// STRLEN命令,獲取指定鍵的值的長度
public static long StringLength(RedisKey key, CommandFlags flags = CommandFlags.None)
{
    var db = Connection.GetDatabase();
    return db.StringLength(key, flags);
}

// APPEND命令,將指定鍵的值追加指定字元串
public static long StringAppend(RedisKey key, RedisValue value, CommandFlags flags = CommandFlags.None)
{
    var db = Connection.GetDatabase();
    return db.StringAppend(key, value, flags);
}

// INCR命令,將指定鍵的值加一
public static long StringIncrement(RedisKey key, long value = 1, CommandFlags flags = CommandFlags.None)
{
    var db = Connection.GetDatabase();
    return db.StringIncrement(key, value, flags);
}

// DECR命令,將指定鍵的值減一
public static long StringDecrement(RedisKey key, long value = 1, CommandFlags flags = CommandFlags.None)
{
    var db = Connection.GetDatabase();
    return db.StringDecrement(key, value, flags);
}

三、Redis字元串最大容量

Redis字元串最大容量是512MB,即一個鍵值對的值最大為512MB。

四、Redis字元串最大長度

Redis字元串最大長度為512MB,即一個鍵值對的值最大為512MB。

五、Redis字元串

Redis字元串指的是一個二進位安全的字元串,它可以是任何形式的數據,例如JPEG圖片、序列化後的對象等。在Redis中,字元串是最基本也是最常用的數據類型。

六、Redis動態字元串

Redis動態字元串指一種可以智能擴展的字元串。它可以自動調整所分配內存大小,以適應字元串的長度。在Redis中,動態字元串是由RedisObject結構體表示的。


typedef struct redisObject {
    unsigned type:4;
    unsigned encoding:4;    
    unsigned lru:LRU_BITS;   
    int refcount;           
    void *ptr;              
} robj;

七、Redis字元串底層實現原理

Redis字元串是由RedisObject結構體和SDS(簡單動態字元串)結構體組成的。其中,RedisObject結構體包含一個指向SDS結構體的指針,而SDS結構體則包含了字元串的長度、當前分配的空間大小等信息。


typedef struct redisObject {
    unsigned type:4;
    unsigned encoding:4;
    unsigned lru:LRU_BITS;
    int refcount;
    void *ptr;
} robj;

typedef struct sdshdr {
    int len;
    int free;
    char buf[];
} sdshdr;

八、Redis存儲JSON字元串

Redis存儲JSON字元串可以使用Redis官方提供的JSON模塊,它可以把JSON數據解析成Redis的字元串類型,並提供JSON對象的序列化及反序列化等功能。


// 設置一個鍵值對,值為JSON字元串
public static bool SetJson(RedisKey key, object jsonValue, TimeSpan? expiry = default(TimeSpan?), When when = When.Always,
        CommandFlags flags = CommandFlags.None)
{
    var db = Connection.GetDatabase();
    var res = db.StringSet(key, JsonConvert.SerializeObject(jsonValue), expiry, when, flags);
    return res;
}

// 獲取指定鍵對應的JSON字元串
public static T GetJson<T>(RedisKey key, CommandFlags flags = CommandFlags.None)
{
    var db = Connection.GetDatabase();
    var jsonStr = db.StringGet(key, flags);
    return JsonConvert.DeserializeObject<T>(jsonStr);
}

九、Redis簡單動態字元串

Redis簡單動態字元串(SDS)是一種為字元串實現的動態數組。SDS可以自動擴展空間,支持O(1)時間複雜度的字元串操作,同時保留了緩存字元串長度和可用空間等信息。


typedef char* sds;

// SDS結構體定義
typedef struct sdshdr {
    int len; // 記錄字元串的實際長度
    int free; // 記錄已分配但未使用的空間大小
    char buf[]; // 字元串內容的存儲位置
} SDS;

十、.NET Core Redis哨兵連接字元串

.NET Core Redis哨兵連接字元串由一個主節點和多個從節點組成,它們共享同一個哨兵,哨兵可以監控伺服器的狀態並進行自動故障轉移以保證Redis服務的高可用性。


// Redis哨兵連接字元串
private const string _redisSentinelConnectionString = "{0},password={1},connectTimeout=1000,SyncTimeout=3000,AllowAdmin=true,syncTimeout=3000,service={2},name={3}";

// 獲取Redis哨兵連接
public static ConnectionMultiplexer GetConnectionMultiplexer()
{
    var sentinelIpAddress = configuration["Redis:SentinelEndPoints"].Split(',');
    var sentinelServiceName = configuration["Redis:SentinelServiceName"];
    var sentinelPassword = configuration["Redis:SentinelPassword"];
    var sentinelName = configuration["Redis:SentinelName"];

    var sentinelConnOptions = ConfigurationOptions.Parse(sentinelIpAddress.First());
    sentinelConnOptions.Password = sentinelPassword;
    sentinelConnOptions.ServiceName = sentinelServiceName;
    sentinelConnOptions.ClientName = sentinelName;
    var sentinel = ConnectionMultiplexer.Connect(sentinelConnOptions);

    var redisConfigurationOptions = new ConfigurationOptions();
    redisConfigurationOptions.ClientName = sentinelName;
    redisConfigurationOptions.Password = sentinelPassword;

    foreach (var ipAddress in sentinelIpAddress)
    {
        redisConfigurationOptions.EndPoints.Add(ipAddress);
    }
    redisConfigurationOptions.ServiceName = sentinelServiceName;
    redisConfigurationOptions.AllowAdmin = true;

    var connection = sentinel.GetSentinelConnection(redisConfigurationOptions);
    return connection;
}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/232464.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-11 12:52
下一篇 2024-12-11 12:52

相關推薦

  • Python字元串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字元串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字元串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • Python中將字元串轉化為浮點數

    本文將介紹在Python中將字元串轉化為浮點數的常用方法。在介紹方法之前,我們先來思考一下這個問題應該如何解決。 一、eval函數 在Python中,最簡單、最常用的將字元串轉化為…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • Python學習筆記:去除字元串最後一個字元的方法

    本文將從多個方面詳細闡述如何通過Python去除字元串最後一個字元,包括使用切片、pop()、刪除、替換等方法來實現。 一、字元串切片 在Python中,可以通過字元串切片的方式來…

    編程 2025-04-29
  • Python如何將字元串1234變成數字1234

    Python作為一種廣泛使用的編程語言,對於數字和字元串的處理提供了很多便捷的方式。如何將字元串「1234」轉化成數字「1234」呢?下面將從多個方面詳細闡述Python如何將字元…

    編程 2025-04-29
  • Python int轉二進位字元串

    本文將從以下幾個方面對Python中將int類型轉換為二進位字元串進行詳細闡述: 一、int類型和二進位字元串的定義 在Python中,int類型表示整數,二進位字元串則是由0和1…

    編程 2025-04-29
  • 用title和capitalize美觀處理Python字元串

    在Python中,字元串是最常用的數據類型之一。對字元串的美觀處理是我們在實際開發中經常需要的任務之一。Python內置了一些方法,如title和capitalize,可以幫助我們…

    編程 2025-04-28
  • Python 提取字元串中的電話號碼

    Python 是一種高級的、面向對象的編程語言,它具有簡單易學、開發迅速、代碼簡潔等特點,廣泛應用於 Web 開發、數據科學、人工智慧等領域。在 Python 中,提取字元串中的電…

    編程 2025-04-28
  • Python如何列印帶雙引號的字元串

    Python作為一種廣泛使用的編程語言,在日常開發中經常需要列印帶雙引號的字元串。那麼,如何列印帶雙引號的字元串呢? 一、使用轉義字元 在Python中,我們可以通過使用轉義字元\…

    編程 2025-04-28
  • 在CentOS上安裝Redis

    Redis是一款非關係型資料庫,它支持多種數據結構,包括字元串、哈希、列表、集合、有序集合等。Redis運行內存內並且支持數據持久化,它還可以應用於緩存、消息隊列等場景。本文將介紹…

    編程 2025-04-28

發表回復

登錄後才能評論