<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>archive</title><link>https://archive-w.netlify.app/doc/framework/redis/</link><description>Recent content on archive</description><generator>Hugo</generator><language>zh-CN</language><atom:link href="https://archive-w.netlify.app/doc/framework/redis/index.xml" rel="self" type="application/rss+xml"/><item><title/><link>https://archive-w.netlify.app/doc/framework/redis/install/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://archive-w.netlify.app/doc/framework/redis/install/</guid><description>&lt;ul>
&lt;li>
&lt;h2 id="introinstall">
 Intro(Install)
 &lt;a class="anchor" href="#introinstall">#&lt;/a>
&lt;/h2>
&lt;ul>
&lt;li>
&lt;h3 id="压缩包安装">
 压缩包安装
 &lt;a class="anchor" href="#%e5%8e%8b%e7%bc%a9%e5%8c%85%e5%ae%89%e8%a3%85">#&lt;/a>
&lt;/h3>
&lt;h6 id="docker" class="anchor_hr" style="font-size: 0rem; margin: 0; padding: 0; border-width: 0px;">&lt;/h6>&lt;h6 id="centos7" class="anchor_hr" style="font-size: 0rem; margin: 0; padding: 0; border-width: 0px;">&lt;/h6>&lt;h6 id="ubuntu" class="anchor_hr" style="font-size: 0rem; margin: 0; padding: 0; border-width: 0px;">&lt;/h6>&lt;div class="docsify-tabs docsify-tabs--classic">&lt;button anchorId="docker" class="docsify-tabs__tab" data-tab="Docker">Docker&lt;/button>&lt;div class="docsify-tabs__content" data-tab-content="docker">
&lt;ol>
&lt;li>配置环境&lt;/li>
&lt;/ol>
&lt;div class="outer yosemite">&lt;div class="dot red">&lt;/div>&lt;div class="dot amber">&lt;/div>&lt;div class="dot green">&lt;/div>&lt;/div>
&lt;div class="code-toolbar">&lt;pre data-lang="shell" data-line="" class="language-shell line-numbers" style="max-height: none">&lt;code class="language-shell"># 启动服务器
$ docker run -d -p 6379:6379 --name redis-6.2.8 redis:6.2.8 redis-server --save 60 1 --loglevel warning

# 使用自定义的配置文件
$ docker run -d -p 6379:6379 -v /myredis/conf:/usr/local/etc/redis --name redis-6.2.8 redis:6.2.8 redis-server /usr/local/etc/redis/redis.conf
&lt;/code>&lt;/pre>&lt;/div>
&lt;ol start="2">
&lt;li>测试&lt;/li>
&lt;/ol>
&lt;div class="outer yosemite">&lt;div class="dot red">&lt;/div>&lt;div class="dot amber">&lt;/div>&lt;div class="dot green">&lt;/div>&lt;/div>
&lt;div class="code-toolbar">&lt;pre data-lang="shell" data-line="" class="language-shell line-numbers" style="max-height: none">&lt;code class="language-shell"># 使用redis容器内部客户端进行访问
$ docker run -it --rm --network host redis:6.2.8 redis-cli -h 127.0.0.1
&lt;/code>&lt;/pre>&lt;/div>
&lt;p>&lt;img src="https://archive-w.netlify.app/.images/doc/framework/redis/redis-install-dcoker-01.png" alt="" width="100%">&lt;/p></description></item><item><title/><link>https://archive-w.netlify.app/doc/framework/redis/redis/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://archive-w.netlify.app/doc/framework/redis/redis/</guid><description>&lt;h2 id="nosql数据库的四大分类">
 NoSql数据库的四大分类
 &lt;a class="anchor" href="#nosql%e6%95%b0%e6%8d%ae%e5%ba%93%e7%9a%84%e5%9b%9b%e5%a4%a7%e5%88%86%e7%b1%bb">#&lt;/a>
&lt;/h2>
&lt;ul>
&lt;li>
&lt;h3 id="表格视图">
 表格视图
 &lt;a class="anchor" href="#%e8%a1%a8%e6%a0%bc%e8%a7%86%e5%9b%be">#&lt;/a>
&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>分类&lt;/th>
&lt;th>Example举例&lt;/th>
&lt;th>典型应用场景&lt;/th>
&lt;th>数据模型&lt;/th>
&lt;th>优点&lt;/th>
&lt;th>缺点&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>键值(key-value)&lt;/td>
&lt;td>Tokyo,Cabinet/Tyrant,Redis,Voldemort,Oracle BDB&lt;/td>
&lt;td>内容缓存，主要用于处理大量数据的高访问负载，也用于一些日志系统等&lt;/td>
&lt;td>key指向value的键值对，通常用hashtable来实现&lt;/td>
&lt;td>查找速度快&lt;/td>
&lt;td>数据无结构化，通常只被当作字符串或者二进制数据&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>列存储数据库&lt;/td>
&lt;td>Cassandra，HBase,Riak&lt;/td>
&lt;td>分布式的文件系统&lt;/td>
&lt;td>以列簇式存储，将同一列数据存放在一起&lt;/td>
&lt;td>查找速度快，可扩展性强，更容易进行分布式扩展&lt;/td>
&lt;td>功能相对局限&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>文档型数据库&lt;/td>
&lt;td>CouchDB，MongoDb&lt;/td>
&lt;td>web应用（与Key-value类似，value是结构化的，不同的是数据库能够了解Value的内容）&lt;/td>
&lt;td>key-value对应的键值对，value为结构化数据&lt;/td>
&lt;td>数据结构要求不严格，表结构可变，不需要向关系型数据库一样预先定义表结构&lt;/td>
&lt;td>查询性能不高，而且缺乏统一的查询语法&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>图形数据库&lt;/td>
&lt;td>Neo4j,InfoGrid,Infinite Graph&lt;/td>
&lt;td>社交网络，推荐系统等，专注于构建关系图谱&lt;/td>
&lt;td>图结构&lt;/td>
&lt;td>利用图层结构相关算法，比如最短路径寻址等&lt;/td>
&lt;td>很多时候需要对整个图做计算才能得出需要的信息&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/li>
&lt;/ul>
&lt;h2 id="分布式数据库中的cap原理capbase">
 分布式数据库中的CAP原理CAP+BASE
 &lt;a class="anchor" href="#%e5%88%86%e5%b8%83%e5%bc%8f%e6%95%b0%e6%8d%ae%e5%ba%93%e4%b8%ad%e7%9a%84cap%e5%8e%9f%e7%90%86capbase">#&lt;/a>
&lt;/h2>
&lt;ul>
&lt;li>
&lt;h3 id="传统的acid分别是什么">
 传统的acid分别是什么
 &lt;a class="anchor" href="#%e4%bc%a0%e7%bb%9f%e7%9a%84acid%e5%88%86%e5%88%ab%e6%98%af%e4%bb%80%e4%b9%88">#&lt;/a>
&lt;/h3>
&lt;ul>
&lt;li>A（Atomicity）原子性&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>原子性很容易理解，也就是说事务里的所有操作要么全部完成，要么不做，事务成功的条件是事务里的所有操作都成功，只要有一个操作失败，整个事务就是失败的，需要回滚。比如银行转账，从A向B转100元，分为两个步骤，1）从A账户减100，2）在B账户加100。&lt;/p>
&lt;/blockquote>
&lt;ul>
&lt;li>C（Consistency）一致性&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>数据库要一直处于一致的状态，事务的运行不会改变数据库原本的一致性约束&lt;/p>
&lt;/blockquote>
&lt;ul>
&lt;li>I（Isolation）隔离性&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>所谓的隔离性是指并发的事务之间不会互相影响，如果一个事务要访问的数据正在被另一个事务修改，只要另外一个事务未提交，它所访问的数据就不受未提交事务的影响，比如有个事务要完成A——》B转账100元，只要事务还没提交（未完成）的情况下，B查询自己的账户余额，是看不到新增加的100元的&lt;/p>
&lt;/blockquote>
&lt;ul>
&lt;li>D（Durability）持久性&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>持久性是指一旦事务提交后，它所做的修改将会永久的保存在数据库上，即使宕机也不会丢失。&lt;/p>
&lt;/blockquote>
&lt;/li>
&lt;li>
&lt;h3 id="cap">
 CAP
 &lt;a class="anchor" href="#cap">#&lt;/a>
&lt;/h3>
&lt;ul>
&lt;li>C（Consistency）强一致性&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>Consistency 中文叫做&amp;quot;一致性&amp;quot;。意思是，写操作之后的读操作，必须返回该值。举例来说，某条记录是 v0，用户向 G1 发起一个写操作，将其改为 v1。接下来，用户的读操作就会得到 v1。这就叫一致性。问题是，用户有可能向 G2 发起读操作，由于 G2 的值没有发生变化，因此返回的是 v0。G1 和 G2 读操作的结果不一致，这就不满足一致性了。为了让 G2 也能变为 v1，就要在 G1 写操作的时候，让 G1 向 G2 发送一条消息，要求 G2 也改成 v1。&lt;/p></description></item></channel></rss>