<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Redis 教程 &#8211; FoxDevelop</title>
	<atom:link href="https://www.foxdevelop.com/zh/category/c-zh/c-%e5%ba%93/redis-%e6%95%99%e7%a8%8b/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.foxdevelop.com</link>
	<description>独立软件开发工作室</description>
	<lastBuildDate>Fri, 14 Aug 2026 09:44:03 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.4</generator>

<image>
	<url>https://www.foxdevelop.com/wp-content/uploads/2026/05/fox-svgrepo-com-1.png</url>
	<title>Redis 教程 &#8211; FoxDevelop</title>
	<link>https://www.foxdevelop.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>判断是否存在</title>
		<link>https://www.foxdevelop.com/zh/2026/08/02/%e5%88%a4%e6%96%ad%e6%98%af%e5%90%a6%e5%ad%98%e5%9c%a8/</link>
					<comments>https://www.foxdevelop.com/zh/2026/08/02/%e5%88%a4%e6%96%ad%e6%98%af%e5%90%a6%e5%ad%98%e5%9c%a8/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Sun, 02 Aug 2026 12:01:28 +0000</pubDate>
				<category><![CDATA[Redis 教程]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=7233</guid>

					<description><![CDATA[Redis 判断Key是否存 IDatabase.KeyEx ...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Redis 判断Key是否存</p>



<p class="wp-block-paragraph"><code>IDatabase.KeyExists(string key)</code><br>作用：检测Redis中指定key是否存在</p>



<ul class="wp-block-list">
<li>返回 <code>true</code>：key存在</li>



<li>返回 <code>false</code>：key不存在</li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">只要key存在就返回true，<strong>不限数据类型</strong>（String、List、Hash等所有类型通用）</p>
</blockquote>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">/// &lt;summary&gt;</span>
<span class="hljs-comment">/// 判断缓存key是否存在</span>
<span class="hljs-comment">/// &lt;/summary&gt;</span>
<span class="hljs-comment">/// &lt;param name="key"&gt;缓存键名&lt;/param&gt;</span>
<span class="hljs-comment">/// &lt;returns&gt;存在true，不存在false&lt;/returns&gt;</span>
<span class="hljs-keyword">private</span> bool <span class="hljs-keyword">IsSet</span>(string key)
{
    <span class="hljs-keyword">return</span> db.KeyExists(key);
}</code></span></pre>


<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">示例</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">string cacheKey = <span class="hljs-string">"user:1001"</span>;
<span class="hljs-keyword">if</span>(IsSet(cacheKey))
{
    <span class="hljs-comment">// key存在，直接读取缓存</span>
    <span class="hljs-keyword">var</span> user = Get&lt;User&gt;(cacheKey);
}
<span class="hljs-keyword">else</span>
{
    <span class="hljs-comment">// key不存在，查询数据库，然后写入Redis</span>
    <span class="hljs-keyword">var</span> user = QueryDbUser(<span class="hljs-number">1001</span>);
    <span class="hljs-built_in">Set</span>(cacheKey, user, <span class="hljs-number">30</span>);
}</code></span></pre>


<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/zh/2026/08/02/%e5%88%a4%e6%96%ad%e6%98%af%e5%90%a6%e5%ad%98%e5%9c%a8/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>读取值</title>
		<link>https://www.foxdevelop.com/zh/2026/08/02/%e8%af%bb%e5%8f%96%e5%80%bc-2/</link>
					<comments>https://www.foxdevelop.com/zh/2026/08/02/%e8%af%bb%e5%8f%96%e5%80%bc-2/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Sun, 02 Aug 2026 11:57:02 +0000</pubDate>
				<category><![CDATA[Redis 教程]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=7229</guid>

					<description><![CDATA[Redis 读取值 Get 例子 注意]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Redis 读取值 Get </p>



<ol class="wp-block-list">
<li>底层API：<code>IDatabase.StringGet(key)</code>，从Redis读取字符串类型数据，返回类型为 <code>RedisValue</code></li>



<li><code>RedisValue.HasValue</code>：判断该key是否存在、是否有数据
<ul class="wp-block-list">
<li><code>true</code>：key存在；</li>



<li><code>false</code>：key不存在</li>
</ul>
</li>



<li>读取到二进制数据后，需要<strong>反序列化</strong>，还原为原始对象</li>



<li>不存在时返回 <code>default(T)</code>
<ul class="wp-block-list">
<li>值类型(int/DateTime)：返回0、最小时间</li>



<li>引用类型(class)：返回null</li>
</ul>
</li>
</ol>



<h4 class="wp-block-heading">例子</h4>


<pre class="wp-block-code"><span><code class="hljs language-cs"><span class="hljs-keyword">using</span> StackExchange.Redis;
<span class="hljs-keyword">using</span> Newtonsoft.Json;
<span class="hljs-keyword">using</span> System.Text;

<span class="hljs-comment"><span class="hljs-doctag">///</span> <span class="hljs-doctag">&lt;summary&gt;</span></span>
<span class="hljs-comment"><span class="hljs-doctag">///</span> 根据Key读取缓存对象</span>
<span class="hljs-comment"><span class="hljs-doctag">///</span> <span class="hljs-doctag">&lt;/summary&gt;</span></span>
<span class="hljs-comment"><span class="hljs-doctag">///</span> <span class="hljs-doctag">&lt;typeparam name="T"&gt;</span>目标对象类型<span class="hljs-doctag">&lt;/typeparam&gt;</span></span>
<span class="hljs-comment"><span class="hljs-doctag">///</span> <span class="hljs-doctag">&lt;param name="key"&gt;</span>缓存键名<span class="hljs-doctag">&lt;/param&gt;</span></span>
<span class="hljs-comment"><span class="hljs-doctag">///</span> <span class="hljs-doctag">&lt;returns&gt;</span>存在返回对象；不存在返回default(T)<span class="hljs-doctag">&lt;/returns&gt;</span></span>
<span class="hljs-keyword">public</span> T Get&lt;T&gt;(<span class="hljs-keyword">string</span> key)
{
    <span class="hljs-comment">// 从redis读取数据</span>
    RedisValue rValue = db.StringGet(key);

    <span class="hljs-comment">// 判断key不存在</span>
    <span class="hljs-keyword">if</span> (!rValue.HasValue)
    {
        <span class="hljs-keyword">return</span> <span class="hljs-keyword">default</span>(T);
    }

    <span class="hljs-comment">// 二进制数据反序列化为实体</span>
    T result = Deserialize&lt;T&gt;(rValue);
    <span class="hljs-keyword">return</span> result;
}

<span class="hljs-comment"><span class="hljs-doctag">///</span> <span class="hljs-doctag">&lt;summary&gt;</span></span>
<span class="hljs-comment"><span class="hljs-doctag">///</span> 反序列化：byte&#91;] → T对象</span>
<span class="hljs-comment"><span class="hljs-doctag">///</span> <span class="hljs-doctag">&lt;/summary&gt;</span></span>
<span class="hljs-keyword">private</span> T Deserialize&lt;T&gt;(<span class="hljs-keyword">byte</span>&#91;] serializedObject)
{
    <span class="hljs-keyword">if</span> (serializedObject == <span class="hljs-literal">null</span>)
    {
        <span class="hljs-keyword">return</span> <span class="hljs-keyword">default</span>(T);
    }
    <span class="hljs-comment">// byte数组转json字符串</span>
    <span class="hljs-keyword">string</span> json = Encoding.UTF8.GetString(serializedObject);
    <span class="hljs-comment">// json转为目标实体</span>
    <span class="hljs-keyword">return</span> JsonConvert.DeserializeObject&lt;T&gt;(json);
}

<span class="hljs-comment"><span class="hljs-doctag">///</span> <span class="hljs-doctag">&lt;summary&gt;</span></span>
<span class="hljs-comment"><span class="hljs-doctag">///</span> 对象序列化方法（和Set配套）</span>
<span class="hljs-comment"><span class="hljs-doctag">///</span> <span class="hljs-doctag">&lt;/summary&gt;</span></span>
<span class="hljs-function"><span class="hljs-keyword">private</span> <span class="hljs-keyword">byte</span>&#91;] <span class="hljs-title">Serialize</span>(<span class="hljs-params"><span class="hljs-keyword">object</span> data</span>)</span>
{
    <span class="hljs-keyword">string</span> json = JsonConvert.SerializeObject(data);
    <span class="hljs-keyword">return</span> Encoding.UTF8.GetBytes(json);
}</code></span></pre>


<h4 class="wp-block-heading">注意</h4>



<ol class="wp-block-list">
<li><strong>类型隐式转换</strong><br><code>RedisValue</code> 可以<strong>直接隐式转换成 byte[]</strong>，所以代码可以直接把 <code>rValue</code> 传入 <code>Deserialize&lt;T&gt;(byte[])</code>，编译器自动转换。</li>



<li><strong>读写配对流程</strong></li>
</ol>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-selector-tag">Set</span>写入流程：实体 → <span class="hljs-selector-tag">Serialize</span> → <span class="hljs-selector-tag">byte</span><span class="hljs-selector-attr">&#91;]</span> → <span class="hljs-selector-tag">Redis</span>
<span class="hljs-selector-tag">Get</span>读取流程：<span class="hljs-selector-tag">Redis</span> → <span class="hljs-selector-tag">byte</span><span class="hljs-selector-attr">&#91;]</span> → <span class="hljs-selector-tag">Deserialize</span> → 实体</code></span></pre>


<ol start="3" class="wp-block-list">
<li><strong>调用示例</strong></li>
</ol>


<pre class="wp-block-code"><span><code class="hljs language-cs"><span class="hljs-comment">// 示例1：读取自定义实体</span>
<span class="hljs-keyword">var</span> user = Get&lt;User&gt;(<span class="hljs-string">"user_1001"</span>);

<span class="hljs-comment">// 示例2：读取简单字符串</span>
<span class="hljs-keyword">string</span> text = Get&lt;<span class="hljs-keyword">string</span>&gt;(<span class="hljs-string">"msg"</span>);

<span class="hljs-comment">// 示例3：读取数字</span>
<span class="hljs-keyword">int</span> count = Get&lt;<span class="hljs-keyword">int</span>&gt;(<span class="hljs-string">"visit_count"</span>);</code></span></pre>


<ol class="wp-block-list">
<li><strong>序列化与反序列化类型不一致</strong><br>存入时存 <code>User</code>，读取时用 <code>Student</code>，会触发Json反序列化报错。</li>



<li><strong>default(T)容易忽略空判断</strong></li>
</ol>


<pre class="wp-block-code"><span><code class="hljs language-cs"><span class="hljs-keyword">var</span> model = Get&lt;User&gt;(<span class="hljs-string">"key"</span>);
<span class="hljs-comment">// 引用类型不存在时model=null，直接访问model.Name会空引用报错</span>
<span class="hljs-keyword">if</span>(model != <span class="hljs-literal">null</span>)
{

}</code></span></pre>


<ol start="3" class="wp-block-list">
<li><strong>编码统一</strong><br>存入、读取必须统一使用 <code>Encoding.UTF8</code>，否则乱码。</li>
</ol>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/zh/2026/08/02/%e8%af%bb%e5%8f%96%e5%80%bc-2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>写入值</title>
		<link>https://www.foxdevelop.com/zh/2026/08/02/%e8%af%bb%e5%8f%96%e5%80%bc/</link>
					<comments>https://www.foxdevelop.com/zh/2026/08/02/%e8%af%bb%e5%8f%96%e5%80%bc/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Sun, 02 Aug 2026 11:51:29 +0000</pubDate>
				<category><![CDATA[Redis 教程]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=7224</guid>

					<description><![CDATA[StackExchange.Redis 通用Set/Get  ...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"> StackExchange.Redis 通用Set/Get 设置和读取</p>



<ol class="wp-block-list">
<li>底层调用 <code>IDatabase.StringSet()</code> 写入Redis字符串类型数据</li>



<li><strong>序列化逻辑</strong>：任意对象 → JSON字符串 → UTF8 Byte数组存入Redis</li>



<li><strong>反序列化逻辑</strong>：读取Byte数组 → JSON字符串 → 目标泛型对象</li>



<li>返回值：<code>true</code> = 设置成功，<code>false</code> = 设置失败</li>
</ol>



<p class="wp-block-paragraph">需要引入命名空间</p>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-selector-tag">using</span> <span class="hljs-selector-tag">StackExchange</span><span class="hljs-selector-class">.Redis</span>;
<span class="hljs-selector-tag">using</span> <span class="hljs-selector-tag">Newtonsoft</span><span class="hljs-selector-class">.Json</span>;
<span class="hljs-selector-tag">using</span> <span class="hljs-selector-tag">System</span><span class="hljs-selector-class">.Text</span>;</code></span></pre>


<p class="wp-block-paragraph">下面实例，使用Set，输入key，然后输入字节数组，然后输入过期时间。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">/// &lt;summary&gt;</span>
<span class="hljs-comment">/// 写入Redis缓存</span>
<span class="hljs-comment">/// &lt;/summary&gt;</span>
<span class="hljs-comment">/// &lt;param name="key"&gt;缓存键&lt;/param&gt;</span>
<span class="hljs-comment">/// &lt;param name="data"&gt;任意对象&lt;/param&gt;</span>
<span class="hljs-comment">/// &lt;param name="cacheTime"&gt;过期时长【分钟】&lt;/param&gt;</span>
<span class="hljs-comment">/// &lt;returns&gt;true成功 / false失败&lt;/returns&gt;</span>
<span class="hljs-keyword">private</span> bool Set(string key, object data, int cacheTime)
{
    <span class="hljs-keyword">if</span> (data == <span class="hljs-keyword">null</span>)
    {
        <span class="hljs-keyword">return</span> <span class="hljs-keyword">false</span>;
    }
    byte&#91;] entryBytes = Serialize(data);
    TimeSpan expiresIn = TimeSpan.FromMinutes(cacheTime);
    <span class="hljs-keyword">return</span> db.StringSet(key, entryBytes, expiresIn);
}

<span class="hljs-comment">/// &lt;summary&gt;</span>
<span class="hljs-comment">/// 对象序列化：object → byte&#91;]</span>
<span class="hljs-comment">/// &lt;/summary&gt;</span>
<span class="hljs-keyword">private</span> byte&#91;] Serialize(object data)
{
    string json = JsonConvert.SerializeObject(data);
    <span class="hljs-keyword">return</span> Encoding.UTF8.GetBytes(json);
}

<span class="hljs-comment">/// &lt;summary&gt;</span>
<span class="hljs-comment">/// 根据Key读取缓存</span>
<span class="hljs-comment">/// &lt;/summary&gt;</span>
<span class="hljs-comment">/// &lt;typeparam name="T"&gt;目标类型&lt;/typeparam&gt;</span>
<span class="hljs-comment">/// &lt;param name="key"&gt;缓存键&lt;/param&gt;</span>
<span class="hljs-comment">/// &lt;returns&gt;缓存不存在返回 default(T)&lt;/returns&gt;</span>
<span class="hljs-keyword">public</span> T Get&lt;T&gt;(string key)
{
    RedisValue rValue = db.StringGet(key);
    <span class="hljs-keyword">if</span> (!rValue.HasValue)
    {
        <span class="hljs-keyword">return</span> <span class="hljs-keyword">default</span>(T);
    }
    T result = Deserialize&lt;T&gt;(rValue);
    <span class="hljs-keyword">return</span> result;
}

<span class="hljs-comment">/// &lt;summary&gt;</span>
<span class="hljs-comment">/// 反序列化：byte&#91;] → T对象</span>
<span class="hljs-comment">/// &lt;/summary&gt;</span>
<span class="hljs-keyword">private</span> T Deserialize&lt;T&gt;(byte&#91;] serializedObject)
{
    <span class="hljs-keyword">if</span> (serializedObject == <span class="hljs-keyword">null</span>)
    {
        <span class="hljs-keyword">return</span> <span class="hljs-keyword">default</span>(T);
    }
    string json = Encoding.UTF8.GetString(serializedObject);
    <span class="hljs-keyword">return</span> JsonConvert.DeserializeObject&lt;T&gt;(json);
}</code></span></pre>


<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading">注意</h4>



<ol class="wp-block-list">
<li><strong>时间单位</strong><br>代码中 <code>TimeSpan.FromMinutes(cacheTime)</code> = <strong>传入数字代表【分钟】</strong><br>如果你窗体调用时传入 <code>Set(key,val,1000)</code>，会设置缓存 <strong>1000分钟过期</strong>，不是秒！</li>
</ol>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">之前窗体代码调用写了<code>1000</code>，这里是典型易错点。<br>如果想要传入<strong>秒</strong>，改成 <code>TimeSpan.FromSeconds(cacheTime)</code></p>
</blockquote>



<ol start="2" class="wp-block-list">
<li><strong>依赖安装</strong><br>NuGet必须同时安装：</li>
</ol>



<ul class="wp-block-list">
<li><code>StackExchange.Redis</code></li>



<li><code>Newtonsoft.Json</code></li>
</ul>



<ol start="2" class="wp-block-list">
<li>数据存储格式<br>所有对象都会序列化为JSON二进制存入Redis；打开Redis客户端看到的值是标准JSON文本。</li>



<li><code>RedisValue</code> 兼容<br><code>db.StringGet(key)</code> 返回 <code>RedisValue</code>，它可以直接隐式转为<code>byte[]</code>，所以可以直接传给<code>Deserialize&lt;T&gt;</code>。</li>



<li>线程安全建议<br><code>IConnectionMultiplexer</code> 需要全局单例，不要每次读写Redis新建连接。</li>
</ol>



<h4 class="wp-block-heading">使用示例</h4>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-comment">// 写入（30分钟过期）</span>
bool ok = <span class="hljs-built_in">Set</span>(<span class="hljs-string">"user:1001"</span>, <span class="hljs-keyword">new</span> {Id = <span class="hljs-number">1001</span>, Name = <span class="hljs-string">"test"</span>}, <span class="hljs-number">30</span>);

<span class="hljs-comment">// 读取</span>
<span class="hljs-keyword">var</span> user = Get&lt;dynamic&gt;(<span class="hljs-string">"user:1001"</span>);

<span class="hljs-comment">// 读取实体类示例</span>
<span class="hljs-comment">// var model = Get&lt;UserInfo&gt;("user:1001");</span></code></span></pre>


<h4 class="wp-block-heading">建议</h4>



<p class="wp-block-paragraph">可以把这套方法连同Redis连接代码，全部抽离到独立 <code>RedisHelper.cs</code> 静态帮助类，不要写在窗体Form里面，实现业务解耦。<br></p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/zh/2026/08/02/%e8%af%bb%e5%8f%96%e5%80%bc/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>连接Redis</title>
		<link>https://www.foxdevelop.com/zh/2026/08/02/%e9%93%be%e6%8e%a5redis/</link>
					<comments>https://www.foxdevelop.com/zh/2026/08/02/%e9%93%be%e6%8e%a5redis/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Sun, 02 Aug 2026 11:44:54 +0000</pubDate>
				<category><![CDATA[Redis 教程]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=7221</guid>

					<description><![CDATA[本节课演示winform中，操作redis，其他项目也是类似 ...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">本节课演示winform中，操作redis，其他项目也是类似，只不过用winform来演示而已。</p>



<p class="wp-block-paragraph">我们安装了redis后，redis是一个服务，相当于一个独立的程序，那么我们在C# WINFORM中使用它，就需要好像链接数据库一样链接它。</p>



<p class="wp-block-paragraph">下面是配置它的连接字符串，放到了app.config里面</p>



<h4 class="wp-block-heading">1. App.config 配置</h4>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-meta">&lt;?xml version="1.0" encoding="utf-8"?&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">configuration</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">connectionStrings</span>&gt;</span>
    <span class="hljs-comment">&lt;!-- Redis连接字符串 --&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">add</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"RedisConnectionString"</span> <span class="hljs-attr">connectionString</span>=<span class="hljs-string">"127.0.0.1:6379"</span>/&gt;</span>
    <span class="hljs-comment">&lt;!-- 简写方式 connectionString="localhost" 默认端口6379 --&gt;</span>
  <span class="hljs-tag">&lt;/<span class="hljs-name">connectionStrings</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">startup</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">supportedRuntime</span> <span class="hljs-attr">version</span>=<span class="hljs-string">"v4.0"</span> <span class="hljs-attr">sku</span>=<span class="hljs-string">".NETFramework,Version=v4.5"</span> /&gt;</span>
  <span class="hljs-tag">&lt;/<span class="hljs-name">startup</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">configuration</span>&gt;</span></code></span></pre>


<p class="wp-block-paragraph">连接字符串说明</p>



<ul class="wp-block-list">
<li><code>localhost</code> / <code>127.0.0.1</code>：本地Redis服务</li>



<li>默认端口 <strong>6379</strong>；非默认端口格式：<code>127.0.0.1:6380</code></li>



<li>如果Redis设置密码，写法：<code>127.0.0.1:6379,password=你的密码</code></li>
</ul>



<h4 class="wp-block-heading">2. Form1.cs 核心代码</h4>



<p class="wp-block-paragraph">所需NuGet包</p>



<p class="wp-block-paragraph"><code>StackExchange.Redis</code></p>



<p class="wp-block-paragraph">需要引入命名空间</p>


<pre class="wp-block-code"><span><code class="hljs language-cs"><span class="hljs-keyword">using</span> StackExchange.Redis;
<span class="hljs-keyword">using</span> System.Configuration;</code></span></pre>

<pre class="wp-block-code"><span><code class="hljs language-cs"><span class="hljs-keyword">public</span> <span class="hljs-keyword">partial</span> <span class="hljs-keyword">class</span> <span class="hljs-title">Form1</span> : <span class="hljs-title">Form</span>
{
    <span class="hljs-comment">// Redis数据库操作对象</span>
    <span class="hljs-keyword">private</span> IDatabase db;
    <span class="hljs-comment">// 读取配置文件连接字符串</span>
    <span class="hljs-keyword">private</span> <span class="hljs-keyword">string</span> ConnectionString = ConfigurationManager.ConnectionStrings&#91;<span class="hljs-string">"RedisConnectionString"</span>].ConnectionString;
    <span class="hljs-comment">// 多路复用连接（官方推荐单例，volatile保证线程安全）</span>
    <span class="hljs-keyword">private</span> <span class="hljs-keyword">volatile</span> IConnectionMultiplexer connection;

    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-title">Form1</span>(<span class="hljs-params"></span>)</span>
    {
        InitializeComponent();
        <span class="hljs-comment">// 创建连接</span>
        connection = ConnectionMultiplexer.Connect(ConnectionString);
        <span class="hljs-comment">// 获取默认0号数据库</span>
        db = connection.GetDatabase();
    }

    <span class="hljs-function"><span class="hljs-keyword">private</span> <span class="hljs-keyword">void</span> <span class="hljs-title">button1_Click</span>(<span class="hljs-params"><span class="hljs-keyword">object</span> sender, EventArgs e</span>)</span>
    {
        <span class="hljs-comment">// Set方法：写入缓存（key、value、过期秒数）</span>
        <span class="hljs-keyword">bool</span> res = Set(<span class="hljs-keyword">this</span>.textBox1.Text, <span class="hljs-keyword">this</span>.textBox2.Text, <span class="hljs-number">1000</span>);
        <span class="hljs-keyword">if</span> (res)
        {
            MessageBox.Show(<span class="hljs-string">"设置成功"</span>);
        }
        <span class="hljs-keyword">else</span>
        {
            MessageBox.Show(<span class="hljs-string">"设置失败"</span>);
        }
    }

    <span class="hljs-comment"><span class="hljs-doctag">///</span> <span class="hljs-doctag">&lt;summary&gt;</span></span>
    <span class="hljs-comment"><span class="hljs-doctag">///</span> Redis写入字符串键值（简易封装）</span>
    <span class="hljs-comment"><span class="hljs-doctag">///</span> <span class="hljs-doctag">&lt;/summary&gt;</span></span>
    <span class="hljs-function"><span class="hljs-keyword">bool</span> <span class="hljs-title">Set</span>(<span class="hljs-params"><span class="hljs-keyword">string</span> key, <span class="hljs-keyword">object</span> data, <span class="hljs-keyword">int</span> cacheTime</span>)</span>
    {
        <span class="hljs-keyword">if</span> (<span class="hljs-keyword">string</span>.IsNullOrEmpty(key)) <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
        <span class="hljs-comment">// 设置过期时间</span>
        <span class="hljs-keyword">var</span> expire = TimeSpan.FromSeconds(cacheTime);
        <span class="hljs-keyword">return</span> db.StringSet(key, data.ToString(), expire);
    }
}</code></span></pre>


<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/zh/2026/08/02/%e9%93%be%e6%8e%a5redis/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>使用winform演示redis</title>
		<link>https://www.foxdevelop.com/zh/2026/08/02/%e4%bd%bf%e7%94%a8winform%e6%bc%94%e7%a4%baredis/</link>
					<comments>https://www.foxdevelop.com/zh/2026/08/02/%e4%bd%bf%e7%94%a8winform%e6%bc%94%e7%a4%baredis/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Sun, 02 Aug 2026 11:36:00 +0000</pubDate>
				<category><![CDATA[Redis 教程]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=7217</guid>

					<description><![CDATA[本节使用 C# WinForms 基于StackExchan ...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">本节使用 <strong>C# WinForms 基于StackExchange.Redis封装Redis缓存</strong> </p>



<p class="wp-block-paragraph">打开VS 创建一个winform项目，然后使用nuget 安装依赖包</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="449" height="151" src="https://www.foxdevelop.com/wp-content/uploads/2026/08/image-21.png" alt="" class="wp-image-7218" srcset="https://www.foxdevelop.com/wp-content/uploads/2026/08/image-21.png 449w, https://www.foxdevelop.com/wp-content/uploads/2026/08/image-21-300x101.png 300w" sizes="(max-width: 449px) 100vw, 449px" /></figure>



<h4 class="wp-block-heading">安装依赖包</h4>



<ol class="wp-block-list">
<li><strong>StackExchange.Redis</strong><br>.NET生态最主流的Redis客户端开源组件，用于和Redis服务通信。<br>Github仓库：<a href="https://github.com/StackExchange/StackExchange/StackExchange.Redis">https://github.com/StackExchange/StackExchange/StackExchange.Redis</a><br>Redis本身提供TCP协议，理论上可以手写Socket直接通信，但工业开发几乎都使用成熟第三方库。</li>



<li><strong>Newtonsoft.Json（Json.NET）</strong><br>用于对象序列化，把任意对象转为JSON字符串，再转成字节数组存入Redis；读取时反向反序列化。<br>必须通过NuGet安装，代码中<code>JsonConvert.SerializeObject</code>就是来自这个库。</li>
</ol>



<h4 class="wp-block-heading">Redis封装方法</h4>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">// 写入缓存：存入对象，设置过期分钟</span>
<span class="hljs-keyword">private</span> bool Set(string key, object data, int cacheTime)
{
    <span class="hljs-keyword">if</span> (data == <span class="hljs-keyword">null</span>)
    {
        <span class="hljs-keyword">return</span> <span class="hljs-keyword">false</span>;
    }
    <span class="hljs-keyword">var</span> entryBytes = Serialize(data);
    <span class="hljs-keyword">var</span> expiresIn = TimeSpan.FromMinutes(cacheTime);
    <span class="hljs-keyword">return</span> db.StringSet(key, entryBytes, expiresIn);
}

<span class="hljs-comment">// 对象序列化：实体对象 → UTF8字节数组</span>
<span class="hljs-keyword">private</span> byte&#91;] Serialize(object data)
{
    <span class="hljs-keyword">var</span> json = JsonConvert.SerializeObject(data);
    <span class="hljs-keyword">return</span> Encoding.UTF8.GetBytes(json);
}</code></span></pre>


<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/zh/2026/08/02/%e4%bd%bf%e7%94%a8winform%e6%bc%94%e7%a4%baredis/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>安装</title>
		<link>https://www.foxdevelop.com/zh/2026/08/02/%e5%ae%89%e8%a3%85/</link>
					<comments>https://www.foxdevelop.com/zh/2026/08/02/%e5%ae%89%e8%a3%85/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Sun, 02 Aug 2026 10:36:54 +0000</pubDate>
				<category><![CDATA[Redis 教程]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=7214</guid>

					<description><![CDATA[Windows Redis 3.2.100 安装与启动 下载 ...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Windows Redis 3.2.100 安装与启动</p>



<h4 class="wp-block-heading">下载地址</h4>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">目前（2026年） Redis官方仅提供Linux原版安装包，Windows版本由微软归档维护（现已停止更新）</p>



<ol class="wp-block-list">
<li>官网（Linux版）：http://redis.io/download</li>



<li>Windows版Github仓库：https://github.com/MSOpenTech/redis/tags</li>



<li>示例版本（win-3.2.100）：<br>https://github.com/MicrosoftArchive/redis/releases/tag/win-3.2.100</li>
</ol>
</blockquote>



<h4 class="wp-block-heading">解压后核心文件</h4>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>文件</th><th>作用</th></tr></thead><tbody><tr><td>redis-server.exe</td><td>Redis服务端程序</td></tr><tr><td>redis-cli.exe</td><td>Redis客户端命令行工具</td></tr><tr><td>redis.windows.conf</td><td>默认配置文件</td></tr><tr><td>redis.windows-service.conf</td><td>安装Windows系统服务专用配置</td></tr><tr><td>redis-benchmark.exe</td><td>Redis性能压测工具</td></tr><tr><td>dump.rdb</td><td>Redis持久化数据文件</td></tr></tbody></table></figure>



<h4 class="wp-block-heading">CMD命令行启动Redis服务端</h4>



<ol class="wp-block-list">
<li>打开CMD，切换到Redis解压目录</li>
</ol>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-selector-tag">cd</span> <span class="hljs-selector-tag">D</span>:\<span class="hljs-selector-tag">Redis</span>\<span class="hljs-selector-tag">Redis-x64-3</span><span class="hljs-selector-class">.2</span><span class="hljs-selector-class">.100</span></code></span></pre>


<ol start="2" class="wp-block-list">
<li>启动命令（加载配置文件）</li>
</ol>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-selector-tag">redis-server</span> <span class="hljs-selector-tag">redis</span><span class="hljs-selector-class">.windows</span><span class="hljs-selector-class">.conf</span></code></span></pre>


<p class="wp-block-paragraph">启动成功标识：</p>



<ul class="wp-block-list">
<li>运行模式：<code>Running in standalone mode</code>（单机模式）</li>



<li>默认端口：<strong>6379</strong></li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">缺陷：以该方式启动，<strong>关闭CMD窗口，Redis服务直接停止</strong></p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading">安装为Windows系统服务</h4>



<p class="wp-block-paragraph">普通CMD启动不能后台常驻，可以安装成系统服务实现开机自启。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">课程演示仅临时启动，该步骤仅作参考。</p>
</blockquote>



<h4 class="wp-block-heading">Redis连接与基础命令测试</h4>



<h5 class="wp-block-heading">1. 客户端连接命令</h5>



<p class="wp-block-paragraph">新开一个CMD，进入Redis目录执行：</p>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-selector-tag">redis-cli</span><span class="hljs-selector-class">.exe</span> <span class="hljs-selector-tag">-h</span> 127<span class="hljs-selector-class">.0</span><span class="hljs-selector-class">.0</span><span class="hljs-selector-class">.1</span> <span class="hljs-selector-tag">-p</span> 6379</code></span></pre>


<ul class="wp-block-list">
<li><code>-h</code>：指定Redis服务IP（可填写局域网其他电脑IP实现远程连接）</li>



<li><code>-p</code>：指定端口号</li>
</ul>



<h5 class="wp-block-heading">2. 基础指令演示</h5>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment"># 设置键值</span>
set key1 value1
<span class="hljs-comment"># 获取键对应的值</span>
get key1

<span class="hljs-comment"># 不存在的key查询返回 (nil)</span>
get kkkk

set ddd <span class="hljs-number">123</span>
get ddd</code></span></pre>


<p class="wp-block-paragraph">规则：</p>



<ul class="wp-block-list">
<li><code>set</code> 需要同时传入【key】和【value】两个参数，缺少参数会报错</li>



<li>查询不存在的键，返回 <code>(nil)</code></li>
</ul>



<h4 class="wp-block-heading">注意</h4>



<ol class="wp-block-list">
<li>Windows Redis 3.2版本非常老旧，生产环境<strong>不推荐使用Windows版Redis</strong>，建议使用Linux环境部署；</li>



<li>远程连接Redis需要关闭防火墙、修改配置文件允许外部IP访问；</li>



<li>服务端CMD窗口必须保持打开，客户端才能正常连接。</li>
</ol>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/zh/2026/08/02/%e5%ae%89%e8%a3%85/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>介绍</title>
		<link>https://www.foxdevelop.com/zh/2026/08/02/%e4%bb%8b%e7%bb%8d-3/</link>
					<comments>https://www.foxdevelop.com/zh/2026/08/02/%e4%bb%8b%e7%bb%8d-3/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Sun, 02 Aug 2026 10:28:35 +0000</pubDate>
				<category><![CDATA[Redis 教程]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=7212</guid>

					<description><![CDATA[Redis基础定义 Redis 是一款开源、使用ANSI C ...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"></p>



<h4 class="wp-block-heading">Redis基础定义</h4>



<p class="wp-block-paragraph">Redis 是一款<strong>开源、使用ANSI C语言编写</strong>、支持网络访问、同时支持内存存储与持久化的 <strong>Key-Value（键值）数据库 / 存储系统</strong>，提供多编程语言客户端API。</p>



<ol class="wp-block-list">
<li>属于NoSQL非关系型数据库；</li>



<li>和 Memcached 同类，但功能更强，可以弥补 Memcached 的短板；</li>



<li>常作为关系型数据库（MySQL等）的补充缓存方案。</li>
</ol>



<h4 class="wp-block-heading">支持的数据类型</h4>



<ul class="wp-block-list">
<li><code>String</code>：字符串类型</li>



<li><code>List</code>：双向链表</li>



<li><code>Set</code>：无序集合</li>



<li><code>zset(sorted set)</code>：有序集合</li>



<li><code>Hash</code>：哈希结构（类似Map）</li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Memcached 仅支持字符串，这是二者最典型的区别之一。</p>
</blockquote>



<h4 class="wp-block-heading">特性</h4>



<ol class="wp-block-list">
<li><strong>多语言客户端支持</strong><br>官方提供 Java、C/C++、C#、PHP、JavaScript、Python、Ruby、Perl 等大量语言SDK，开发接入便捷。</li>



<li><strong>主从同步机制</strong><br>支持主从复制，可以实现数据异地备份、读写分离，提升可用性。</li>



<li><strong>高性能</strong><br>数据优先存放内存，读写速度极高，广泛用作分布式缓存。</li>



<li><strong>持久化能力</strong><br>可将内存数据落地磁盘，重启后数据不会全部丢失（Memcached 默认无持久化）。</li>
</ol>



<h4 class="wp-block-heading">背景</h4>



<p class="wp-block-paragraph">早期Redis项目由VMware资助开发与维护。</p>



<p class="wp-block-paragraph">我们会用 <strong>WinForm(C#) 简易Redis客户端Demo</strong>来给大家演示使用，是C#对接Redis的入门演示程序。</p>



<ul class="wp-block-list">
<li>设置键值</li>



<li>根据键获取值<br></li>
</ul>



<p class="wp-block-paragraph"><strong>Redis vs Memcached 简要对比</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>特性</th><th>Redis</th><th>Memcached</th></tr></thead><tbody><tr><td>数据类型</td><td>5种基础结构</td><td>仅String字符串</td></tr><tr><td>持久化</td><td>支持RDB/AOF持久化</td><td>不支持持久化</td></tr><tr><td>主从复制</td><td>支持</td><td>不原生支持</td></tr><tr><td>内存淘汰</td><td>多种淘汰策略</td><td>LRU淘汰</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/zh/2026/08/02/%e4%bb%8b%e7%bb%8d-3/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
