.NET中Redis安装部署及使用方法简介附->开源Redis操作辅助类
Redis是一个用的比较广泛的Key/Value的内存数据库,新浪微博、Github、StackOverflow 等大型应用中都用其作为缓存,Redis的官网为http://redis.io/。
Redis 是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。
Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。
在这篇文章中我们将记录一下Redis的安装,以及如何在.NET中使用Redis。
工具下载位置:http://pan.baidu.com/s/1jILIzLs,包括服务端配置以及查看缓存的工具。
一、Redis服务端以服务方式运行
服务端是以服务的形式运行,将Redis服务端解压到某个目录,然后以管理员方式运行cmd执行命令进行安装:
redis-server.exe --service-install redis.windows.conf --loglevel verbose
注意卸载服务的命令为:
redis-server.exe --service-uninstall redis.windows.conf --loglevel verbose
注意事项,修改Redis端口及密码的配置在文件redis.windows-service.conf中:(使用redis284.rar中解压文件)
aaarticlea/png;base64,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" alt="" />
修改端口,压缩文件中配置的是6488:
修改密码
修改库的数量
配置完成后,执行
redis-server.exe --service-install redis.windows.conf --loglevel verbose
到控制面板查看服务已经安装成功了,注意首次安装时默认没有启动,单击启动即可。
工具配置,安装后如下图
连接成功后,就可以查看缓存中的数据了
二、Redis服务端以控制台方式运行
解压下载的redis64-2.6.12.1.rar文件,如下图:
第一步(配置本地服务)
第二部(安装和配置客户端)
文件中的“redis-desktop-manager-0.8.2.3849.exe“是2015-11-23 从Redis的官网下载的客户端安装包,如果有更新可以去官网下载最新的Redis,这是链接:http://redis.io/
1.点击客户端安装程序,下一步....,完成打开客户端界面就可以了,省略安装截图。
2.打开界面,客户端默认读取到6379的端口,会创建一个6379的Redis服务器
由于我更改了6379的端口号,导致Redis客户端默认创建的localhost服务器启动不成功,这里只需要右击修改一下端口号就可以了。
三、C#访问Redis
下载ServiceStack.Redis
和MongoDB一样,在.NET中使用Redis其实也是使用第三方驱动,官网推荐的是使用ServiceStack.Redis 下载后解压得到如下dll
.NET项目中使用Redis
ServerStack中有很多方法可以在.NET中调用,其类结构图如下:
Redis公共类库参考
using System;
using System.Collections.Generic;
using System.Linq; namespace RDIFramework.Utilities
{
using ServiceStack.Redis;
using ServiceStack.Redis.Generic; /// <summary>
/// Redis公共辅助类库
/// </summary>
public class RedisHelper : IDisposable
{
public RedisClient Redis = new RedisClient("127.0.0.1", 6379);
//缓存池
PooledRedisClientManager prcm = new PooledRedisClientManager(); //默认缓存过期时间单位秒
public int secondsTimeOut = 30 * 60; /// <summary>
/// 缓冲池
/// </summary>
/// <param name="readWriteHosts"></param>
/// <param name="readOnlyHosts"></param>
/// <returns></returns>
public static PooledRedisClientManager CreateManager(
string[] readWriteHosts, string[] readOnlyHosts)
{
return new PooledRedisClientManager(readWriteHosts, readOnlyHosts,
new RedisClientManagerConfig
{
MaxWritePoolSize = readWriteHosts.Length * 5,
MaxReadPoolSize = readOnlyHosts.Length * 5,
AutoStart = true,
});// { RedisClientFactory = (IRedisClientFactory)RedisCacheClientFactory.Instance.CreateRedisClient("127.0.0.1", 6379) };
}
/// <summary>
/// 构造函数
/// </summary>
/// <param name="openPooledRedis">是否开启缓冲池</param>
public RedisHelper(bool openPooledRedis = false)
{
if (openPooledRedis)
{
prcm = CreateManager(new string[] { "127.0.0.1:6379" }, new string[] { "127.0.0.1:6379" });
Redis = prcm.GetClient() as RedisClient;
}
} #region Key/Value存储
/// <summary>
/// 设置缓存
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key">缓存建</param>
/// <param name="t">缓存值</param>
/// <param name="timeout">过期时间,单位秒,-1:不过期,0:默认过期时间</param>
/// <returns></returns>
public bool Set<T>(string key, T t, int timeout = 0)
{
if (timeout >= 0)
{
if (timeout > 0)
{
secondsTimeOut = timeout;
}
Redis.Expire(key, secondsTimeOut);
} return Redis.Add<T>(key, t);
}
/// <summary>
/// 获取
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
public T Get<T>(string key)
{
return Redis.Get<T>(key);
}
/// <summary>
/// 删除
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public bool Remove(string key)
{
return Redis.Remove(key);
} public bool Add<T>(string key, T t, int timeout)
{
if (timeout >= 0)
{
if (timeout > 0)
{
secondsTimeOut = timeout;
}
Redis.Expire(key, secondsTimeOut);
}
return Redis.Add<T>(key, t);
}
#endregion #region 链表操作
/// <summary>
/// 根据IEnumerable数据添加链表
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="listId"></param>
/// <param name="values"></param>
/// <param name="timeout"></param>
public void AddList<T>(string listId, IEnumerable<T> values, int timeout = 0)
{
Redis.Expire(listId, 60);
IRedisTypedClient<T> iredisClient = Redis.As<T>();
if (timeout >= 0)
{
if (timeout > 0)
{
secondsTimeOut = timeout;
}
Redis.Expire(listId, secondsTimeOut);
}
var redisList = iredisClient.Lists[listId];
redisList.AddRange(values);
iredisClient.Save();
}
/// <summary>
/// 添加单个实体到链表中
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="listId"></param>
/// <param name="Item"></param>
/// <param name="timeout"></param>
public void AddEntityToList<T>(string listId, T Item, int timeout = 0)
{
IRedisTypedClient<T> iredisClient = Redis.As<T>();
if (timeout >= 0)
{
if (timeout > 0)
{
secondsTimeOut = timeout;
}
Redis.Expire(listId, secondsTimeOut);
}
var redisList = iredisClient.Lists[listId];
redisList.Add(Item);
iredisClient.Save();
}
/// <summary>
/// 获取链表
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="listId"></param>
/// <returns></returns>
public IEnumerable<T> GetList<T>(string listId)
{
IRedisTypedClient<T> iredisClient = Redis.As<T>();
return iredisClient.Lists[listId];
}
/// <summary>
/// 在链表中删除单个实体
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="listId"></param>
/// <param name="t"></param>
public void RemoveEntityFromList<T>(string listId, T t)
{
IRedisTypedClient<T> iredisClient = Redis.As<T>();
var redisList = iredisClient.Lists[listId];
redisList.RemoveValue(t);
iredisClient.Save();
}
/// <summary>
/// 根据lambada表达式删除符合条件的实体
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="listId"></param>
/// <param name="func"></param>
public void RemoveEntityFromList<T>(string listId, Func<T, bool> func)
{
using (IRedisTypedClient<T> iredisClient = Redis.As<T>())
{
var redisList = iredisClient.Lists[listId];
T value = redisList.Where(func).FirstOrDefault();
redisList.RemoveValue(value);
iredisClient.Save();
}
}
#endregion
//释放资源
public void Dispose()
{
if (Redis != null)
{
Redis.Dispose();
Redis = null;
}
GC.Collect();
}
}
}
.NET中Redis安装部署及使用方法简介附->开源Redis操作辅助类的更多相关文章
- .NET中Redis安装部署及使用方法简介
一Redis服务端以服务方式运行 修改端口压缩文件中配置的是6488 修改密码 修改库的数量 工具配置安装后如下图 二Redis服务端以控制台方式运行 第一步配置本地服务 第二部安装和配置客户端 三C ...
- Redis安装部署教程
1)下载 redis-3.2.9.tar.gz 2)用ssh工具连接目录主机,在命令窗口输入:mkdir -p /opt/redis创建redis文件夹 3)通过WinSCP工具将redis-3.2. ...
- Redis安装部署(一主二从三哨兵)
需求:根据当前客户的生产环境,模拟安装部署Redis的测试环境,方便后续的功能测试. 1.准备工作 2.安装编译Redis 3.Redis运行环境配置 4.Redis启动和关闭 1.准备工作 Redi ...
- Centos7下安装部署oracle数据库方法及问题汇总
目标:在centos7上配置oracle数据库服务器,并在win7上面使用pl/sql成功访问该oracle数据库 系统环境: 服务器:centos7 64位 客户端:win7 64位 注意cneto ...
- Redis安装部署、Jedis的使用
一.NoSQL概述 为什么需要NoSQL High performance -高并发读写 Huge Storage - 海量数据的高效率存储和访问 High Scalability && ...
- Redis安装部署
Redis是一种高级key-value数据库.它跟memcached类似,不过数据 可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集合.支持在服务器端计算集合的并,交和补集(dif ...
- Redis安装部署【转】
Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集合.支持在服务器端计算集合的并,交和补集(diff ...
- 【转】linux平台Redis安装部署
Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集合.支持在服务器端计算集合的并,交和补集(diff ...
- Java Web开发Tomcat中三种部署项目的方法
第一种方法:在tomcat中的conf目录中,在server.xml中的,<host/>节点中添加: <Context path="/hello" docBase ...
随机推荐
- 借鉴dubbo实现自定义缓存
自定义缓存一般基于ConcurrentMap实现,实现缓存需要注意的点是缓存容器对象 本身依赖于 static final去存储对象,样例: ConcurrentMap<String, Gene ...
- js添加var和不加var区别
var 声明的变量,作用域是当前 function 没有声明的变量,直接赋值的话, 会自动创建变量 但作用域是全局的. //----------------- function doSth() { a ...
- ArrayList数组列表
ArrayList数组列表 Collection接口和List接口的区别 List接口扩充了Collection接口,添加了索引相关的方法. code example Object get(int i ...
- BZOJ 3157 &数学乱搞...
挖一发坑...一碰到数学题头晕眼花...看着证明感觉我幼儿园还没毕业... http://www.cnblogs.com/zhuohan123/p/3726933.html 等我会完完整整地写一发la ...
- Spark 自定义累加变量(Accmulator)AccumulatorParam
1.创建一个累加变量 public <T> Accumulator<T> accumulator(T initialValue, AccumulatorParam<T&g ...
- 【系统篇】从C/C++语言到进程启动背后的故事
我们需要运行一个程序或者软件,双击之即可完成.不过从你双击到程序的窗口产生的这“短暂”的时间内,Windows为你做了很多的工作. 首先,系统有一个进程监测到了你的双击操作,这个进程就是系统shell ...
- React-Native android在windows下的踩坑记
坑很多,跳之前做好准备.没有VPN的同学请浏览完本文后慎行. 你需要先安装最新版本的node.js(我最后使用的是v4.1.2),前往官网下载>> 注:我win7已经安装过Visual ...
- HTML常用属性
blue:蓝色 red:红色 yellow:黄色 green:绿色 white:白色 gray:灰色 /*去掉下划线*/ text-decoration: none; /*添加下划线*/ te ...
- c# 获取项目的根目录
编写程序的时候,经常需要用的项目根目录.自己总结如下 1.取得控制台应用程序的根目录方法 方法1.Environment.CurrentDirectory 取得或设置当前工作目录的完整限定路径 ...
- Bigtable 论文 阅读笔记 - 原理部分
不支持markdown,桑心.更好的阅读体验请看:Github/Bigtable.md Paper: Google Bigtable paper Notes author: Lhfcws Wu Tim ...