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/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

发表回复

登录后才能评论