//c# WEBAPI 读写表到Redis
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using Newtonsoft.Json;
using StackExchange.Redis;
using System.Data;
using System.Web;
namespace Manage002.web.Controllers
{
RoutePrefix("api/Manage002ReportRedis")
public class Manage002ReportRedisController : ApiController
{
//ConnectionMultiplexer _conn = RedisConnectionHelp.Instance;//初始化
public_org_rpt por = new public_org_rpt();
public_top_rpt ptr = new public_top_rpt();
HttpGet
Route("getGoodtag")
/// <summary>
/// 从缓存中读取erp_goodtag表
/// </summary>
/// <param name="orgid">机构ID</param>
/// <returns></returns>
public DataSet getGoodtag(string orgid)
{
ConnectionMultiplexer _conn = ConnectionMultiplexer.Connect("localhost");
DataSet dsGoodtag = new DataSet();
string sqlGoodtag = @"select id,tagType,tagName,taglevel,parentid,parentlist FROM erp_goodtag ";// where orgid=" + orgid;
if (_conn != null)//开了redis
{
//根据传入的orgid读取Redis中的值
var database = _conn.GetDatabase(0);
string res = database.StringGet(orgid + "_dsGoodtag");
//判断Redis中有没有对应的值
if (string.IsNullOrEmpty(res))
{
//读取数据库
dsGoodtag = ptr.GetList(sqlGoodtag);
DataRow[] drow = null;
//根据传入的ID筛选
if (string.IsNullOrEmpty(orgid))
{
drow = dsGoodtag.Tables[0].Select();
}
else
{
drow = dsGoodtag.Tables[0].Select(" id='" + orgid + "' ");
}
//将筛选出来的记录用表结构保存,方便进行后面的序列化和反序列化
foreach (DataRow row in drow)
{
DataTable dt_sel = dsGoodtag.Tables[0].Clone();
DataRow newRow = dt_sel.NewRow();
newRow.ItemArray = row.ItemArray;
dt_sel.Rows.Add(newRow);
//对结果表进行序列化
string jsonString = JsonConvert.SerializeObject(dt_sel, Formatting.None);
//将序列化的数据保存到Redis
database.StringSet(row["id"].ToString() + "_dsGoodtag", jsonString);
}
}
else
{
//Redis中有数据时直接对数据进行反序列化
DataTable dtGoodtag = JsonConvert.DeserializeObject<DataTable>(res);
dsGoodtag.Tables.Add(dtGoodtag);
}
}
else//直接从数据库里取
{
dsGoodtag = ptr.GetList(sqlGoodtag);
}
return dsGoodtag;
}
}
}