回到目录

之前写了不少关于仓储的文章,所以,自己习惯把自己叫仓储大叔,上次写的XMLRepository得到了大家的好评,也有不少朋友给我发email,进行一些知识的探讨,今天主要来实现一个RedisRepository,它始终是集成IRepository接口的,我这里的Redis仓储主要服务为复杂类型的业务,对于只存string这种需求,不需要使用它。

对于Redis仓储和说,它与XML仓储有些不同,由于XML文件一般存储在WWW服务器,所以没有网络通讯问题,而redis一般部署在第三台服务器上,我们一般称为NoSQL服务器,它与WWW通讯是通过socket协议完成的,正是如些,我们在进行仓储设计时,应该考虑到如何去释放它的资源,因为这种资源是非托管的,所以需要人为干预一下,.net提供了using关键字来做这事,而每个动作写using这显然是不友好的,所以,我这个redis仓储是在析构方法里完成对资源的销毁的,请看源代码:

首先是redis基类,它是实现统一操作的前提

   /// <summary>
/// Redis实体基类,所有redis实体类都应该集成它
/// </summary>
public abstract class RedisEntity
{
public RedisEntity()
{
RootID = Guid.NewGuid().ToString();
}
/// <summary>
/// Redis实体主键,方法查询,删除,更新等操作
/// </summary>
public virtual string RootID { get; set; }
}

下面才是RedisRepository仓储的代码

    /// <summary>
/// Redis仓储实现
/// </summary>
public class RedisRepository<TEntity> :
IDisposable,
IRepository<TEntity>
where TEntity : RedisEntity
{
IRedisClient redisDB;
IRedisTypedClient<TEntity> redisTypedClient;
IRedisList<TEntity> table;
public RedisRepository()
{
redisDB = RedisManager.GetClient();
redisTypedClient = redisDB.GetTypedClient<TEntity>();
table = redisTypedClient.Lists[typeof(TEntity).Name];
} #region IRepository<TEntity>成员
public void SetDbContext(IUnitOfWork unitOfWork)
{
throw new NotImplementedException();
} public void Insert(TEntity item)
{
if (item != null)
{
redisTypedClient.AddItemToList(table, item);
  redisDB.Save();
}
} public void Delete(TEntity item)
{
  if (item != null)
            {
                var entity = Find(item.RootID);
                redisTypedClient.RemoveItemFromList(table, entity);
                redisDB.Save();
            }
} public void Update(TEntity item)
{
if (item != null)
{
var old = Find(item.RootID);
if (old != null)
{
redisTypedClient.RemoveItemFromList(table, old);
redisTypedClient.AddItemToList(table, item);
redisDB.Save();
}
}
} public IQueryable<TEntity> GetModel()
{
return table.GetAll().AsQueryable();
} public TEntity Find(params object[] id)
{
return table.Where(i => i.RootID == (string)id[]).FirstOrDefault();
}
#endregion #region IDisposable成员
public void Dispose()
{
this.ExplicitDispose();
}
#endregion #region Protected Methods /// <summary>
/// Provides the facility that disposes the object in an explicit manner,
/// preventing the Finalizer from being called after the object has been
/// disposed explicitly.
/// </summary>
protected void ExplicitDispose()
{
this.Dispose(true);
GC.SuppressFinalize(this);
} protected void Dispose(bool disposing)
{
if (disposing)//清除非托管资源
{
table = null;
redisTypedClient = null;
redisDB.Dispose();
}
}
#endregion #region Finalization Constructs
/// <summary>
/// Finalizes the object.
/// </summary>
~RedisRepository()
{
this.Dispose(false);
}
#endregion
}
}

下面是在控制台中进行仓储的调用

        IRepository<Car> repository = new Redis.Data.Core.RedisRepository<Car>();
repository.Insert(new Car { ID = , Name = "占" });
var entity = repository.GetModel().Where(i => i.ID == ).FirstOrDefault();
entity.Name = "修改了";
repository.Update(entity);
repository.GetModel().ToList().ForEach(e =>
{
Console.WriteLine(e.ID + "/" + e.RootID + "/" + e.Name);
});

下面是实现的结果的截图

aaarticlea/png;base64,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" alt="" />

回到目录

Redis学习笔记~是时候为Redis实现一个仓储了,RedisRepository来了的更多相关文章

  1. Redis学习笔记(2)——Redis的下载安装部署

    一.下载Redis Redis的官网下载页上有各种各样的版本,如图 但是官网下载的Redis项目不正式支持Windows.如果需要再windows系统上部署,要去GitHub上下载.我下载的是Redi ...

  2. Redis学习笔记(3)——Redis的命令大全

    Redis是一种nosql数据库,常被称作数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted se ...

  3. Redis学习笔记(1)——Redis简介

    一.Redis是什么? Remote Dictionary Server(Redis) 是一个开源的使用ANSI C语言编写.遵守BSD协议.支持网络.可基于内存亦可持久化的日志型.Key-Value ...

  4. Redis学习笔记(三)Redis支持的5种数据类型的总结

    继续Redis学习笔记(二)来说说剩余的三种数据类型. 三.列表类型(List) 1.介绍 列表类型可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的一段片段.列表类型内部是 ...

  5. Redis学习笔记(二)Redis支持的5种数据类型的总结之String和Hash

    引言 在Redis学习笔记(一)中我们已经会安装并且简单使用Redis了,接下来我们一起来学习下Redis支持的5大数据类型. 简介 Redis是REmote DIctionary Server(远程 ...

  6. Redis学习笔记(二) Redis 数据类型

    Redis 支持五种数据类型:string(字符串).list(列表).hash(哈希).set(集合)和 zset(有序集合),接下来我们讲解分别讲解一下这五种类型的的使用. String(字符串) ...

  7. Redis 学习笔记系列文章之 Redis 的安装与配置 (一)

    1. 介绍 Redis is an open source (BSD licensed), in-memory data structure store, used as database, cach ...

  8. Redis学习笔记之一 : 配置redis

    Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久 ...

  9. Redis学习笔记(5)——Redis数据持久化

    出处http://www.cnblogs.com/xiaoxi/p/7065328.html 一.概述 Redis的强大性能很大程度上都是因为所有数据都是存储在内存中的,然而当Redis重启后,所有存 ...

随机推荐

  1. 如何使用ajax将json传入后台数据

    首先采用jquery内部封装好的方法是比较简单的,我们只需做的就是修改里面的一些配置: 对$.ajax()的解析: $.ajax({ type: "POST", //提交方式 co ...

  2. 封装ios静态库碰到的一些问题(一)

    封装IOS动态库,碰到的第一个问题,就是资源文件的问题,如果将你的程序封装成为静态库,那么静态库中不会包含资源文件和xib文件,这个时候就需要自己封装bundle文件了,而笔者开发环境默认是xcode ...

  3. Android Sqlite 工具类封装

    鉴于经常使用 Sqlite 数据库做数据持久化处理,进行了一点封装,方便使用. 该封装类主要支持一下功能 支持多用户数据储存 支持 Sqlite数据库升级 支持传入 Sql 语句建表 支持 SQLit ...

  4. 详解在Visual Studio中使用git版本系统[转]

    这篇教程的预期,是希望没有任何版本使用基础的新手也可以掌握,所以细节较多,不当之处,欢迎指正. 一 .安装 git 开发工具 如果要使用 git 进行版本管理,其实使用 git 命令行工具就完全足够了 ...

  5. linux下rm -r误删NTFS文件恢复方法

    一时疏忽,手一抖,把整个挂载的F盘删了一半!顿时傻眼!! 被删的F盘是Windows下NTFS分区,在Ubuntu12.04中挂载了F盘,使用rm命令时粗心大意,误删了一半的数据. 血的教训告诉我们, ...

  6. Android数据存储之SharedPreferences存储

    安卓系统为应用提供了系统级的配置存储方案,它就是靠SharedPreferences接口来实现的,该接口存储的所有信息都是以名值对的形式保存,但其保存的数据类型也仅限于基本数据类型,如字符串.整形.布 ...

  7. 使用sklearn优雅地进行数据挖掘

    目录 1 使用sklearn进行数据挖掘 1.1 数据挖掘的步骤 1.2 数据初貌 1.3 关键技术2 并行处理 2.1 整体并行处理 2.2 部分并行处理3 流水线处理4 自动化调参5 持久化6 回 ...

  8. [UE4]CustomAnimationBlueprintNode 自定义动画蓝图节点

    目的:在AnimationBlueprint中使用自定义动画控制节点. 主要过程: 1.      引用相关模块.在Client.Build.cs文件中,PublicDependencyModuleN ...

  9. Java获取Web服务器文件

    Java获取Web服务器文件 如果获取的是服务器上某个目录下的有关文件,就相对比较容易,可以设定死绝对目录,但是如果不能设定死绝对目录,也不确定web服务器的安装目录,可以考虑如下两种方式: 方法一: ...

  10. SSM+DUBBO/ZK异常

    1.Could not find resource(mybatis本身不支持通配符,是spring提供的ant匹配法) 2.ClassNotFoundException: org.I0Itec.zkc ...