redis官网文档中推荐C#中使用NRedisStack包连接并操作redis,本文学习C#调用NRedisStack操作redis的基本方式。
新建Winform项目,在Nuget包管理器中搜索并安装NRedisStack包,如下图所示:
主要调用StackExchange.Redis命名空间下ConnectionMultiplexer类的Connect函数连接redis,默认情况下只需指定redis所在服务器地址即可,端口默认为6379,同时没有连接密码,调用示例如下所示:
ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
IDatabase db = redis.GetDatabase();
redis安装目录下的redis.windows-service.conf中可以设置redis服务监听端口和密码,如下图所示,修改内容后,需要在Windows服务中重启redis服务后生效。
如果带端口和密码形式连接,需要在Connect函数中传入ConfigurationOptions对象实例,并在实例中设置密码、ip和端口,示例代码如下所示:
ConfigurationOptions options = new ConfigurationOptions();
options.Password = “XXXXXXX”;
options.EndPoints.Add(“XXXXXXX”, XXXX);
redis = ConnectionMultiplexer.Connect(options);
db = redis.GetDatabase();
连接成功后,可以调用redis.GetStatus函数获取连接状态,如下图所示:
redis.GetDatabase函数返回IDatabase接口对象实例,用于与redis服务器交互,该接口中定义了redis中各种数据类型相关的命令操作函数,函数名称都是以数据类型+操作命令的形式定义,下图为字符串类型键值对的操作函数:
编写简单的测试程序,连接redis服务器设置或获取键值对,同时打开命令行连接redis进行交互,C#中的代码如下所示:
private void btnSet_Click(object sender, EventArgs e)
{
if(string.IsNullOrEmpty(txtSeconds.Text))
{
m_db.StringSet(txtKey.Text, txtValue.Text);
}
else
{
m_db.StringSet(txtKey.Text, txtValue.Text,new TimeSpan(0,0,Convert.ToInt32(txtSeconds.Text)));
}
}
private void btnGet_Click(object sender, EventArgs e)
{
if(!m_db.KeyExists(txtKey1.Text))
{
MessageBox.Show("不存在指定key:" + txtKey1.Text);
return;
}
MessageBox.Show(m_db.StringGet(txtKey1.Text));
}
如下截图所示,通过控制台查看redis保存的键值对,然后在Winform程序中获取指定的键的值,两边获取到的内容都是相同的:
在Winform程序中设置新的键值对,同时设置过期时间,然后在控制台中查看并获取新增键的值及过期时间。等键值对过期后,在Winform中再获取键值时,失效的键值已经获取不到了。
参考文献:
[1]https://redis.io/docs/connect/clients/dotnet/
[2]https://github.com/redis/NRedisStack