StackExchange.Redis

一.StatckExchange.Redis的核心对象

1.ConnectionMultiplexer

private static conStr="localhost:6379";
private object obj;
private static ConnectionMultiplexer redis;
public static ConnectionMultiplexer red{
get{
if(redis==null)
{
lock(obj)
{
if(redis==null||!redis.IsConnected)
{
redis=ConnectionMultiplexer.Connect(conStr);
}
}
return redis;
}
}
}

2.String类型的基本存储


public async Task<IDatabase> Db()
{
return redis.GetDatabase();
}
public async Task<bool> AddKey(string key,string str)
{
if(await Db().StringSetAsync(key,str))
{
return true;
}
return false;
}
public async Task<string> Get(string key)
{
string str=await Db().StringGet(key);
return str;
}
public async Task<bool> Remove(string key)
{
if(await Db().KeyExistsAsync(key)==false)
{
return false;
}
return Db.KeyDelete(key);
}

三.List

1.有序排列,只可以重复。类似于堆栈可以push和pop,不同点在于两边都可以弹出和添加;

ListLeftPush(key,Value);左侧压栈

ListLeftPop(key)左侧出栈

ListRightPush(key,value);右侧压栈

ListRightPop(key);右侧出栈

ListGetByIndex(key,index);获取某个位置上的值

RedisValue

RedisValue[]

四.Set数据类型

1.无序排列,值不可以重复。增删改查速度较快

SetAdd(key,vale)

SetContains(key,value);判断set中是否存在某个元素

SetLength(key)获得set中的元素的个数

setRemove(key,value)从set中删除元素

refisValue[]SetMembers(key)获取集合中的元素

5.SortedSet

1.如果对于数据遍历顺序有要求,可以使用SorttedSet

SortedSetAdd(key,member,score)再可以这个sortedset中增加member,并且给这个member打分,如果member存在,则覆盖

SortedSetIncrement(key,member,score)

SortedSetDecrement(key,member,score)

StortedSetEntry[]SortedSetRangeByTankWithScores(RedusKey key,long start=0,long stop=-1,Order order=Order.Ascending)

SortedSetEntry[] items = db.SortedSetRangeByRankWithScores("Hotwords");
foreach(var item in items)
{
Console.WriteLine(item.Element+"="+item.Score);
}

五.Hash

1.键值对的集合 类似于Dictionary

六.Geo类型

1.用来保存兴趣点(POI,point of insert)的坐标信息 ,可以实现两点之间的计算

db.eo.Add("ShangHai",New GeoEntry(2133,13232231,"1"));

db.eo.Add("ShangHai",New GeoEntry(23133,132222231,"2"));

double dist=db.GeoDistance("ShangHai","1","2",GeoUnit.Meters);

GeoRadiusResult[] results = db.GeoRadius("ShangHai", "2", 200, GeoUnit.Meters);//获取”2”这个周边 200
米范围内的 POI

七.Redis的批量操作

1.GeoAdd(Rediskey,GeoEntry[]values) SortedSetAdd(RedisKey key,SortedSetEntry[]values)

2,如果一次性的操作不是同类的数据,那么使用批量魔术

IBatch batch=db.GetBatch();

db.GeoAdd(key,value);

db.StringSet(key,value);

batch.Execute();//会把当前连接的Create Batch() Execute()之间的操作一次性提交给服务器

八.Redis中的分布式锁

RedisValue token = Environment.MachineName;

//LockTake(keymtiken,TimeSpan)

if(db.LockTake("mylock",token,TimeSpan.FromSeconds(10)))

{

try

{

int key=client.Get<int>("key");

client.Add("key",key+10);

}

catch(Exception ex)

{

Console.WriteLine(ex.Message);

}finally

{

client.Database.LockRelease(Key,Token);

}

}

else

{

Console.WRiteLine("锁住了");

while(!TryAgain(10))

{

Thread.Sleep(1);

}

}

private static StackExchangeRedisCacheClient client;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值