.NET平台下使用Redis
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的更多相关文章
- Redis - Windows平台下怎么切换db并且清理数据
Redis 本身支持16个数据库(0~15),通过 数据库id 设置,默认为0.在Windows平台下可以通过启动redis-cli.exe来进入客户端,客户端默认连接数据库0,在客户端里可以输入各种 ...
- windows下安装redis和php的redis扩展
1.redis简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(s ...
- Linux环境下安装Redis步骤即问题解决
第一步:将安装包在window平台上解压后拷贝到Linux机器的/usr/soft目录下,并且为文件夹和文件赋予最高权限,chmod+x *: 第二步:进入到redis-3.2.6目录下,执行make ...
- Windows下搭建Redis服务器
Redis服务器是当下比较流行的缓存服务器,Redis通常被人拿来和Memcached进行对比.在我看来,应当是各具优势吧,虽然应用场景基本类似,但总会根据项目的不同来进行不通的选用. 我们今天主要讲 ...
- redis系列一: windows下安装redis
一. 下载Redis Redis 支持 32 位和 64 位.这个需要根据你系统平台的实际情况选择,这里我们下载 Redis-x64-xxx.zip压缩包到 C 盘,解压后,将文件夹重新命名为 red ...
- linux下安装Redis以及phpredis模块
一:redis的安装 1. 首先上官网下载Redis 压缩包,地址:http://redis.io/download 下载 2. 通过远程管理工具,将压缩包拷贝到Linux服务器中,执行解压操作 3. ...
- window下使用Redis Cluster部署Redis集群
日常的项目很多时候都需要用到缓存.redis算是一个比较好的选择.一般情况下做一个主从就可以满足一些比较小的项目需要.在一些并发量比较大的项目可能就需要用到集群了,redis在Windows下做集群可 ...
- mac下搭建redis环境
一.redis简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合)和zset(有 ...
- Mac OS平台下应用程序安装包制作工具Packages的使用介绍
一.介绍 Windows下面开发好的应用程序要进行分发时有很多打包工具可供选择,如Inno Setup, InstallShield, NSIS, Advanced Installer, Qt Ins ...
随机推荐
- Deployment Characteristics of "The Edge" in Mobile Edge Computing
移动边缘计算中的“边缘”部署特性 本文为SIGCOMM 2018 Workshop (Mobile Edge Communications, MECOMM)论文. 本文翻译了论文的关键内容. 摘要 移 ...
- ubuntu Pycharm 2017 3.3 Active
1.打开激活窗口 2.选择 Activate new license with License server (用license server 激活) 3.在 License sever addres ...
- [复试机试]c++读取/写入文本文件
读取文件 #include <iostream> #include <cstdio> #include <string> #include <cstdlib& ...
- [蓝牙前沿应用] 照明即平台 —— 通过蓝牙增强服务提高照明投资回报率(蓝牙MESH、定位AoA、AoD)
1.照明即平台(LAAP) 随着照明设施向LED转型,他们也在利用类似于蓝牙MESH的技术,创建一个可连接的照明平台,作为他们建筑的中枢神经系统.这些系统除了提供先进的照明控制,还建立了一个增强版 ...
- 【RL-TCPnet网络教程】第36章 RL-TCPnet之FTP服务器
第36章 RL-TCPnet之FTP服务器 本章节为大家讲解RL-TCPnet的FTP服务器应用,学习本章节前,务必要优先学习第35章的FTP基础知识.有了这些基础知识之后,再搞本章节会有事 ...
- Android OpenGL ES 开发(六): OpenGL ES 添加运动效果
在屏幕上绘制图形只是OpenGL的相当基础的特点,你也可以用其他的Android图形框架类来实现这些,包括Canvas和Drawable对象.OpenGL ES为在三维空间中移动和变换提供了额外的功能 ...
- [Swift]LeetCode507. 完美数 | Perfect Number
We define the Perfect Number is a positive integer that is equal to the sum of all its positive divi ...
- [SQL]LeetCode601. 体育馆的人流量 | Human Traffic of Stadium
SQL架构 Create table If Not Exists stadium (id int, visit_date DATE NULL, people int) Truncate table s ...
- [Swift]LeetCode869. 重新排序得到 2 的幂 | Reordered Power of 2
Starting with a positive integer N, we reorder the digits in any order (including the original order ...
- redux-thunk 源码学习记录
redux触发store更新,使用的dispatch(action),在关于createStore的源码解读中可以看到,store.dispatch限制了action必须是一个纯对象.是为了保持red ...