1、了解Redis
Redis是一款开源的、高性能的键-值存储(key-value store)。它常被称作是一款数据结构服务器(data structure server)。Redis的键值可以包括字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)和 有序集合(sorted sets)等数据类型。 对于这些数据类型,你可以执行原子操作。例如:对字符串进行附加操作(append);递增哈希中的值;向列表中增加元素;计算集合的交集、并集与差集等。
为了获得优异的性能,Redis采用了内存中(in-memory)数据集(dataset)的方式。根据使用场景的不同,你可以每隔一段时间将数据集转存到磁盘上来持久化数据,或者在日志尾部追加每一条操作命令。
Redis同样支持主从复制(master-slave replication),并且具有非常快速的非阻塞首次同步(non-blocking first synchronization)、网络断开自动重连等功能。同时Redis还具有其它一些特性,其中包括简单的check-and-set机制、pub/sub和配置设置等,以便使得Redis能够表现得更像缓存(cache)。
Redis还提供了丰富的客户端,以便支持现阶段流行的大多数编程语言。详细的支持列表可以参看Redis官方文档:http://redis.io/clients。Redis自身使用ANSI C来编写,并且能够在不产生外部依赖(external dependencies)的情况下运行在大多数POSIX系统上,例如:Linux、*BSD、OS X和Solaris等。
Redis 由四个可执行文件:redis-benchmark、redis-cli、redis-server、redis-stat 这四个文件,加上一个redis.conf就构成了整个redis的最终可用包。它们的作用如下:
redis-server:Redis服务器的daemon启动程序
redis-cli:Redis命令行操作工具。当然,你也可以用telnet根据其纯文本协议来操作
redis-benchmark:Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能
redis-stat:Redis状态检测工具,可以检测Redis当前状态参数及延迟状况
2、Redis下载地址:https://github.com/rgl/redis/downloads,安装服务版,安装后的效果图,启动服务,开始--services.msc,启动Redis服务
3、安装后测试是否正常,双击安装文件夹下的 redis-cli文件,敲命令,如出现以下情况属于正常
4、使用C#第三方类库 StackExchange.Redis 操作Redis,右键 VS 项目,使用 NuGet 获取StackExchange 到项目中,新建Service.cs类实现 redis 方法
4.1、封装Redis操作的 Service.cs 代码
public class Service
{
private static int DEFAULT_TMEOUT = 600;//默认超时时间(单位秒)
private static ConnectionMultiplexer _redis;
private static IDatabase _db;
private static IServer _server;
private static bool needSave = false;
string address; //redis服务地址
JsonSerializerSettings jsonConfig = new JsonSerializerSettings() { ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore };
public Service()
{//获取web.config配置文件中的redis服务地址
this.address = ConfigurationManager.AppSettings["RedisServer"];
if (string.IsNullOrWhiteSpace(address))
this.address = "localhost";
var options = ConfigurationOptions.Parse(address);
options.SyncTimeout = int.MaxValue;
options.AllowAdmin = true;
if (_redis == null)
_redis = ConnectionMultiplexer.Connect(options);
if (_server == null)
_server = _redis.GetServer(address + ":6379");
if (_db == null)
_db = _redis.GetDatabase();
if (_db == null)
throw new ApplicationException("Redis未取到Database");
}
///
/// 初始化redis
///
/// 主机、服务地址
/// 端口
/// 密码
private void Init(string host, int port, string pwd)
{
var options = ConfigurationOptions.Parse(host + ":" + port);
options.SyncTimeout = int.MaxValue;
options.AllowAdmin = true;
if (!string.IsNullOrEmpty(pwd))
{
options.Password = pwd;
}
if (_redis == null)
_redis = ConnectionMultiplexer.Connect(options);
if (_server == null)
_server = _redis.GetServer(host + ":" + port);
if (_db == null)
_db = _redis.GetDatabase();
needSave = false;
}
public int TimeOut
{
get
{
return DEFAULT_TMEOUT;
}
set
{
DEFAULT_TMEOUT = value;
}
}
class CacheObject
{
///
/// 过期时间
///
public int ExpireTime { get; set; }
///
/// 是否的指定时间后强制过期
///
public bool ForceOutofDate { get; set; }
public T Value { get; set; }
}
public object Get(string key)
{
return Get
4.2、新建一个测试项目,测试上面封装的代码,右键解决方案-新建项目,测试---单元测试
///
/// 测试缓存
///
[TestClass]
public class CacheRedis
{
[TestMethod]
public void InsertData()
{
List users = new List();
for (int i = 0; i < 10; i++)
{
User user = new User() {
Name = "zy" + i,
Age = i+1
};
users.Add(user);
}
Cache.Insert("zy", users , 60);
}
class User
{
public string Name { get; set; }
public int Age { get; set; }
}
[TestMethod]
public void GetData()
{
var users = Cache.Get>("zy");
foreach (var item in users)
{
Console.Write(item.Name);
}
}
[TestMethod]
public void RemoveData()
{
Cache.Remove("zy");
}
}
4.4、在测试方法上,右键,调试测试,可以调试刚刚封装的方法,发现测试项目非常有用,谁用谁知道,哈哈