一、安装StackExchange.Redis
通过NuGet 安装 StackExchange.Redis。

二、字符串

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using StackExchange.Redis;
namespace RedisApp
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
private string connstr = "127.0.0.1:6379"; // 1127.0.0.1:6379,password=xxx
private ConnectionMultiplexer redis { get; set; }
private IDatabase db { get; set; }
/// <summary>
/// 初始化
/// </summary>
/// <returns></returns>
public void redis_init()
{
redis = ConnectionMultiplexer.Connect(connstr);
db = redis.GetDatabase();
}
/// <summary>
/// 保存单个key value
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
/// <returns></returns>
public bool SetStringValue(string key, string value)
{
return db.StringSet(key, value);
}
/// <summary>
/// 保存单个key value
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
/// <param name="expiry">过期</param>
/// <returns></returns>
public bool SetStringValueExpiry(string key, string value, TimeSpan? expiry = default(TimeSpan?))
{
return db.StringSet(key, value, expiry);
}
/// <summary>
/// 获取一个key的对象
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public string GetStringValue(string key)
{
return db.StringGet(key);
}
/// <summary>
/// 删除key
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public bool DeleteStringKey(string key)
{
return db.KeyDelete(key);
}
/// <summary>
/// 测试
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnTest_Click(object sender, EventArgs e)
{
// addkeyvalue里面的timespan 可以是用beginTime 和 endTime来计算,此例子里面固定为10分钟,仅供参考。
TimeSpan span = DateTime.Now.AddMinutes(10) - DateTime.Now;
SetStringValue("9001", "1000");
SetStringValueExpiry("9002", "1002", span);
SetStringValueExpiry("9003", "1003", TimeSpan.FromSeconds(30)); // 设置时间 30s后过期。
}
/// <summary>
/// Load
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FormMain_Load(object sender, EventArgs e)
{
// 初始化
redis_init();
}
}
}

三、对象
需要安装Newtonsoft.Json。


存对象(对象需要序列化转成字符串,再存进库中)。
取对象(反序列化)。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Newtonsoft.Json;
using StackExchange.Redis;
namespace RedisApp
{
public partial class FormMain : Form
{
public class User
{
public string Name;
public int Age;
public double Height;
}
public FormMain()
{
InitializeComponent();
}
private string connstr = "127.0.0.1:6379"; // 1127.0.0.1:6379,password=xxx
private ConnectionMultiplexer redis { get; set; }
private IDatabase db { get; set; }
/// <summary>
/// 初始化
/// </summary>
/// <returns></returns>
public void redis_init()
{
redis = ConnectionMultiplexer.Connect(connstr);
db = redis.GetDatabase();
}
/// <summary>
/// 保存单个key value
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
/// <returns></returns>
public bool SetStringValue(string key, string value)
{
return db.StringSet(key, value);
}
/// <summary>
/// 保存单个key value
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
/// <param name="expiry">过期</param>
/// <returns></returns>
public bool SetStringValueExpiry(string key, string value, TimeSpan? expiry = default(TimeSpan?))
{
return db.StringSet(key, value, expiry);
}
/// <summary>
/// 获取一个key的对象
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public string GetStringValue(string key)
{
return db.StringGet(key);
}
/// <summary>
/// 删除key
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public bool DeleteStringKey(string key)
{
return db.KeyDelete(key);
}
/// <summary>
/// 测试
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnTest_Click(object sender, EventArgs e)
{
// addkeyvalue里面的timespan 可以是用beginTime 和 endTime来计算,此例子里面固定为10分钟,仅供参考。
TimeSpan span = DateTime.Now.AddMinutes(10) - DateTime.Now;
SetStringValue("9001", "1000");
SetStringValueExpiry("9002", "1002", span);
SetStringValueExpiry("9003", "1003", TimeSpan.FromSeconds(30)); // 设置时间 30s后过期。
}
/// <summary>
/// Load
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FormMain_Load(object sender, EventArgs e)
{
// 初始化
redis_init();
}
/// <summary>
/// 测试工具类
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnRedis_Click(object sender, EventArgs e)
{
RedisHelper redisHelper = new RedisHelper("127.0.0.1:6379"); // "127.0.0.1:6379,password=food
string value = redisHelper.GetStringValue("9001");
tbLine.Text = value;
}
/// <summary>
/// 测试对象
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnJson_Click(object sender, EventArgs e)
{
// 创建对象
User user = new User();
user.Name = "jiang";
user.Age = 16;
user.Height = 1.73;
string demojson = JsonConvert.SerializeObject(user); // 序列化
SetStringValue("model", demojson);
string model = GetStringValue("model");
User user_new = new User();
user_new = JsonConvert.DeserializeObject<User>(model); // 反序列化
tbLine.Text = user_new.Name + " " + user_new.Age + " " + user_new.Height;
}
}
}
四、StringIncrement 增量、StringDecrement 减量(默认值同为1)
double increment = 0;
double decrement = 0;
for (int i = 0; i < 10; i++)
{
increment = db.StringIncrement("StringIncrement", 1); // 增量 每次+1
}
for (int i = 0; i < 10; i++)
{
decrement = db.StringDecrement("StringIncrement"); // 减量 每次-1
}
五、List
Redis 列表是简单的字符串列表,按照插入顺序排序。可以添加一个元素到列表的头部或者尾部。

for (int i = 0; i < 5; i++)
{
db.ListRightPush("list", i); // 从底部插入数据
}
for (int i = 5; i < 10; i++)
{
db.ListLeftPush("list", i); // 从顶部插入数据
}
//var length = db.ListLength("list"); // 长度 10
//var rightPop = db.ListRightPop("list"); // 从底部拿出数据
// var leftPop = db.ListLeftPop("list"); // 从顶部拿出数据
// var list = db.ListRange("list");
六、Hash(哈希)
Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。相对于将对象的每个字段存成单个 string类型。一个对象存储在 hash 类型中会占用更少的内存,并且可以更方便的存取整个对象。

// 创建对象
User user_jiang = new User();
user_jiang.Name = "jiang";
user_jiang.Age = 16;
user_jiang.Height = 1.73;
User user_hao = new User();
user_hao.Name = "hao";
user_hao.Age = 17;
user_hao.Height = 1.82;
string json_jiang = JsonConvert.SerializeObject(user_jiang); // 序列化
string json_hao = JsonConvert.SerializeObject(user_hao); // 序列化
db.HashSet("user", "jiang", json_jiang);
db.HashSet("user", "howsky", json_hao);
// 获取Model
string hash_jiang = db.HashGet("user", "jiang");
User user = new User();
user = JsonConvert.DeserializeObject<User>(hash_jiang); // 反序列化
// 获取List
RedisValue[] values = db.HashValues("user"); // 获取所有value
IList<User> list = new List<User>();
foreach (var item in values)
{
User model = JsonConvert.DeserializeObject<User>(item);
list.Add(model);
}