Redis系列(一)StackExchange.Redis的使用
Redis系列(一)StackExchange.Redis的使用
一、DLL安装
用NuGet搜索StackExchange.Redis,然后下载就可以。
ConnectionMultiplexer对象是StackExchange.Redis最中枢的对象。这个类的实例需要被整个应用程序域共享和重用的,不要在每个操作中不停的创建该对象的实例,所以使用单例来创建和存放这个对象。
代码:
private static ConfigurationOptions configurationOptions = ConfigurationOptions.Parse("127.0.0.1" + ":" + "6379");
private static readonly object Locker = new object();
private static ConnectionMultiplexer redisConn; /// <summary>
/// 单例获取
/// </summary>
public static ConnectionMultiplexer RedisConn
{
get
{
if (redisConn == null)
{
lock (Locker)
{
if (redisConn == null || !redisConn.IsConnected)
{
redisConn = ConnectionMultiplexer.Connect(configurationOptions);
}
}
}
return redisConn;
}
}
IDatabase db = redis.GetDatabase();
这里的GetDatabase() 返回的db对象是很轻量级别的,不需要被缓存起来,每次用每次取即可。IDatabase 的所有方法都有同步和异步的实现。其中的异步实现都是可以await的。
二、Strings的相关方法
具体代码:
var db = conn.GetDatabase();
#region Strings命令
string key = "keyTest1";
//SET命令
db.StringSet(key, "10");
//GET命令
string value = db.StringGet(key);
Console.WriteLine(value);
//APPEND命令
db.StringAppend(key, "10");
value = db.StringGet(key);
Console.WriteLine(value);
//有第二个参数(整数,参看StringIncrement方法)为DECRBY命令
//没有第二个参数为DECR命令
db.StringDecrement(key);
value = db.StringGet(key);
Console.WriteLine(value);
//有第二个参数为INCRBY命令
//没有第二个参数为INCR命令
db.StringIncrement(key, 2);
value = db.StringGet(key);
Console.WriteLine(value);
string key2 = "keyTest";
//SETEX命令,带过期时间
db.StringSet(key2, "keyTest2", new TimeSpan(0, 0, 5));
string value2 = db.StringGet(key2);
Console.WriteLine(value2);
Thread.Sleep(5 * 1000);
//超过5s后,查不到该值
value2 = db.StringGet(key2);
Console.WriteLine("5s later:" + value2);
//GETSET命令,读出原来的值,并附新值
//下面两个是测试
value = db.StringGetSet(key, "2000");
Console.WriteLine(value);
value = db.StringGet(key);
Console.WriteLine(value);
//MSET命令
db.StringSet(new KeyValuePair<RedisKey, RedisValue>[] {
new KeyValuePair<RedisKey, RedisValue>("key1", "value1"),
new KeyValuePair<RedisKey, RedisValue>("key2", "value2"), });
//MGET命令
RedisValue[] values = db.StringGet(new RedisKey[] { "key1", "key2" });
Console.WriteLine(values[0] + "&&" + values[1]);
#endregion
运行结果:
三、Hashes的相关方法
具体代码:
var db = conn.GetDatabase();
#region Hash命令
string key = "mykey";
//避免key重复
db.KeyDelete(key);
//HSET命令
db.HashSet(key, "a", "1");
//HGET命令
string value = db.HashGet(key, "a");
Console.WriteLine(value);
//HMSET
db.HashSet(key, new HashEntry[] { new HashEntry("b", "2"), new HashEntry("c", "3") });
//HMGET
HashEntry[] values = db.HashGetAll(key);
Console.WriteLine(values[0].Name + "///" + values[0].Value);
//HDEL
db.HashDelete(key, "c");
string valuec = db.HashGet(key, "c");
Console.WriteLine("c:" + valuec);
//HEXISTS
Console.WriteLine(db.HashExists(key, "a"));
#endregion
运行结果:
四、Lists的相关方法
具体代码:
var db = conn.GetDatabase();
#region List命令
string key = "mykey";
db.KeyDelete(key);
//LPUSH
long index = db.ListLeftPush(key, "test");
//LINDEX,index返回总的长度,index必须减一
string value = db.ListGetByIndex(key, index - 1);
Console.WriteLine(value);
//LINSTER
long index2 = db.ListInsertAfter(key, "test", "testright");
string value2 = db.ListGetByIndex(key, index2 - 1);
Console.WriteLine(value2);
long index3 = db.ListInsertBefore(key, "test", "testleft");
string value3 = db.ListGetByIndex(key, index - 1);
//LRANGE
RedisValue[] values = db.ListRange(key);
Console.WriteLine("values:begin");
values.ToList().ForEach((v) =>
{
Console.WriteLine(v);
});
Console.WriteLine("values:end");
//LREM
long index4 = db.ListRemove(key, "test");
values = db.ListRange(key);
Console.WriteLine("values2:begin");
values.ToList().ForEach((v) =>
{
Console.WriteLine(v);
});
Console.WriteLine("values2:end");
//LPOP
string value5 = db.ListLeftPop(key);
Console.WriteLine(value5);
values = db.ListRange(key);
Console.WriteLine("values3:begin");
values.ToList().ForEach((v) =>
{
Console.WriteLine(v);
});
Console.WriteLine("values3:end");
Console.WriteLine(value3);
#endregion
运行结果:
五、最后
现在只简单学会使用Strings、Hashes和Lists,还有很多以后再研究使用。
备注:
文章系转载:http://www.cnblogs.com/weixiao520/p/5765358.html
Redis系列(一)StackExchange.Redis的使用的更多相关文章
- Redis 系列 (一) StackExchange.Redis的使用
一.DLL安装 用NuGet搜索StackExchange.Redis,然后下载就可以. ConnectionMultiplexer对象是StackExchange.Redis最中枢的对象.这个类的实 ...
- 【11】Redis .net 实例 StackExchange.Redis框架
1.创建测试项目并下载nuget包:StackExchange.Redis PM> Install-Package StackExchange.Redis 2.创建 RedisHelper类 p ...
- Redis系列(二):Redis的5种数据结构及其常用命令
上一篇博客,我们讲解了什么是Redis以及在Windows和Linux环境下安装Redis的方法, 没看过的同学可以点击以下链接查看: Redis系列(一):Redis简介及环境安装. 本篇博客我们来 ...
- Redis系列(三):Redis的持久化机制(RDB、AOF)
本篇博客是Redis系列的第3篇,主要讲解下Redis的2种持久化机制:RDB和AOF. 本系列的前2篇可以点击以下链接查看: Redis系列(一):Redis简介及环境安装. Redis系列(二): ...
- Redis系列(四):Redis的复制机制(主从复制)
本篇博客是Redis系列的第4篇,主要讲解下Redis的主从复制机制. 本系列的前3篇可以点击以下链接查看: Redis系列(一):Redis简介及环境安装 Redis系列(二):Redis的5种数据 ...
- Redis系列(五):Redis的过期键删除策略
本篇博客是Redis系列的第5篇,主要讲解下Redis的过期键删除策略. 本系列的前4篇可以点击以下链接查看: Redis系列(一):Redis简介及环境安装 Redis系列(二):Redis的5种数 ...
- Java Redis系列2 (redis的安装与使用+redis持久化的实现))
Java Redis系列2 (redis的安装与使用+redis持久化的实现) 什么是Redis? Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供测试数据,50 ...
- Redis集群~StackExchange.redis连接Twemproxy代理服务器
回到目录 本文是Redis集群系列的一篇文章,主要介绍使用StackExchange.Redis进行Twemproxy(文中简称TW)代理服务的连接过程,事务上,对于TW来说,我们需要理解一下它的物理 ...
- Redis学习笔记~StackExchange.Redis实现分布式Session
回到目录 对于多WEB的环境现在已经是必须的了,很难想像一台WEB服务器面对百万并发的响应,所以,我们需要多台WEB服务器集群合作,来缓解这种高并发,高吞吐的场景,而对于多WEB的场景又会有个问题出现 ...
随机推荐
- 1010 过河卒 2002年NOIP全国联赛普及组codevs
1010 过河卒 2002年NOIP全国联赛普及组codevs 题目描述 Description 如图,A 点有一个过河卒,需要走到目标 B 点.卒行走规则:可以向下.或者向右.同时在棋盘上的任一点 ...
- 26、Java并发性和多线程-线程池
以下内容转自http://ifeve.com/thread-pools/: 线程池(Thread Pool)对于限制应用程序中同一时刻运行的线程数很有用.因为每启动一个新线程都会有相应的性能开销,每个 ...
- Java虚拟机深入JVM内核—原理、诊断与优化视频教程
http://www.eimhe.com/forum.php?mod=viewthread&tid=142832&highlight=%C4%DA%BA%CB
- Dalvik虚拟机总结
一.Dalvik虚拟机启动 在启动Zygote进程时,会启动Dalvik虚拟机,完毕以下几件事: 1. 创建了一个Dalvik虚拟机实例: 2. 载入了Java核心类及注冊其JNI方法: 3. 为主线 ...
- priority_queue实现
#include <algorithm> using namespace std; /* priority_queue只允许在底端加入元素,并从顶端取出元素, 其内部元素不是依照被推入的次 ...
- 【CV论文阅读】Rank Pooling for Action Recognition
这是期刊论文的版本,不是会议论文的版本.看了论文之后,只能说,太TM聪明了.膜拜~~ 视频的表示方法有很多,一般是把它看作帧的序列.论文提出一种新的方法去表示视频,用ranking function的 ...
- PKU 3667 Hotel (线段树,区间合并,最长连续区间)
题意:宾馆有N个房间(1~N),M个操作,a=1,输入b,表示N间房是否有连续的b间房.有输出最左边的房编号 没有输出0.a=2,输入b,c表示房间b到c清空. 模仿了大神的代码,敲了一遍,有些地方还 ...
- Jsp中EL表达式的使用
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 1.什么是EL EL是JSP表达式语言,全称是ExpressionLang ...
- Project Perfect让Swift在server端跑起来-引言(一)
编者语:今天是大年初一.先和大家简单说一句猴年快乐! watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/ ...
- mac关闭和开启启动声
1 关闭 sudo nvram SystemAudioVolume=%01 2 开启 sudo nvram -d SystemAudioVolume