c# 使用 Redis
<p>1.安装Redis</p><p> 我是在Windows上安装redis的,Redis官网我只看到linux版本的,得使用别人提供的windows版本</p>
<p> 菜鸟教程提供的redis下载地址:https://github.com/MSOpenTech/redis/releases</p>
<p> 新建一个文件夹D:\redis解压进去,并添加环境变量</p>
<p> 1.1cmd运行以下命令打开redis服务</p>
<div class="cnblogs_code">
<pre>redis-server.exe redis.windows.conf</pre>
</div>
<p> 当然,想要安装成服务,可以这样操作</p>
<div class="cnblogs_code">
<pre>redis-server.exe --service-install redis.windows.conf #安装<br><br>redis-server --service-uninstall #卸载</pre>
</div>
<p> <img src="https://img2022.cnblogs.com/blog/1138839/202208/1138839-20220811171156035-1254993182.png"></p>
<p> </p>
<p> 别忘了启动</p>
<p> 1.2再打开一个cmd,进行缓存操作</p>
<p> 连接服务</p>
<div class="cnblogs_code">
<pre>redis-cli.exe -h <span style="color: rgba(128, 0, 128, 1)">127.0</span>.<span style="color: rgba(128, 0, 128, 1)">0.1</span> -p <span style="color: rgba(128, 0, 128, 1)">6379#如果redis-server安装在服务器上,对应修改地址开放端口即可</span></pre>
</div>
<p> set</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">set</span> city Shanghai</pre>
</div>
<p> get</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">get</span> city</pre>
</div>
<p> 到这了已经对redis有了最初步的了解</p>
<p> 常用命令:</p>
<div class="cnblogs_code">
<pre>获取所有key:keys *<br>插入队列:publish 队列名 value<br>获取队列的数据:lrange 队列名 0 -1(从第0条开始,到-1表示最后一条)</pre>
</div>
<p> </p>
<p>2.使用c#连接redis</p>
<p> 新建一个控制台项目</p>
<p> 添加nuget包:ServiceStack.Redis(有很多包,自己看着下),我刚开始下载以下版本</p>
<p> <img src="https://img2018.cnblogs.com/blog/1138839/201906/1138839-20190617112329700-878383314.png"></p>
<p> 出现这四个dll就没错</p>
<p> <img src="https://img2018.cnblogs.com/blog/1138839/201906/1138839-20190617112221711-1511471183.png"></p>
<p> 跑一下</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> Program
{
</span><span style="color: rgba(0, 0, 255, 1)">static</span> RedisClient redisClient = <span style="color: rgba(0, 0, 255, 1)">new</span> RedisClient(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">127.0.0.1</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 128, 1)">6379</span>);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">redis服务IP和端口</span>
<span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">void</span> Main(<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">[] args)
{
Console.WriteLine(redisClient.Get</span><<span style="color: rgba(0, 0, 255, 1)">string</span>>(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">city</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">));
Console.ReadKey();
}
}</span></pre>
</div>
<p> 后面发现,网上使用的最多的包是 StackExchange.Redis ,就换上这个了,展示一下这个包的操作</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 255, 1)">static</span> ConnectionMultiplexer redisClient = ConnectionMultiplexer.Connect(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">localhost</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">void</span> Main(<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">[] args)
{
IDatabase db </span>=<span style="color: rgba(0, 0, 0, 1)"> redisClient.GetDatabase();
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Set</span>
db.StringSet(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">city</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">汕尾</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Get</span>
db.StringGet(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">city</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">int</span> age = (<span style="color: rgba(0, 0, 255, 1)">int</span>)db.StringGet(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">age</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 删除</span>
db.KeyDelete(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">city</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 监听消息队列messages</span>
ISubscriber sub =<span style="color: rgba(0, 0, 0, 1)"> redisClient.GetSubscriber();
sub.Subscribe(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">messages</span><span style="color: rgba(128, 0, 0, 1)">"</span>, (channel, message) =><span style="color: rgba(0, 0, 0, 1)">
{
Console.WriteLine((</span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">)message);
});
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 进队</span>
<span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">int</span> i = <span style="color: rgba(128, 0, 128, 1)">1</span>; i < <span style="color: rgba(128, 0, 128, 1)">10</span>; i++<span style="color: rgba(0, 0, 0, 1)">)
{
Thread.Sleep(</span><span style="color: rgba(128, 0, 128, 1)">1000</span><span style="color: rgba(0, 0, 0, 1)">);
sub.Publish(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">messages</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">hello</span><span style="color: rgba(128, 0, 0, 1)">"</span> +<span style="color: rgba(0, 0, 0, 1)"> i);
}
Console.ReadLine();
}</span></pre>
</div>
<p> 接下来我们写一下api返回的json缓存</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">using</span> Newtonsoft.Json;</pre>
</div>
<p> 接口例子:</p>
<div class="cnblogs_code">
<pre>
</span><span style="color: rgba(0, 0, 255, 1)">public</span> ResultModel<DataTable> Get(<span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> id)
{
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (db.KeyExists($<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">user_id_{id}</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">))// 有缓存获取缓存
</span><span style="color: rgba(0, 0, 255, 1)">return</span> JsonConvert.DeserializeObject<ResultModel<DataTable>>(db.StringGet($<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">user_id_{id}</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">));// 反序列化
</span><span style="color: rgba(0, 0, 255, 1)">string</span> sql = $<span style="color: rgba(128, 0, 0, 1)">@"</span><span style="color: rgba(128, 0, 0, 1)">
SELECT * from tb_user s where s.ID=@id
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">var</span> param = <span style="color: rgba(0, 0, 255, 1)">new</span> List<DbParam><span style="color: rgba(0, 0, 0, 1)">();
param.Add(</span><span style="color: rgba(0, 0, 255, 1)">new</span> DbParam(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">id</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, id,DbType.Int32));
</span><span style="color: rgba(0, 0, 255, 1)">var</span> dtRes =<span style="color: rgba(0, 0, 0, 1)"> _dBHelper.Query(sql,param);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (dtRes.Success == <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">new</span> ResultModel<DataTable><span style="color: rgba(0, 0, 0, 1)">().SetError(dtRes.Msg);</span><span style="color: rgba(0, 0, 0, 1)">
db.StringSet($</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">user_id_{id}</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, JsonConvert.SerializeObject(dtRes).ToString()); // 序列化成字符串
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> dtRes;
}</span></pre>
</div>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<img src="https://img2022.cnblogs.com/blog/1138839/202208/1138839-20220811171153475-1328028247.png">
<p> </p><br><br>
来源:https://www.cnblogs.com/wskxy/p/11038692.html
頁:
[1]