说明:本章节使用C#语言开发一个Redis客户端,该客户端能够连接到Redis服务器,读/写字符串数据类型和字符串数据类型,能够实现数据的发布(Publish)和数据的订阅 (Subscribe)。
1.使用visual Studio2019新建一个Windows 窗体。
2.添加Nuget程序包StackExchange.Redis,选择适合的版本安装。添加完成后项目中自动添加相关引用。
3.连接和订阅数据
private ConnectionMultiplexer redis;//连接到redis
private ISubscriber isub;//一个订阅连接
private RedisChannel rc;//通道
private void buttonCon_Click(object sender, EventArgs e)
{
try
{
if (this.buttonCon.Text == "连接")
{
string ip = this.textBoxIP.Text;
string port = this.textBoxPort.Text;
//连接服务器
redis = ConnectionMultiplexer.Connect(ip + ":"+ port);
//订阅数据
isub = redis.GetSubscriber();
rc = new RedisChannel("DC", RedisChannel.PatternMode.Auto);//通道名称DC
isub.Subscribe(rc, Subscribe);
if (redis.IsConnected)
{
this.buttonCon.Text = "断开";
}
}
else if (this.buttonCon.Text == "断开")
{
this.buttonCon.Text = "连接";
if (redis != null)
{
redis.Close();
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
/// <summary>
/// 订阅函数
/// </summary>
/// <param name="rc"></param>
/// <param name="rv"></param>
public void Subscribe(RedisChannel rc, RedisValue rv)
{
if (rv.HasValue)
{
SetSub(Convert.ToString(rv));//添加自己的操作函数 此处我是接收到订阅数据之间显示到接收文本框中
}
}
/// <summary>
/// 发布
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonPub_Click(object sender, EventArgs e)
{
if (redis != null && redis.IsConnected)
{
RedisValue rv = new RedisValue(this.textBoxPublish.Text);
isub.Publish(rc, rv);
}
}
/// <summary>
/// 写字符串/list
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
if (redis != null && redis.IsConnected)
{
IDatabase db = redis.GetDatabase(0);
RedisKey key = this.textBoxKey.Text;
if(this.comboBoxList.SelectedIndex==0)
{
RedisValue value = this.textBoxValue.Text;
db.StringSet(key, value);
}
else if (this.comboBoxList.SelectedIndex == 1)
{
string[] vlist = Convert.ToString(this.textBoxValue.Text).Split('\n');
if (vlist != null && vlist.Length > 0)
{
for (int i = 0; i < vlist.Length; i++)
{
db.ListRightPush(key, vlist[i]);
}
}
}
}
}
/// <summary>
/// 读字符串/list
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button3_Click(object sender, EventArgs e)
{
this.textBoxValue.Text = "";
if (redis != null && redis.IsConnected)
{
try
{
IDatabase db = redis.GetDatabase(0);
RedisKey key = this.textBoxKey.Text;
if (!db.KeyExists(key))
{
this.textBoxValue.Text = "不存在key值"+ this.textBoxKey.Text;
return;
}
if (this.comboBoxList.SelectedIndex == 0)
{
string vstr = db.StringGet(key);
this.textBoxValue.Text = vstr;
}
else if (this.comboBoxList.SelectedIndex == 1)
{
RedisValue[] vlist = db.ListRange(key);
if (vlist != null)
{
if (vlist.Length > 0)
{
for (int i = 0; i < vlist.Length; i++)
{
string v = Convert.ToString(vlist[i]) + "\r\n";
this.textBoxValue.Text += v;
}
}
}
}
}
catch (Exception ex)
{
this.textBoxValue.Text = ex.ToString();
}
}
}