本篇记录redis的第一期了解学习的过程,包括环境搭建、客户端、可视化管理器等初步的了解,新手快速全方位的了解并上手redis。
redis是什么我就不写了,请自行去中文官网查阅 http://www.redis.cn/。
- 环境搭建
redis资源可在StackExchange.Redis客户端的github上下载该客户端源码,RedisConfigs文件夹下自带3.0版本资源包https://github.com/StackExchange/StackExchange.Redis
环境部署很简单,几句命令。首先把下载好的文件存放到要安装的盘符中,然后打开控制台程序用cd命令进入到目标文件夹。输入redis-server.exe redis.windows.conf 命令启动redis服务加载配置文件。
输入完回车就会出现一下画面,说明redis服务已经启动。
服务启动完毕,开始连接。打开另一个控制台(不要关闭redis服务的控制台),同样的方式进入目标文件夹,输入redis-cli.exe -h 127.0.0.1 -p 6379 -a 123456(或者只输入redis-cli.exe)命令即可连接本地redis服务,其中6379是默认端口号,123456是默认密码。连接成功可以通过set user zhangsan get user 等命令进行测试(命令详情可访问官网查看)。
2. 代码实现(.net)
环境搭建完毕,通过控制台也能连接访问这说明redis服务成功的在机器上运行了,更进一步我们通过一个demo去连接并操作redis。代码实现需要客户端支持,.net支持的redis客户端在官网都有描述,这里我只讲下StackExchange.Redis。源码地址上文已经给出,有兴趣研究的可自行下载。这里我简单讲下使用。打开vs创建一个控制台应用程序,右键该项目打开菜单中的管理nuget程序包。
浏览中搜索StackExchange.Redis并安装
客户端安装完成,下面就是使用。创建一个SERedisHelper类
/// <summary>
/// Redis操作类
/// </summary>
public class SERedisHelper
{
private static string _conn = ConfigurationManager.AppSettings["SERedis"] ?? "127.0.0.1:6379";
#region string类型
/// <summary>
/// 根据Key获取值
/// </summary>
/// <param name="key">键值</param>
/// <returns>System.String.</returns>
public static string StringGet(string key)
{
try
{
using (var client = ConnectionMultiplexer.Connect(_conn))
{
return client.GetDatabase().StringGet(key);
}
}
catch (Exception)
{
return null;
}
}
/// <summary>
/// 批量获取值
/// </summary>
public static string[] StringGetMany(string[] keyStrs)
{
var count = keyStrs.Length;
var keys = new RedisKey[count];
var addrs = new string[count];
for (var i = 0; i < count; i++)
{
keys[i] = keyStrs[i];
}
try
{
using (var client = ConnectionMultiplexer.Connect(_conn))
{
var values = client.GetDatabase().StringGet(keys);
for (var i = 0; i < values.Length; i++)
{
addrs[i] = values[i];
}
return addrs;
}
}
catch (Exception)
{
return null;
}
}
/// <summary>
/// 单条存值
/// </summary>
/// <param name="key">key</param>
/// <param name="value">The value.</param>
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
public static bool StringSet(string key, string value)
{
using (var client = ConnectionMultiplexer.Connect(_conn))
{
return client.GetDatabase().StringSet(key, value);
}
}
/// <summary>
/// 批量存值
/// </summary>
/// <param name="keysStr">key</param>
/// <param name="valuesStr">The value.</param>
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
public static bool StringSetMany(string[] keysStr, string[] valuesStr)
{
var count = keysStr.Length;
var keyValuePair = new KeyValuePair<RedisKey, RedisValue>[count];
for (int i = 0; i < count; i++)
{
keyValuePair[i] = new KeyValuePair<RedisKey, RedisValue>(keysStr[i], valuesStr[i]);
}
using (var client = ConnectionMultiplexer.Connect(_conn))
{
return client.GetDatabase().StringSet(keyValuePair);
}
}
#endregion
#region 泛型
/// <summary>
/// 存值并设置过期时间
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key">key</param>
/// <param name="t">实体</param>
/// <param name="ts">过期时间间隔</param>
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
public static bool Set<T>(string key, T t, TimeSpan ts)
{
var str = JsonConvert.SerializeObject(t);
using (var client = ConnectionMultiplexer.Connect(_conn))
{
return client.GetDatabase().StringSet(key, str, ts);
}
}
/// <summary>
///
/// 根据Key获取值
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key">The key.</param>
/// <returns>T.</returns>
public static T Get<T>(string key) where T : class
{
using (var client = ConnectionMultiplexer.Connect(_conn))
{
var strValue = client.GetDatabase().StringGet(key);
return string.IsNullOrEmpty(strValue) ? null : JsonConvert.DeserializeObject<T>(strValue);
}
}
#endregion
}
帮助类创建完毕,在Program.cs中使用即可。
var ts = new TimeSpan(0, 0, 1, 0, 1);
Console.WriteLine("添加缓存");
SERedisHelper.Set<string>("user", "zhangsan", ts);
Console.WriteLine("获取缓存:" + SERedisHelper.Get<string>("user"));
Console.ReadLine();
这里注意低版本的redis过期时间不支持毫秒级,当然3.0没问题。调试运行即可看到结果。
3. 总结
本篇旨在快速上手了解redis,如有问题请多指点。
最后贴出一点后续深入了解的资料(持续更新)
再贴下官网地址http://www.redis.cn/topics/pipelining.html (官网总结的内容很全)。