using DBI.SaaS.Web.Models.Args;
using Rafy;
using StackExchange.Redis;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web; namespace DBI.SaaS.Web.Common
{
/// <summary>
/// Redis帮助类
/// </summary>
public class RedisHelper
{
private static ConnectionMultiplexer _connectionMultiplexer; /// <summary>
/// 连接多工
/// </summary>
public static ConnectionMultiplexer ConnectionMultiplexer
{
get
{
if (_connectionMultiplexer == null||_connectionMultiplexer.IsConnected==false)
{
var server = ConfigurationHelper.GetAppSettingOrDefault("RedisUri");
var port = ConfigurationHelper.GetAppSettingOrDefault("RedisPort");
var configString = $"{server}:{port}";
var config = ConfigurationOptions.Parse(configString);
config.Password = ConfigurationHelper.GetAppSettingOrDefault("RedisPassword");
_connectionMultiplexer = ConnectionMultiplexer.Connect(config);
}
return _connectionMultiplexer;
}
} public const string CustomerInfoHeaderKey = "RCIHK"; /// <summary>
/// 添加Redis数据库中key下的值
/// </summary>
/// <param name="redisKey"></param>
/// <param name="customer"></param>
public static void AddCustomerInfoToKey(string redisKey, PMSCustomerInfo customer)
{
customer.SetTime = DateTime.Now.ToString();
customer.Identity = string.Empty;//RedisHelper.GetNextCustomerIdentity(redisKey);
customer.IsUsed = "false";
var rdb = RedisHelper.ConnectionMultiplexer.GetDatabase();
var value = RedisHelper.ConvertRedisValueFromCustomerInfo(customer);
rdb.ListRightPush(redisKey, value);
} private static string GetNextCustomerIdentity(string redisKey)
{
var rdb = RedisHelper.ConnectionMultiplexer.GetDatabase();
var value = rdb.ListRightPop(redisKey).ToString();
if (string.IsNullOrEmpty(value)) return "";
rdb.ListRightPush(redisKey, value);
var valueArray = value.Split(',');
if (valueArray.Count() != ) return "";
var identity = Convert.ToInt64(valueArray[]) + ;
return identity.ToString();
} /// <summary>
/// 将当前推送客户信息转为Redis值
/// </summary>
/// <param name="customer"></param>
/// <returns></returns>
private static string ConvertRedisValueFromCustomerInfo(PMSCustomerInfo customer)
{
var sb = new StringBuilder();
sb.Append(customer.CustomerAddressPhone).Append(",");
sb.Append(customer.CustomerBankAccount).Append(",");
sb.Append(customer.CustomerName).Append(",");
sb.Append(customer.CustomerTaxCode).Append(",");
sb.Append(customer.ALipayId).Append(",");
sb.Append(customer.WechatId).Append(",");
sb.Append(customer.PhoneNumber).Append(",");
sb.Append(customer.SetTime).Append(",");
sb.Append(customer.IsUsed).Append(",");
sb.Append(customer.Identity);
return sb.ToString();
} /// <summary>
/// 根据key获取客户信息
/// </summary>
/// <param name="redisKey"></param>
/// <returns></returns>
public static List<PMSCustomerInfo> GetCustomerListByKey(string redisKey)
{
var customerList = new List<PMSCustomerInfo>();
var rdb = RedisHelper.ConnectionMultiplexer.GetDatabase();
//RedisHelper.CheckCustomerExpire(redisKey);
var values = rdb.ListRange(redisKey).ToStringArray().ToList();
foreach (var value in values)
{
var valueArray = value.Split(',');
if (valueArray.Count() != ) continue;
var customer = new PMSCustomerInfo
{
CustomerAddressPhone = valueArray[],
CustomerBankAccount = valueArray[],
CustomerName = valueArray[],
CustomerTaxCode = valueArray[],
ALipayId = valueArray[],
WechatId = valueArray[],
PhoneNumber = valueArray[],
SetTime = valueArray[],
IsUsed = valueArray[],
Identity = valueArray[]
};
customerList.Add(customer);
}
var returnList = customerList.OrderByDescending(e =>Convert.ToDateTime(e.SetTime)).ToList();
return returnList;
} private static void CheckCustomerExpire(string redisKey)
{
var rdb = RedisHelper.ConnectionMultiplexer.GetDatabase();
while (true)
{
var value = rdb.ListLeftPop(redisKey).ToString();
if (string.IsNullOrEmpty(value)) return;
var valueArray = value.Split(',');
if (valueArray.Count() != ) continue;
var setTime = Convert.ToDateTime(valueArray[]);
if (setTime.AddDays() > DateTime.Now)
{
rdb.ListLeftPush(redisKey, value);
break;
}
}
} public static void UpdateCustomerIsUsed(PMSCustomerInfo customer, string redisKey)
{
var list = new List<string>();
var rdb = RedisHelper.ConnectionMultiplexer.GetDatabase();
while (true)
{
var redisValue = rdb.ListLeftPop(redisKey).ToString();
if (string.IsNullOrEmpty(redisValue)) break;
var customerValue = ConvertRedisValueFromCustomerInfo(customer);
if (customerValue == redisValue)
{
customer.IsUsed = "true";
redisValue = ConvertRedisValueFromCustomerInfo(customer);
}
list.Add(redisValue);
}
for (int i = list.Count - ; i >= ; i--)
{
rdb.ListLeftPush(redisKey, list[i]);
}
} public static void RemoveCustomerFromRedis(PMSCustomerInfo customer, string redisKey)
{
var list = new List<string>();
var rdb = RedisHelper.ConnectionMultiplexer.GetDatabase();
while (true)
{
var redisValue = rdb.ListLeftPop(redisKey).ToString();
if (string.IsNullOrEmpty(redisValue)) break;
var customerValue = ConvertRedisValueFromCustomerInfo(customer);
if (customerValue == redisValue) break;
list.Add(redisValue);
}
for (int i = list.Count - ; i >= ; i--)
{
rdb.ListLeftPush(redisKey, list[i]);
}
}
}
}

.NET平台下使用Redis的更多相关文章

  1. Redis - Windows平台下怎么切换db并且清理数据

    Redis 本身支持16个数据库(0~15),通过 数据库id 设置,默认为0.在Windows平台下可以通过启动redis-cli.exe来进入客户端,客户端默认连接数据库0,在客户端里可以输入各种 ...

  2. windows下安装redis和php的redis扩展

    1.redis简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(s ...

  3. Linux环境下安装Redis步骤即问题解决

    第一步:将安装包在window平台上解压后拷贝到Linux机器的/usr/soft目录下,并且为文件夹和文件赋予最高权限,chmod+x *: 第二步:进入到redis-3.2.6目录下,执行make ...

  4. Windows下搭建Redis服务器

    Redis服务器是当下比较流行的缓存服务器,Redis通常被人拿来和Memcached进行对比.在我看来,应当是各具优势吧,虽然应用场景基本类似,但总会根据项目的不同来进行不通的选用. 我们今天主要讲 ...

  5. redis系列一: windows下安装redis

    一. 下载Redis Redis 支持 32 位和 64 位.这个需要根据你系统平台的实际情况选择,这里我们下载 Redis-x64-xxx.zip压缩包到 C 盘,解压后,将文件夹重新命名为 red ...

  6. linux下安装Redis以及phpredis模块

    一:redis的安装 1. 首先上官网下载Redis 压缩包,地址:http://redis.io/download 下载 2. 通过远程管理工具,将压缩包拷贝到Linux服务器中,执行解压操作 3. ...

  7. window下使用Redis Cluster部署Redis集群

    日常的项目很多时候都需要用到缓存.redis算是一个比较好的选择.一般情况下做一个主从就可以满足一些比较小的项目需要.在一些并发量比较大的项目可能就需要用到集群了,redis在Windows下做集群可 ...

  8. mac下搭建redis环境

    一.redis简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合)和zset(有 ...

  9. Mac OS平台下应用程序安装包制作工具Packages的使用介绍

    一.介绍 Windows下面开发好的应用程序要进行分发时有很多打包工具可供选择,如Inno Setup, InstallShield, NSIS, Advanced Installer, Qt Ins ...

随机推荐

  1. Android Studio 设置不同分辨率的图标Icon

    右键你的项目 -->"NEW"-->"Image Asset" 'Asset Type' 勾选”Image“才可以选择”Path“,其他选项可以自己 ...

  2. 小程序textarea完美填坑

    相信做微信小程序的码友们都被textarea这个原生组件坑过,什么placeholder位置错乱,穿透弹窗或遮罩层,ios上输入法弹起后换行输入内容遮挡,删除输入内容时内容被遮挡等等... 反正综上所 ...

  3. Mesos源码分析(8): Mesos-Slave的初始化

      Mesos-Slave的初始化在文件src/slave/slave.cpp里面     首先初始化资源预估器   初始化attributes   初始化hostname     初始化status ...

  4. Select下拉框使用ajax异步绑定数据

    <!--前端样式--> <style> #searchs { width: 200px; position: absolute; border-top: none; margi ...

  5. css清除浮动的3种方式

    前言: 当不给父元素设置宽高时,父元素的宽高会被子元素的内容撑开.但当子元素设置浮动属性(float) 后, 子元素会溢出到父元素外,父元素的宽高也不会被撑开,这称之为“高度塌陷”.可以理解为使用浮动 ...

  6. [Swift]LeetCode528. 按权重随机选择 | Random Pick with Weight

    Given an array w of positive integers, where w[i] describes the weight of index i, write a function  ...

  7. python之Django学习笔记(三)---URL调度/URL路由

    在django中,用户发起url请求消息首先到工程的urls.py中查找是否有匹配的url路径 刚创建好的工程中urls.py只有下面几行代码: from django.contrib import ...

  8. python之读取配置文件模块configparser(一)基本操作

    configparser模块是读取类ini文件使用,其有固定的读取格式如下: [section1] option11 = value11 option12 = value12 .... [sectio ...

  9. Java集合类的那点通俗的认知

    文/沉默王二 开门见山地说吧,Java提供了一套完整的集合类(也可以叫做容器类)来管理一组长度可变的对象(也就是集合的元素),其中常见的类型包括List.Set.Queue和Map.从我个人的编程经验 ...

  10. 如何创建测试程序调试nginx数据结构

    如何创建测试程序调试nginx数据结构 由于在学习nginx的过程中遇到很多数据结构,往往我都想写一个程序来跑一下,看下到底返回什么.最开始想的方法是使用nginx make 完成之后的.o文件,做L ...