一、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);
}