ASP Redis分布式缓存

89 篇文章 0 订阅

一、Redis和memcached都是分布式缓存技术。
memcached是保存在内存中的,没办法永久存储,丢失后没办法恢复。(只能按键值对的形式存储)
Redis可以永久存储,是主从复制,(断电)可以故障恢复。是一种NoSQL数据库(非关系型数据库,没有数据表这些),按键值对等的形式保存。
Redis可以保存的数据类型:string(字符串)(其实就是键值对),list(链表(队列 栈)),Hash(哈希),set(无序集合,可以做交集 并集 差集的运算),zset(sorted set有序集合)。

二、Redis安装:下载:https://github.com/dmajkic/redis/downloads

Redis/64bit/    文件说明:  redis-server.exe:服务程序;  redis-check-dump.exe:本地数据库检查;  redis-check-aof.exe:更新日志检查;  redis-benchmark.exe:性能测试,用以模拟同时由N个客户端发送M个SETs/GETs查询;  redis-cli.exe:服务端开启后,客户端就可以输入各种命令测试了(用于测试服务端是否开启)。

开启Redis服务:cmd----cd D:/Redis/64bit----redis-server.exe redis.conf

也可以将此服务设置为windows系统服务,下载Redis服务安装软件:https://github.com/rgl/redis/downloads  安装即可。

可以通过运行(cmd) redis-cli.exe -h 127.0.0.1 -p 6379 来测试redis服务是否开启。-h 表示主机, -p 表示端口。

引入DLL文件:ServiceStack.dll  ServiceStack.Interfaces.dll ServiceStack.ServiceInterface.dll

RedisClient的创建

IRedisClientsManager clientManager = new PooledRedisClientManager(new string[]{"127.0.0.1:6379"});  //Redis服务器的IP和端口。可以有多个Redis服务器,分布式缓存。
IRedisClient redisClient = clientManager.GetClient();

Redis存放String类型(键值对的形式,对象需要序列化成String类型)

//String类型(键值对的形式)在Redis中的存放。
var client = new RedisClient("127.0.0.1",6379);   //用上面的方式创建,不要直接new
client.Set<int>("pwd",123);   //存数据     Set<UserInfo>存对象,Redis自动进行序列化(也可以手动序列化和反序列化),memcached需要手动序列化。   Set<List<UserInfo>>存集合
int pwd = client.Get<int>("pwd");  //读取数据
Console.WriteLine(pwd);

Redis直接存放对象类型(不需要序列化)

var client = new RedisClient("127.0.0.1",6379);   //用上面的方式创建,不要直接new
client.SetEntryInHash("user","userInfo","aaaaa");  //不需要序列化和反序列化
client.SetEntryInHash("user","userName","zhangsan");
client.SetEntryInHash("user","userPwd","123456");
Redis存放List链表(队列、栈)(分布式队列、栈)
var client = new RedisClient("127.0.0.1",6379);   //用上面的方式创建,不要直接new
client.EnqueueItemOnList("name","zhangsan");   //入队。name是队列名。
client.EnqueueItemOnList("name","lisi");
int count = client.GetListCount("name");    //获取name队列的长度。
for(int i=0;i<count;i++)
{
	Console.WriteLine(client.DequeueItemFromList("name"));  //出队
}
Redis存放List链表(分布式栈)
var client = new RedisClient("127.0.0.1",6379);   //用上面的方式创建,不要直接new
client.PushItemOnList("name","zhangsan");   //入栈
client.PushItemOnList("name","lisi");
int count = client.GetListCount("name");   //获取name队列的长度。
for(int i=0;i<count;i++)
{
	Console.WriteLine(client.PopItemFromList("name"));  //出栈
}
Redis存放Set类型(集合)(String类型的无序集合,可以进行交集、并集、差集运算)
var client = new RedisClient("127.0.0.1",6379);   //用上面的方式创建,不要直接new
client.AddItemToSet("a3","aaa");  //向a3集合中添加数据。
client.AddItemToSet("a3","bbb");
client.AddItemToSet("a3","ccc");
client.AddItemToSet("a3","ddd");
System.Collections.Generic.HashSet<string> hashset = client.GetAllItemsFromSet("a3");  //从redis中取集合
foreach(string str in hashset)
{
	Console.WriteLine(str);
}

//并集
System.Collections.Generic.HashSet<string> hashset2 = client.GetUnionFromSets(new string[]{"a3","a4"});  //Redis中的a3和a4集合的并集。

//交集
System.Collections.Generic.HashSet<string> hashset3 = client.GetIntersectFromSets(new string[]{"a3","a4"});  //Redis中的a3和a4集合的交集。

//差集
System.Collections.Generic.HashSet<string> hashset4 = client.GetDifferencesFromSet("a3",new string[]{"a4","a5"});  //Redis中的a3-a4-a5的差集。
 
Redis存放有序集合(Sorted Set)
var client = new RedisClient("127.0.0.1",6379);   //用上面的方式创建,不要直接new
client.AddItemToSortedSet("a3","aaa");  //向a3集合中添加数据。
client.AddItemToSortedSet("a3","bbb");
client.AddItemToSortedSet("a3","ccc");
client.AddItemToSortedSet("a3","ddd");
System.Collections.Generic.List<string> list = client.GetAllItemsFromSortedSet("a3");  //从redis中取集合
foreach(string str in list)
{
	Console.WriteLine(str);
}



使用方法: 先附加DB_51aspx文件夹里面数据库到你的mssql 2000当中,用VS2005打开,修改web.config中的数据库配置: 这里改你的数据库用户名及密码 ,运行!OK! 后台路径为:admin/login.aspx 用户名 、密码为51aspx 采用多层分布式架构 -------WEB-------- 表示层,负责应用程序的表现形式、用户体验等。 -------Common------- 公共函数类,字符截取、验证用户输入信息等功能。一般被表示层调用。 -------BLL------ 处理应用程序的业务逻辑,被表示层调用。 -------DALFactory----- 抽象工厂,用于创建各种数据对象的方法,这里有配置文件和反射的运用。 -------Model------- Model程序集,存放实体类,用于数据访问层和逻辑层调用 -------IDAL-------- 数据操作接口,数据访问层实现其接口并重写它(体现了面向接口的编程思想)。 -------Sqlserver---- 数据访问层,实现具体的select、update、delete....操作,重写IDAL接口。 -------DBUtility---- 数据访问类组件,这里使用的是SqlHelper 注:这是我参考一些多层架构的资料结合对多层的理解写的一个demo,用了两天时间,可能不是很标准,大家看的时候,有什么意见多多交流,一起探讨.分页那里还有点bug,不过我想以后再改进了(分页封装到数据层我总觉得不好),前台部分没有用控件(貌似一个高手告诉我,如果哪天你做.net不用控件了,你就可以了,汗一下!我就索性试一试。^_^)。有什么不合理的地方,欢迎提出来,我们一起学习,一起交流。 作者:李平
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值