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-hant/n/232464.html