发现博客园中好多大牛在介绍自己的开源项目是很少用到缓存,比如Memcached、Redis、mongodb等,今天得空抽时间把Redis缓存研究了一下,写下来总结一下,跟大家一起分享 一下。由于小弟水平有限又是第一次接触Redis,有些的不对的地方欢迎指出纠正。
1、 下载安装Redis
下载地址: https://github.com/MSOpenTech/Redis 。
2、 安装Redis
在下载的文件中找到bin并打开。
- redis-server.exe:服务程序(目前我们只用到这一个)
- redis-check-dump.exe:本地数据库检查
- redis-check-aof.exe:更新日志检查
- redis-benchmark.exe:性能测试,用以模拟同时由N个客户端发送M个 SETs/GETs 查询 (类似于 Apache 的ab 工具).
Redis有很多配置参数,这里就不介绍了,有兴趣的朋友可以到网上查查。
双击redis-server.exe或者在命令窗口中输入D: edis-2.6 edis-server.exe即可启动Redis服务。
注意 端口号:Port:6379 在我们的程序中会用到该端口号。
3、 数据读、写、删测试,并实现list存数。
首先引用下面四个DLL文件
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ServiceStack.Redis;
using ServiceStack.Text;
using ServiceStack.Redis.Generic;
namespace RedisStudy
{
public class RedisHelper:IDisposable
{
public RedisClient Redis = new RedisClient("127.0.0.1", 6379);
//缓存池
PooledRedisClientManager prcm = new PooledRedisClientManager();
//默认缓存过期时间单位秒
public int secondsTimeOut = 30 * 60;
/// <summary>
/// 缓冲池
/// </summary>
/// <param name="readWriteHosts"></param>
/// <param name="readOnlyHosts"></param>
/// <returns></returns>
public static PooledRedisClientManager CreateManager(
string[] readWriteHosts, string[] readOnlyHosts)
{
return new PooledRedisClientManager(readWriteHosts, readOnlyHosts,
new RedisClientManagerConfig
{
MaxWritePoolSize = readWriteHosts.Length * 5,
MaxReadPoolSize = readOnlyHosts.Length * 5,
AutoStart = true,
});// { RedisClientFactory = (IRedisClientFactory)RedisCacheClientFactory.Instance.CreateRedisClient("127.0.0.1", 6379) };
}
/// <summary>
/// 构造函数
/// </summary>
/// <param name="OpenPooledRedis">是否开启缓冲池</param>
public RedisHelper(bool OpenPooledRedis=false)
{
if (OpenPooledRedis)
{
prcm = CreateManager(new string[] { "127.0.0.1:6379" }, new string[] { "127.0.0.1:6379" });
Redis = prcm.GetClient() as RedisClient;
}
}
#region Key/Value存储
/// <summary>
/// 设置缓存
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key">缓存建</param>
/// <param name="t">缓存值</param>
/// <param name="timeout">过期时间,单位秒,-1:不过期,0:默认过期时间</param>
/// <returns></returns>
public bool Set<T>(string key, T t, int timeout = 0)
{
if (timeout >= 0)
{
if (timeout > 0)
{
secondsTimeOut = timeout;
}
Redis.Expire(key, secondsTimeOut);
}
return Redis.Add<T>(key, t);
}
/// <summary>
/// 获取
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
public T Get<T>(string key)
{
return Redis.Get<T>(key);
}
/// <summary>
/// 删除
/// </summary>
/// <param name="key"></param>
///