1.高性能文件缓存key-value存储-Memcached

  2.ASP.NET HttpRuntime.Cache缓存类使用总结

  备注:三篇博文结合阅读,简单理解并且使用,如果想深入学习,请多参考文章中给出的博文地址。

1.前言

  a.Redis是一个开源,先进的key-value(键/值对)存储,并且勇于构建高性能,可扩展的Web应用程序的完美解决方案

  b.Redis和Memcached的对比

    b.1 Redis数据库完全在内存中,使用磁盘仅用于持久性

    b.2 相比较许多键值对存储,redis拥有更加丰富的数据类型,Redis提供的五种数据类型: strings、map、 list、sets、 sorted sets

    b.3 Redis可以将数据复制到任意数量的从服务器

  c.Redis拥有的优势

    c.1 Redis的执行响应速度非常快

    c.2 支持丰富的数据类型

    c.3 原子性,保证了如果两个客户端同事访问的Redis服务器将获得更新后的值

    c.4 多功能实用工具,Redis是一个多实用的工具,可以在多个用例如缓存,消息,队列实用,任何短暂的数据,应用程序。

  d.Github下载地址:https://github.com/kencery/Common/tree/master/KenceryCommonMethod/%E7%BC%93%E5%AD%98

  e.Redis学习:http://www.redis.io/

2.代码展示

 // 源文件头信息:
// <copyright file="RedisHelper.cs">
// Copyright(c)2014-2034 Kencery.All rights reserved.
// 个人博客:http://www.cnblogs.com/hanyinglong
// 创建人:韩迎龙(kencery)
// 创建时间:2015-8-18
// </copyright> using System;
using System.Collections.Generic;
using System.Configuration;
using ServiceStack.Redis; namespace KenceryCommonMethod
{
/// <summary>
/// Redis缓存读取设置 封装
/// <auther>
/// <name>Kencery</name>
/// <date>2015-8-18</date>
/// </auther>
/// </summary>
public static class RedisHelper
{
/// <summary>
/// 创建Redis连接池管理对象(添加ServiceStack.Interfaces.dll、ServiceStack.Redis.dll)
/// </summary>
/// <param name="readWriteHosts">只写服务器</param>
/// <param name="readOnlyHosts">只读服务器</param>
/// <returns></returns>
private static PooledRedisClientManager CreateRedisManager(IEnumerable<string> readWriteHosts,
IEnumerable<string> readOnlyHosts)
{
//支持读写分离,均衡负载
return new PooledRedisClientManager(readWriteHosts, readOnlyHosts, new RedisClientManagerConfig
{
MaxWritePoolSize = , //“写”链接池数
MaxReadPoolSize = , //“读”链接池数
AutoStart = true,
});
} /// <summary>
/// 调用CreateRedisManager方法,创建连接池管理对象,Redis服务器地址在配置文件中配置(创建只读,只写连接池)
/// <add key="RedisHosts" value="127.0.0.1:6379" />
/// </summary>
private static readonly PooledRedisClientManager Prcm = CreateRedisManager(
ConfigurationManager.AppSettings["Hosts"].Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries),
ConfigurationManager.AppSettings["Hosts"].Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)); /// <summary>
/// 给缓存中添加数据,使用:RedisHelper.Set(key,值(需要存放的值));
/// </summary>
/// <typeparam name="T">缓存类型</typeparam>
/// <param name="key">键</param>
/// <param name="val">值</param>
public static void Set<T>(string key, T val)
{
using (IRedisClient rdc = Prcm.GetClient())
{
rdc.Set<T>(key, val);
}
} /// <summary>
/// 读取缓存中的数据,使用:var result=RedisHelper.Get<T>(key);
/// </summary>
/// <typeparam name="T">返回读取的数据</typeparam>
/// <param name="key">键</param>
/// <returns></returns>
public static T Get<T>(string key) where T : class
{
using (IRedisClient rdc = Prcm.GetReadOnlyClient())
{
return rdc.Get<T>(key);
}
} /// <summary>
/// 删除缓存中的数据,使用 RedisHelper.Remove(key);
/// </summary>
/// <param name="key">键</param>
public static void Remove(string key)
{
using (IRedisClient rdc = Prcm.GetClient())
{
rdc.Remove(key);
}
} /// <summary>
/// 缓存中是否包含查询的键数据,使用 var isTrue=RedisHelper.ContainsKey(key);
/// </summary>
/// <param name="key">键</param>
/// <returns>如果包含,返回true,否则返回false</returns>
public static bool ContainsKey(string key)
{
using (IRedisClient rdc = Prcm.GetReadOnlyClient())
{
return rdc.ContainsKey(key);
}
} /// <summary>
/// 给缓存中添加Object对象,使用:RedisHelper.Add(key,值(需要存放的值))
/// </summary>
/// <param name="key">键</param>
/// <param name="value">值</param>
public static void Add(string key, object value)
{
using (IRedisClient rdc = Prcm.GetClient())
{
if (!rdc.ContainsKey(key))
{
rdc.Add(key, value, DateTime.Now.AddMinutes());
}
else
{
rdc.Set(key, value);
}
}
} /// <summary>
/// 根据key刷新缓存中的数据信息,使用:RedisHelper.RefreshCache(key)
/// </summary>
/// <typeparam name="T">缓存类型</typeparam>
/// <param name="key">键</param>
public static void RefreshCache<T>(string key) where T : class
{
using (IRedisClient rdc = Prcm.GetClient())
{
var value = rdc.Get<T>(key);
rdc.Remove(key);
rdc.Set<T>(key, value);
}
} /// <summary>
/// 根据key集合信息读取缓存中的键值对,返回字典形式的数据存放,使用:RedisHelper.GetList(keys);
/// </summary>
/// <param name="keys">key集合</param>
/// <returns>返回字典集合</returns>
public static Dictionary<string, string> GetList(List<string> keys)
{
using (IRedisClient rdc = Prcm.GetReadOnlyClient())
{
return rdc.GetValuesMap<string>(keys);
}
} /// <summary>
/// 将字典集合添加到缓存中,使用:RedisHelper.Set(values);
/// </summary>
/// <param name="values">字典集合信息</param>
public static void Set(Dictionary<string, string> values)
{
using (IRedisClient rdc = Prcm.GetReadOnlyClient())
{
rdc.SetAll(values);
}
} }
}

高性能文件缓存key-value存储—Redis的更多相关文章

  1. 高性能文件缓存key-value存储—Memcached

    1.高性能文件缓存key-value存储—Redis 2.ASP.NET HttpRuntime.Cache缓存类使用总结 备注:三篇博文结合阅读,简单理解并且使用,如果想深入学习,请多参考文章中给出 ...

  2. 本地测试读取redis和普通文件缓存的速度,redis慢一倍?

    重新测试了,换成了Linux服务器,php5.6,512内存.连续读取1千次不同的文件(每个文件41KB),redis也是1千个不同的key,文件缓存还是比redis快! 但是,但是,后来我换成连续读 ...

  3. Redis:高性能文件缓存key-value储存

    1.前言 a.Redis是一个开源,先进的key-value(键/值对)存储,并且勇于构建高性能,可扩展的Web应用程序的完美解决方案 b.Redis和Memcached的对比 b.1 Redis数据 ...

  4. 构建高性能数据库缓存之redis主从复制

    一.什么是redis主从复制? 主从复制,当用户往Master端写入数据时,通过Redis Sync机制将数据文件发送至Slave,Slave也会执行相同的操作确保数据一致:且实现Redis的主从复制 ...

  5. 构建高性能数据库缓存之redis(二)

    一.概述 在构建高性能数据库缓存之redis(一)这篇文档中,阐述了Redis数据库(key/value)的特点.功能以及简单的配置过程,相信阅读过这篇文档的朋友,对Redis数据库会有一点的了解,此 ...

  6. redis缓存切面实现(支持缓存key的spel表达式)

    1.定义注解 package com.g2.order.server.annotation; import java.lang.annotation.ElementType; import java. ...

  7. 【Azure Redis 缓存 Azure Cache For Redis】如何设置让Azure Redis中的RDB文件暂留更久(如7天)

    问题描述 Azure Redis和所有的Redis服务一样,可以让你保留存储在Redis中的数据.以防万一在Redis服务器出现故障的时候能尽可能小的减少数据的损失.在Azure Redis服务中,默 ...

  8. 高性能Web服务器Nginx的配置与部署研究(12)应用模块之Memcached做文件缓存时压缩引起的问题

    在上一篇文章中,提到的Nginx的Memcached模块应用场景,主要是作为文件缓存.然后就发现了一个问题,当以字节数组方式缓存较大的文件时,缓存数据会被压缩,从而在读取的时候出现问题. (本文欢迎转 ...

  9. thinkphp3.2配置redis缓存和文件缓存

    如果把一些常用但又不容易变的数据存缓存,而不是每次查数据库,这样能很大减轻数据库压力 最近由于项目需要,就尝试了一把redis,但是后面又用了tp3.2的文件缓存,直接进入主题: 在config.ph ...

随机推荐

  1. 面试小记---外部脚本必须包含 <script> 标签吗?

    外部脚本必须包含 <script> 标签吗? 答案是否定的. 身为小白的我一开始也是以为这句话的对了,因为本来嘛,引用外部脚本不都用的是<script>标签中的src属性吗.所 ...

  2. Android内存回收机制

    退出但不关闭: 这是Android对于Linux的优化.当 Android 应用程序退出时,并不清理其所占用的内存,Linux 内核进程也相应的继续存在,所谓“退出但不关闭”.从而使得用户调用程序时能 ...

  3. Android入门(六)碎片

    原文链接:http://www.orlion.ga/493/ 一.碎片 碎片(Fragment)是一种可以嵌入在活动当中的 UI片段,它能让程序更加合理和充分地利用大屏幕的空间,因而在平板上应用的非常 ...

  4. QQ5.0左侧滑动显示效果

    前三篇为大家介绍了如何实现简单的类QQ5.0左侧的侧滑效果,本篇我将带领大家一起探讨一下如何真正实现QQ5.0左侧的侧滑效果,对于本篇的内容与之前的三篇关联性很强,如果前三篇你已经完全掌握,对于这一篇 ...

  5. nodejs支持ssi实现include shtml页面

    express 对于include的代码默认不处理,直接输出,没办法执行include的内容,但可以通过Nginx实现. 1. 配置nginx设置开启ssi模式. server { … ssi on; ...

  6. JavaScript可否多线程? 深入理解JavaScript定时机制

    JavaScript的setTimeout与setInterval是两个很容易欺骗别人感情的方法,因为我们开始常常以为调用了就会按既定的方式执行, 我想不少人都深有同感, 例如 setTimeout( ...

  7. Ionic2学习笔记(3):Pipe

    作者:Grey 原文地址: http://www.cnblogs.com/greyzeng/p/5538630.html Pipe类似过滤器,比如,在一个字符串要展现在页面之前, 我们需要对这个字符串 ...

  8. 30天C#基础巩固----查找XML文件元素

    一:XML文档 了解xml文档. 利用代码来创建XML文档. //引用命名空间+using System.Xml; XmlDocument xdoc=new XmlDocument(); XmlDec ...

  9. Emit学习(2) - IL - 对象的创建过程

    上一篇的介绍中, 并没有介绍到对象的创建过程, 这一篇主要就介绍一下, 对象的创建过程. 其实熟悉了IL语法之后, 完全可以用Reflector反编译代码去查看. 而且正因为有这个工具, 可以对照着R ...

  10. Razor语法

    1. 截取字符串  @(i.Title.Length > 18 ? i.Title.Substring(0, 18) + "" : i.Title) 2. 格式化日期  @s ...