1.前言

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

  b.Redis和Memcached的对比

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

    b.2 相比较许多键值对存储,redis拥有更加丰富的数据类型,

Redis提供的五种数据类型: string(字符串)、hash(哈希表) list(双向队列)、set(集合)和zset(有序集合)

    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/

// 源文件头信息:
// <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);
}
} }
}

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

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

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

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

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

  3. 知乎技术分享:从单机到2000万QPS并发的Redis高性能缓存实践之路

    本文来自知乎官方技术团队的“知乎技术专栏”,感谢原作者陈鹏的无私分享. 1.引言 知乎存储平台团队基于开源Redis 组件打造的知乎 Redis 平台,经过不断的研发迭代,目前已经形成了一整套完整自动 ...

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

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

  5. 从单机到2000万 QPS 并发的 Redis 高性能缓存实践之路

    1.引言 知乎存储平台团队基于开源Redis 组件打造的知乎 Redis 平台,经过不断的研发迭代,目前已经形成了一整套完整自动化运维服务体系,提供很多强大的功能.本文作者陈鹏是该系统的负责人,本次文 ...

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

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

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

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

  8. redis删除单个key和多个key,ssdb会落地导致重启redis无法清除缓存

    redis删除单个key和多个key,ssdb会落地导致重启redis无法清除缓存,需要针对单个key进行删除 删除单个:del key 删除多个:redis-cli -a pass(密码) keys ...

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

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

随机推荐

  1. 如何HACK无线家用警报器?

    30年前,报警器都是硬连线的,具有分立元件,并由钥匙开关操作.20年前,他们已经演变为使用微控制器,LCD和键盘,但仍然是硬连线.10年前,无线报警器开始变得普及,并增加了许多之前没有的功能. 而如今 ...

  2. HDU 6045 17多校2 Is Derek lying?

    题目传送:http://acm.hdu.edu.cn/showproblem.php?pid=6045 Time Limit: 3000/1000 MS (Java/Others)    Memory ...

  3. 【Python】练习题

    练习1:有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列), 输出到一个新文件C中 import os file1_path="e:\\test3\\2.t ...

  4. 初学C#windows程序

    window 操作系统中,处处是窗体 优点:简单 强大 方便 灵活 步骤: 新建项目 项目类型 visual C#项目 模板 window应用程序 用partial 将同一个窗体的代码分开放在两个文件 ...

  5. HihoCoder - 1801 :剪切字符串 (置换与逆序对)

    Sample Input 6 5 11 Sample Output 6 小Hi有一个长度为N的字符串,这个字符串每个位置上的字符两两不同.现在小Hi可以进行一种剪切操作: 选择任意一段连续的K个字符, ...

  6. 软件安装配置笔记(一)——Oracle及PLSQL Developer的安装与配置

    一.Oracle: Oracle服务器端或桌面端可以创建本地的Oracle数据库,而Oracle客户端是用来远程连接其他服务器或电脑上的Oracle服务器端或桌面端的,安装客户端软件只需配置网络连接文 ...

  7. 添加aimate动画

    .page3_ship{ background:url(../image/boat_02.png) 0 center no-repeat; background-size: 486px 385px; ...

  8. 【HDOJ2586】【Tarjan离线求LCA】

    http://acm.hdu.edu.cn/showproblem.php?pid=2586 How far away ? Time Limit: 2000/1000 MS (Java/Others) ...

  9. dijksta 模板

    #include<bits/stdc++.h> using namespace std; #define INF 0x3f3f3f3f ]; ]; ][]; void dijkstra(i ...

  10. File file = new File("路径名") 路径名的2种写法

    项目的结构:相同颜色是同级的 bean的配置文件的读取和一般文件的读取有点差别的 public static void getValue(String key){ //传入"time&quo ...