Redis 系列 (一) StackExchange.Redis的使用
一、DLL安装
用NuGet搜索StackExchange.Redis,然后下载就可以。
ConnectionMultiplexer对象是StackExchange.Redis最中枢的对象。这个类的实例需要被整个应用程序域共享和重用的,不要在每个操作中不停的创建该对象的实例,所以使用单例来创建和存放这个对象。
代码:
private static ConfigurationOptions configurationOptions = ConfigurationOptions.Parse("127.0.0.1" + ":" + "");
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,还有很多以后再研究使用。
Redis 系列 (一) StackExchange.Redis的使用的更多相关文章
- Redis系列(一)StackExchange.Redis的使用
Redis系列(一)StackExchange.Redis的使用 一.DLL安装 用NuGet搜索StackExchange.Redis,然后下载就可以. ConnectionMultiplexer对 ...
- 【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的场景又会有个问题出现 ...
随机推荐
- ajax 异步加载显示等待效果
css: #loading { width:170px; height:25px; border:3px solid #C3DAF9; position:absolute; top:300px; le ...
- 记一次创建LVM的日志记录
先上一张鸟哥LVM的图.感觉这张最清楚了. #以下以Xshell的日志记录系统直接记录.上面添加了一些个人理解的注释 [BEGIN] 2016/9/13 9:22:24 #先查看下硬盘的情况. [ro ...
- js中设置元素class的三种方法小结
一.el.setAttribute('class','abc'); 代码如下: .abc { background: red; } test div var div = document.getEl ...
- MAVEN解决Cannot change version of project facet Dynamic web module to 2.5
我们用Eclipse创建Maven结构的web项目的时候选择了Artifact Id为maven-artchetype-webapp,由于这个catalog比较老,用的servlet还是2.3的,而一 ...
- 弄个知乎的粒子动态背景_实践particles.js
好久没登录知乎,发现他们的登录页面粒子动态效果蛮炫的,查一下代码用了Particles.js基于Canvas画布创建粒子颗粒效果. 上图 上图: 感觉有比格,就照着弄了一个,玩玩. githu ...
- ubuntu命令大全
一.文件/文件夹管理 ls 列出当前目录文件(不包括隐含文件) ls -a 列出当前目录文件(包括隐含文件) ls -l 列出当前目录下文件的详细信息 cd .. 回当前目录的上一级目录 cd - 回 ...
- third class
09remain timer 1.button的背景改变:放在背景图片里面,改变背景图片的位置,这样更简洁 08 simple clock 1.上下padding一样,居中2.setInterval( ...
- Python 第三天 文件操作(2)
文件操作 操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开 文件句柄 = file('文件路径', '模式') 注:python中打开文件有两种方式,即:open(...) 和 fi ...
- Javascript重要知识点梳理
Javascript重要知识点梳理 一.Javascript流程控制 js中常用的数据类型 var关键字的使用 if – else if – else switch while for 二.Javas ...
- echarts异步加载柱状图遇到的错误- Error: Component series. not exists. Load it first.
今天看了下echarts教程之中的异步加载柱状图,我按照教程中的代码敲出来之后再运行,就报了一个 Error: Component series. not exists. Load it first. ...