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中解压文件)
修改端口,压缩文件中配置的是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,首先需要安装一个合适的客户端库。StackExchange.Redis是广泛使用的.NET Redis客户端,提供丰富的API接口。可以通过NuGet包管理器或者.NET CLI工具安装,命令如下: ``` dotnet add ...
在Asp.net项目中,可以将这个`RedisHelper`类注入到依赖注入容器中,这样在需要缓存服务的地方,就可以通过构造函数注入的方式获得`ICacheStorageProvider`实例,从而使用Redis缓存。 此外,考虑到`NoSqlRedis`这个...
- **获取值**:`Item_Get<T>` 方法用于从Redis中获取指定键的值。 - **删除键**:`Item_Remove` 方法用于从Redis中删除指定的键。 - **列表操作**:`List_Add<T>` 和 `List_Remove<T>` 分别用于向列表中添加元素和从...
使用命令【redis-server.exe redis.windows.conf】启动Redis服务。在Windows运行(快捷键:按住Windows键 + R)中,输入命令启动Redis服务。服务启动成功后,会显示服务启动成功的状态信息,不要关闭这个窗口,因为...
ASP.NET Core 使用 Redis 基于 StackExchange.Redis ...本文介绍了 ASP.NET Core 使用 Redis 基于 StackExchange.Redis 的方法,并简单封装了 RedisClient 类。使用 Redis 可以提高应用程序的性能和可用性。
创建一个继承自`SessionStateStoreProviderBase`的类,实现其方法,以便在Redis中操作用户会话。例如,`SessionStart`方法用于初始化会话,`SessionEnd`方法用于清理会话,`GetItem`和`SetItem`方法则用于读写会话...
`Redis-x64-3.2.100.zip`是Redis的一个Windows版本,解压后运行`redis-server.exe`启动Redis服务。Redis提供了命令行客户端`redis-cli.exe`,可用于测试和验证数据存储。 接下来,我们要在ASP.NET MVC项目中引入...
$redis->connect($address['ip'], $address['port']); $info = $redis->info(); print_r($info);$sentinel_pool = new \Jenner\RedisSentinel\SentinelPool(); $sentinel_pool->addSentinel('127.0.0.1', ...
在.NET开发环境中,我们通常使用StackExchange.Redis库来与Redis进行交互。本篇文章将详细探讨如何使用.NET技术,尤其是C#语言,来操作Redis进行存储、增删改查等操作。 首先,我们需要在项目中引入StackExchange....
博客链接中的文章《.NET下Redis入门演示》可能会进一步解释这些操作的细节,包括如何配置连接、处理连接池、使用事务和发布/订阅功能等。同时,它可能还会涉及错误处理和性能优化技巧。 在实际项目中,Redis还可以...
这个压缩包"redis-7.2-x64-for-windows-bin.zip"是Redis 7.2版本的64位Windows构建,包含了运行Redis服务所需的所有组件。 1. **Redis 7.2**: Redis是一个开源的内存数据结构存储系统,它可以用作数据库、缓存和...
在Redis中,`LPUSH`和`RPOP`命令常被用来构建先进先出(FIFO)队列。`RPush`用于从列表的右侧(尾部)添加元素,而`LPop`则用于从左侧(头部)移除并返回第一个元素。在抢购场景下,我们可以将每个用户的抢购请求视...
在本文中,我们将详细介绍Redis的安装过程及基本使用方法。 **1. Redis安装** 首先,确保你的系统是Linux(如Ubuntu、CentOS)或Windows。Redis主要为Unix-like系统设计,但在Windows上也有支持。 对于Linux用户...
在这个示例中,我们使用的是 Redis-x64-3.2.100 版本。 二、安装 Redis 1. 解压缩下载的文件到你希望的安装目录。 2. 配置 Redis:打开 `redis.windows.conf` 文件,这是 Redis 的配置文件。你可以根据需求调整各种...
- .NET客户端:在.NET环境中,可以使用StackExchange.Redis库作为Redis的客户端,该库提供了丰富的API来操作Redis。 - NuGet安装:打开Visual Studio,通过NuGet包管理器安装`StackExchange.Redis`库。 - 连接...
本资源是 Redis 的 Windows 64 位版本,具体为 Redis-x64-3.2.100 稳定版,适合在 Windows 操作系统环境下部署和运行。以下是关于 Redis 及其在 Windows 上的使用的一些关键知识点: 1. **Redis 简介**:Redis 是一...
可以通过`redis-server /path/to/redis.conf`启动Redis服务,使用`redis-sentinel /path/to/sentinel.conf`启动哨兵服务。启动成功后,哨兵会持续监控主从状态,当检测到主节点故障时,会自动选举新的主节点,并通知...
"Redis++使用说明,windows下编译Redis-Plus-Plus" 在这篇文章中,我们将详细介绍如何在Windows平台下编译Redis++,包括编译hiredis.lib和Win32_Interop.lib静态库文件的过程,然后安装Cmake并编译Redis++,最后...
redis-5.0.7-x64-for-windows编译-bin.rar Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Python...
通过这个压缩包中的"redis-desktop-manager-0.9.3.817.exe"文件,用户可以安装和运行RedisDesktopManager。该可执行文件是经过编译的Windows程序,包含了所有必要的库和资源,使得用户无需额外配置环境即可直接使用...