ServiceStack.Redis 使用
Redis官网提供了很多开源的C#客户端。例如,Nhiredis ,ServiceStack.Redis ,StackExchange.Redis等。其中ServiceStack.Redis应该算是比较流行的。它提供了一整套从Redis数据结构都强类型对象转换的机制并将对象json序列化。所以这里只介绍ServiceStack.Redis,它也是目前我们产品中所使用的客户端。
ServiceStack.Redis地址:https://github.com/ServiceStack/ServiceStack.Redis
1. 建立一个控制台应用程序,并引用以下ServiceStack.Redis相关的四个类库。或者通过Nuget进行安装Redis常用组件ServiceStack.Redis。 下载示例代码。
2. 创建一个Redis操作的公用类RedisCacheHelper,
using
System;
using
System.Collections.Generic;
using
System.Configuration;
using
System.Linq;
using
System.Text;
using
System.Web;
using
ServiceStack.Common.Extensions;
using
ServiceStack.Redis;
using
ServiceStack.Logging;
namespace
Weiz.Redis.RedisTest
{
public
class
RedisCacheHelper
{
private
static
readonly
PooledRedisClientManager pool =
null
;
private
static
readonly
string
[] redisHosts =
null
;
public
static
int
RedisMaxReadPool =
int
.Parse(ConfigurationManager.AppSettings[
"redis_max_read_pool"
]);
public
static
int
RedisMaxWritePool =
int
.Parse(ConfigurationManager.AppSettings[
"redis_max_write_pool"
]);
static
RedisCacheHelper()
{
var
redisHostStr = ConfigurationManager.AppSettings[
"redis_server_session"
];
if
(!
string
.IsNullOrEmpty(redisHostStr))
{
redisHosts = redisHostStr.Split(
','
);
if
(redisHosts.Length > 0)
{
pool =
new
PooledRedisClientManager(redisHosts, redisHosts,
new
RedisClientManagerConfig()
{
MaxWritePoolSize = RedisMaxWritePool,
MaxReadPoolSize = RedisMaxReadPool,
AutoStart =
true
});
}
}
}
public
static
void
Add<T>(
string
key, T value, DateTime expiry)
{
if
(value ==
null
)
{
return
;
}
if
(expiry <= DateTime.Now)
{
Remove(key);
return
;
}
try
{
if
(pool !=
null
)
{
using
(
var
r = pool.GetClient())
{
if
(r !=
null
)
{
r.SendTimeout = 1000;
r.Set(key, value, expiry - DateTime.Now);
}
}
}
}
catch
(Exception ex)
{
string
msg =
string
.Format(
"{0}:{1}发生异常!{2}"
,
"cache"
,
"存储"
, key);
}
}
public
static
void
Add<T>(
string
key, T value, TimeSpan slidingExpiration)
{
if
(value ==
null
)
{
return
;
}
if
(slidingExpiration.TotalSeconds <= 0)
{
Remove(key);
return
;
}
try
{
if
(pool !=
null
)
{
using
(
var
r = pool.GetClient())
{
if
(r !=
null
)
{
r.SendTimeout = 1000;
r.Set(key, value, slidingExpiration);
}
}
}
}
catch
(Exception ex)
{
string
msg =
string
.Format(
"{0}:{1}发生异常!{2}"
,
"cache"
,
"存储"
, key);
}
}
public
static
T Get<T>(
string
key)
{
if
(
string
.IsNullOrEmpty(key))
{
return
default
(T);
}
T obj =
default
(T);
try
{
if
(pool !=
null
)
{
using
(
var
r = pool.GetClient())
{
if
(r !=
null
)
{
r.SendTimeout = 1000;
obj = r.Get<T>(key);
}
}
}
}
catch
(Exception ex)
{
string
msg =
string
.Format(
"{0}:{1}发生异常!{2}"
,
"cache"
,
"获取"
, key);
}
return
obj;
}
public
static
void
Remove(
string
key)
{
try
{
if
(pool !=
null
)
{
using
(
var
r = pool.GetClient())
{
if
(r !=
null
)
{
r.SendTimeout = 1000;
r.Remove(key);
}
}
}
}
catch
(Exception ex)
{
string
msg =
string
.Format(
"{0}:{1}发生异常!{2}"
,
"cache"
,
"删除"
, key);
}
}
public
static
bool
Exists(
string
key)
{
try
{
if
(pool !=
null
)
{
using
(
var
r = pool.GetClient())
{
if
(r !=
null
)
{
r.SendTimeout = 1000;
return
r.ContainsKey(key);
}
}
}
}
catch
(Exception ex)
{
string
msg =
string
.Format(
"{0}:{1}发生异常!{2}"
,
"cache"
,
"是否存在"
, key);
}
return
false
;
}
}
}
说明:RedisCacheHelper 使用的是客户端链接池模式,这样的存取效率应该是最高的。同时也更方便的支持读写分离,均衡负载。
3. 配置文件
<!-- redis Start -->
<add key=
"SessionExpireMinutes"
value=
"180"
/>
<add key=
"redis_server_session"
value=
"127.0.0.1:6379"
/>
<add key=
"redis_max_read_pool"
value=
"3"
/>
<add key=
"redis_max_write_pool"
value=
"1"
/>
<!--redis end-->
4. 测试程序调用
class
Program
{
static
void
Main(
string
[] args)
{
Console.WriteLine(
"Redis写入缓存:zhong"
);
RedisCacheHelper.Add(
"zhong"
,
"zhongzhongzhong"
, DateTime.Now.AddDays(1));
Console.WriteLine(
"Redis获取缓存:zhong"
);
string
str3 = RedisCacheHelper.Get<
string
>(
"zhong"
);
Console.WriteLine(str3);
Console.WriteLine(
"Redis获取缓存:nihao"
);
string
str = RedisCacheHelper.Get<
string
>(
"nihao"
);
Console.WriteLine(str);
Console.WriteLine(
"Redis获取缓存:wei"
);
string
str1 = RedisCacheHelper.Get<
string
>(
"wei"
);
Console.WriteLine(str1);
Console.ReadKey();
}
}
5. 输出结果
ServiceStack.Redis 使用的更多相关文章
- .Net使用Redis详解之ServiceStack.Redis(七)
序言 本篇从.Net如何接入Reis开始,直至.Net对Redis的各种操作,为了方便学习与做为文档的查看,我做一遍注释展现,其中会对list的阻塞功能和事务的运用做二个案例,进行记录学习. Redi ...
- ServiceStack.Redis订阅发布服务的调用(Z)
1.Redis订阅发布介绍Redis订阅发布是一种消息通信模式:发布者(publisher)发送消息,订阅者(Subscriber)接受消息.类似于设计模式中的观察者模式.发布者和订阅者之间使用频 ...
- serviceStack.Redis 在PooledRedisClientManager 中设置密码
ServiceStack.Redis 是一个C#访问Redis的客户端,可以说可以通过它实现所有需要Redis-Cli的功能.但是今天我在主Redis 实例设置了访问密码,而在slave 上没有设置, ...
- ServiceStack.Redis订阅发布服务的调用
1.Redis订阅发布介绍 Redis订阅发布是一种消息通信模式:发布者(publisher)发送消息,订阅者(Subscriber)接受消息.类似于设计模式中的观察者模式. 发布者和订阅者之间使用频 ...
- Redis简介、与memcached比较、存储方式、应用场景、生产经验教训、安全设置、key的建议、安装和常用数据类型介绍、ServiceStack.Redis使用(1)
1.NOSQL简介 nosql的产生并不是要彻底的代替关系型数据库,而是作为传统关系型数据库的一个补充. Facebook和360使用Cassandra来存储海量社交数据 Twitter在其url抓取 ...
- ServiceStack.Redis 使用教程
http://www.cnblogs.com/shanyou/archive/2011/11/10/2245082.html https://github.com/ServiceStack/Servi ...
- 在使用Redis的客户端连接工具ServiceStack.Redis要注意的问题
在使用Redis的客户端连接工具ServiceStack.Redis要注意的问题 Redis是一个非常NB的内存级的数据库,我们可以把很多”热数据“(即读写非常多的数据)放入其中来操作,这样就减少 ...
- 关于 ServiceStack.Redis 4.0 License
今天更新了框架中的Redis驱动ServiceStack.Redis,最新版本4.0.5.0. 在做简单压力测试时出现异常,提示每小时允许6000个请求. The free-quota limit o ...
- ServiceStack.Redis.RedisNativeClient的方法“get_Db”没有实现
Redis 4.0.0.0版本已经开始收费 Redis 4.0.5.0 已经完成收费 今日在更换Redis版本时 出现了ServiceStack.Redis.RedisNativeClient的方法“ ...
- ServiceStack.Redis
什么是Redis 首先,简述一下什么是Redis. Redis是一个开源.支持网络.基于内存.键值对存储数据库,使用ANSI C编写.从2013年5月开始,Redis的开发由Pivotal赞助.在这之 ...
随机推荐
- day01_虚拟机与主机之间ip配置
虚拟机1: centos_ node1 虚拟机2:centos_node2 宿主主机虚拟机ip配置: vmnet1 来自为知笔记(Wiz)
- HTML5-A*寻路算法
设置起点 设置终点 设置障碍 清除障碍 允许斜向跨越
- ubuntu使用root权限登录的设置方法
Ubuntu系统默认是不允许用户以root身份登录的,在网上找到的方法如下: 1.首先设置root密码,利用现有管理员帐户登陆Ubuntu,在终端执行命令:sudo passwd root,接着输入密 ...
- p4503&bzoj3555 企鹅QQ
传送门(洛谷) 传送门(bzoj) 题目 PenguinQQ是中国最大.最具影响力的SNS(Social Networking Services)网站,以实名制为基础,为用户提供日志.群.即时通讯.相 ...
- 由count(sno)和count(cno)引发的思考
最近在练习sql语句,在一个select查询语句上有理解性偏差,现整理汇总下相关知识点. 首先,说下这个问题吧. 问题是:查询选课人数大于等于2人的课程编号以及选课的人数 具体的表结构信息: 我自己的 ...
- ADT-23.0.2百度网盘下载地址
最近 Google 被墙 http://download.csdn.net/download/wentai2009/7736389
- CSS中position的absolute和relative用法
static: HTML元素的默认定位方式 absolute: 将对象从文档流中拖出,使用left,right,top,bottom等属性进行绝对定位.而其层叠通过z-index属性定义.绝对定位的元 ...
- SpringFox 初体验
本文来自网易云社区. 1.什么是SpringFox? 1.1 Springfox 是一个开源的API Doc的框架, 它的前身是swagger-springmvc,可以将我们的Controller中的 ...
- Ajax.BeginForm 使用过程中遇到的问题
一.Ajax.BeginForm设置的路由在浏览器中解析不到. 问题截图:在视图中设置"Counter/Index",在浏览器中显示的是"action='/'" ...
- 再回首HTML
前言 本阶段视频自己前后看了两遍,感觉效果还是不错的,鉴于昨天上午整理了一些笔记,对HTML的理解深刻了一些.所以在这篇博文中就不再解释关于HTML一些定义的东西,这篇博文主要记录一些常用标记,为以后 ...