Jekyll2018-04-02T15:57:58+08:00https://shinede.github.io//记录 –Me开发编程中的点点滴滴ShienDe的个人博客,记录,编程,开发ShineDe第一次利用Git命令创建仓库,并提交代码2017-11-20T00:00:00+08:002017-11-20T00:00:00+08:00https://shinede.github.io//2017/11/20/git-one-push<p>记录git使用的方法和命令,熟练使用基础命令,第一次利用Git命令创建仓库,并提交代码。</p>
<!--more-->
<p><strong>1. 首先在git.oschina.net上新建一个项目</strong></p>
<p><strong>2. 在本地目录下,执行如下命</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code>
<span class="n">git</span> <span class="n">init</span>
<span class="n">git</span> <span class="n">add</span> <span class="o">.</span>
<span class="n">git</span> <span class="n">config</span> <span class="n">user</span><span class="o">.</span><span class="na">name</span> <span class="err">'</span><span class="n">xxx</span><span class="err">'</span>
<span class="n">git</span> <span class="n">config</span> <span class="n">user</span><span class="o">.</span><span class="na">email</span> <span class="err">'</span><span class="n">xxxx</span><span class="nd">@xx</span><span class="o">.</span><span class="na">com</span><span class="err">'</span>
<span class="n">git</span> <span class="n">pull</span> <span class="nl">https:</span><span class="c1">//git.oschina.net/xxx/xxx.git master</span>
<span class="n">git</span> <span class="n">remote</span> <span class="n">add</span> <span class="n">origin</span> <span class="nl">https:</span><span class="c1">//git.oschina.net/xxx/xxx.git</span>
<span class="n">git</span> <span class="n">commit</span> <span class="o">-</span><span class="n">am</span> <span class="err">'</span><span class="n">init</span><span class="err">'</span>
<span class="n">git</span> <span class="n">push</span> <span class="o">-</span><span class="n">u</span> <span class="n">origin</span> <span class="n">master</span>
</code></pre></div></div>ShineDe记录git使用的方法和命令,熟练使用基础命令,第一次利用Git命令创建仓库,并提交代码。搬瓦工 FinalSpeed + SS 实现科学上网加速2017-03-29T00:00:00+08:002017-03-29T00:00:00+08:00https://shinede.github.io//2017/03/29/finalspeed-ss<p>FinalSpeed是高速双边加速软件,可加速所有基于tcp协议的网络服务,在高丢包和高延迟环境下,仍可达到90%的物理带宽利用率,即使高峰时段也能轻松跑满带宽。</p>
<!--more-->
<p>我这边是能流畅的看1080P,当然实际的速度要看你的宽带,下面这张是视频截图可以看到视频加载很流畅。话不多说开始教程了</p>
<p><img src="http://7xsod9.com1.z0.glb.clouddn.com/QQ%E6%88%AA%E5%9B%BE20170329110055.png" alt="enter image description here" /></p>
<h2 id="安装服务端">安装服务端</h2>
<p>安装前说明:</p>
<ol>
<li>
<p>服务器建议至少256M内存。</p>
</li>
<li>
<p>openvz架构只支持udp协议,搬瓦工属于openvz。</p>
</li>
<li>
<p>服务端可以和锐速共存,互不影响。</p>
</li>
<li>
<p>FinalSpeed必须服务端和客户端同时配合使用,否则没有任何加速效果。</p>
</li>
<li>
<p>官方地址: <a href="http://www.ip4a.com/">http://www.ip4a.com/</a></p>
</li>
</ol>
<h2 id="一windows版服务端">一.windows版服务端</h2>
<p>说明:Windows版服务端运行需要java环境和winpcap。</p>
<p>下载地址:<a href="https://pan.baidu.com/s/1nvwiUmt">点击下载finalspeed-service-windows1.0</a></p>
<h2 id="二linux版服务器端本人centos6">二.linux版服务器端(本人Centos6)</h2>
<p>服务端会启动iptables,如果服务器修改过ssh的默认端口,请先开放你的ssh端口,否则可能导致ssh连接失败。</p>
<p>不熟悉不要乱改配置,如果无法连接,请卸载后一键安装,不要做任何修改,严格按照教程操作。</p>
<p>开放端口命令(下面的命令是为了防止安装之后连不上ssh)</p>
<p>首先Xshell登陆你的VPS</p>
<p>输入:</p>
<blockquote>
<p><strong>service iptables start</strong></p>
</blockquote>
<p>继续:(端口号要改成你VPS的SSH端口号)</p>
<blockquote>
<p><strong>iptables -I INPUT -p tcp –dport 端口号 -j ACCEPT</strong></p>
</blockquote>
<blockquote>
<p><strong>iptables -I OUTPUT -p tcp –sport ssh端口号 -j ACCEPT</strong></p>
</blockquote>
<blockquote>
<p><strong>service iptables save</strong></p>
</blockquote>
<p>一键安装命令:(依次输入就行)</p>
<blockquote>
<p><strong>rm -f install_fs.sh</strong></p>
</blockquote>
<blockquote>
<p><strong>wget http://soft.paozailushang.com/vps/install_fs.sh</strong></p>
</blockquote>
<blockquote>
<p><strong>chmod +x install_fs.sh</strong></p>
</blockquote>
<blockquote>
<p><strong>./install_fs.sh 2>&1 | tee install.log</strong></p>
</blockquote>
<p><img src="http://7xsod9.com1.z0.glb.clouddn.com/QQ%E6%88%AA%E5%9B%BE20170329111932.png" alt="" /></p>
<p>输入完得到这个就是成功。 因为没有启动所以找不到日志。</p>
<p>使用 <strong>sh /fs/start.sh</strong> 命令启动服务</p>
<h2 id="三配置windows">三.配置windows</h2>
<p>Windows版:<a href="https://pan.baidu.com/s/1kVFjT2n">finalspeed_install1.12.exe</a></p>
<h2 id="注意问题"><span style="color:red">注意问题:</span></h2>
<p>服务器必须同时部署 FinalSpeed 服务端才能进行加速。</p>
<p>客户端必须准确设置物理带宽,最终加速的速度不会超过所设置的带宽值,如果设置值高于实际带宽会造成丢包,导致速度变慢。</p>
<p>客户端首选tcp协议,如果udp不稳定,请切换到tcp。</p>
<p>若服务器为openvz架构,客户端只能选择udp协议,其他架构同时支持tcp和udp协议。</p>
<p>windows 客户端使用 tcp 协议时不兼容锐速,停止锐速后可以正常运行。</p>
<p>FinalSpeed 不提供加密功能,如有安全需求,不要直接加速明文协议。</p>
<h2 id="四加速shadowsocks">四.加速Shadowsocks</h2>
<p>假设SS服务器的IP为[235:561:109:56] (也可以是ipv4的地址),FinalSpeed端口为默认150,Shadowsocks 端口为433。</p>
<p>设置服务器地址,选择UDP协议,物理宽带是你实际的宽带值,不能超过你当前的宽带值,否则可能影响使用。</p>
<p><img src="http://7xsod9.com1.z0.glb.clouddn.com/QQ%E6%88%AA%E5%9B%BE20170329113049.png" alt="" /></p>
<p>点击添加</p>
<p>名称和本地端口可以随便填 ,加速端口填写服务器ss端口 ,默认是443</p>
<p><img src="http://7xsod9.com1.z0.glb.clouddn.com/QQ%E6%88%AA%E5%9B%BE20170329113630.png" alt="" /></p>
<p>设置SS客户端 密码即为SS密码</p>
<p><img src="http://7xsod9.com1.z0.glb.clouddn.com/QQ%E6%88%AA%E5%9B%BE20170329114047.png" alt="" /></p>
<p>设置完后 如果出现</p>
<p><img src="http://7xsod9.com1.z0.glb.clouddn.com/QQ%E6%88%AA%E5%9B%BE20170329114235.png" alt="" /></p>
<p>就说明成功了 连连youtube试试速度吧</p>
<h2 id="五其他使用说明">五.其他使用说明</h2>
<p>更新:执行一键安装会自动完成更新。</p>
<p>卸载:</p>
<blockquote>
<p><strong>sh /fs/stop.sh ; rm -rf /fs</strong></p>
</blockquote>
<p>启动:</p>
<blockquote>
<p><strong>sh /fs/start.sh</strong></p>
</blockquote>
<p>停止:</p>
<blockquote>
<p><strong>sh /fs/stop.sh</strong></p>
</blockquote>
<p>重新启动:</p>
<blockquote>
<p><strong>sh /fs/restart.sh</strong></p>
</blockquote>
<p>运行日记</p>
<blockquote>
<p><strong>tail -f /fs/server.log</strong></p>
</blockquote>
<p>设置开机启动:</p>
<p>依次输入:</p>
<blockquote>
<p><strong>chmod +x /etc/rc.local</strong></p>
</blockquote>
<blockquote>
<p><strong>vi /etc/rc.local</strong></p>
</blockquote>
<p>按 i 进入编辑模式 加入</p>
<blockquote>
<p><strong>sh /fs/start.sh</strong></p>
</blockquote>
<p>每天晚上3点自动重启</p>
<blockquote>
<p><strong>crontab -e</strong></p>
</blockquote>
<blockquote>
<p><strong>0 3 * * * sh /fs/restart.sh</strong></p>
</blockquote>
<p>大概效果如下图</p>
<p><img src="http://7xsod9.com1.z0.glb.clouddn.com/QQ%E6%88%AA%E5%9B%BE20170329114714.png" alt="" /></p>
<p>教程到此差不多结束了 有不懂的在下面留言问我吧</p>ShineDeFinalSpeed是高速双边加速软件,可加速所有基于tcp协议的网络服务,在高丢包和高延迟环境下,仍可达到90%的物理带宽利用率,即使高峰时段也能轻松跑满带宽。MySQL 命令大全2017-01-08T00:00:00+08:002017-01-08T00:00:00+08:00https://shinede.github.io//2017/01/08/Mysql-code-1<p>这是我从网上收集的一些MySQL 命令,像MySQL数据库用的多的都是一些数据库管理工具,像:phpMyAdmin、MySQLDumper、Navicat、MySQL GUI Tools 等 ,这里不一一介绍了。但是我们还是要熟悉它的命令所以写了这篇文章。</p>
<!--more-->
<h1 id="1连接mysql">1、连接Mysql</h1>
<p>格式: mysql -h主机地址 -u用户名 -p用户密码</p>
<p>1、连接到本机上的MYSQL。</p>
<p>首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root -p,回车后提示你输密码.注意用户名前可以有空格也可</p>
<p>以没有空格,但是密码前必须没有空格,否则让你重新输入密码。</p>
<p>如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是: mysql></p>
<p>2、连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">mysql</span> <span class="o">-</span><span class="n">h110</span><span class="o">.</span><span class="mf">110.110</span><span class="o">.</span><span class="mi">110</span> <span class="o">-</span><span class="n">u</span> <span class="n">root</span> <span class="o">-</span><span class="n">p</span> <span class="mi">123</span><span class="o">;</span><span class="err">(注</span><span class="o">:</span><span class="n">u</span><span class="err">与</span><span class="n">root</span><span class="err">之间可以不用加空格,其它也一样)</span>
</code></pre></div></div>
<p>3、退出MYSQL命令:**exit **(回车)</p>
<h1 id="2修改密码">2、修改密码</h1>
<p>格式:<strong>mysqladmin -u用户名 -p旧密码 password 新密码</strong></p>
<p>1、给root加个密码ab12。</p>
<p>首先在DOS下进入目录mysql\bin,然后键入以下命令</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">mysqladmin</span> <span class="o">-</span><span class="n">u</span> <span class="n">root</span> <span class="o">-</span><span class="n">password</span> <span class="n">ab12</span>
</code></pre></div></div>
<p>注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。</p>
<p>2、再将root的密码改为djg345。</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">mysqladmin</span> <span class="o">-</span><span class="n">u</span> <span class="n">root</span> <span class="o">-</span><span class="n">p</span> <span class="n">ab12</span> <span class="n">password</span> <span class="n">djg345</span>
</code></pre></div></div>
<h1 id="3增加新用户">3、增加新用户</h1>
<p>注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符</p>
<p>格式:<strong>grant select on 数据库.* to 用户名@登录主机 identified by “密码”</strong></p>
<p>1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用</p>
<p>root用户连入MYSQL,然后键入以下命令:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">grant</span> <span class="n">select</span><span class="o">,</span><span class="n">insert</span><span class="o">,</span><span class="n">update</span><span class="o">,</span><span class="n">delete</span> <span class="n">on</span> <span class="o">*.*</span> <span class="n">to</span> <span class="o">[</span><span class="n">email</span><span class="o">=</span><span class="n">test1</span><span class="err">@”</span><span class="o">%]</span><span class="n">test1</span><span class="err">@”</span><span class="o">%[/</span><span class="n">email</span><span class="o">]</span><span class="err">”</span> <span class="n">Identified</span> <span class="n">by</span> <span class="err">“</span><span class="n">abc</span><span class="err">”</span><span class="o">;</span>
</code></pre></div></div>
<p>但增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的mysql数据</p>
<p>库并对你的数据可以为所欲为了,解决办法见2。</p>
<p>2、增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作</p>
<p>(localhost指本地主机,即MYSQL数据库所在的那台主机),这样用户即使用知道test2的密码,他也无法从internet上直接访</p>
<p>问数据库,只能通过MYSQL主机上的web页来访问了。</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">grant</span> <span class="n">select</span><span class="o">,</span><span class="n">insert</span><span class="o">,</span><span class="n">update</span><span class="o">,</span><span class="n">delete</span> <span class="n">on</span> <span class="n">mydb</span><span class="o">.*</span> <span class="n">to</span> <span class="o">[</span><span class="n">email</span><span class="o">=</span><span class="n">test2</span><span class="nd">@localhost</span><span class="o">]</span><span class="n">test2</span><span class="nd">@localhost</span><span class="o">[/</span><span class="n">email</span><span class="o">]</span> <span class="n">identified</span> <span class="n">by</span> <span class="err">“</span><span class="n">abc</span><span class="err">”</span><span class="o">;</span>
</code></pre></div></div>
<p>如果你不想test2有密码,可以再打一个命令将密码消掉。</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">grant</span> <span class="n">select</span><span class="o">,</span><span class="n">insert</span><span class="o">,</span><span class="n">update</span><span class="o">,</span><span class="n">delete</span> <span class="n">on</span> <span class="n">mydb</span><span class="o">.*</span> <span class="n">to</span> <span class="o">[</span><span class="n">email</span><span class="o">=</span><span class="n">test2</span><span class="nd">@localhost</span><span class="o">]</span><span class="n">test2</span><span class="nd">@localhost</span><span class="o">[/</span><span class="n">email</span><span class="o">]</span> <span class="n">identified</span> <span class="n">by</span> <span class="err">“”</span><span class="o">;</span>
</code></pre></div></div>
<h1 id="41-创建数据库">4.1 创建数据库</h1>
<p>注意:创建数据库之前要先连接Mysql服务器</p>
<p>命令:**create database <数据库名>**</数据库名></p>
<p>例1:建立一个名为xhkdb的数据库</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">mysql</span><span class="o">></span> <span class="n">create</span> <span class="n">database</span> <span class="n">xhkdb</span><span class="o">;</span>
</code></pre></div></div>
<p>例2:创建数据库并分配用户</p>
<p><strong>①CREATE DATABASE 数据库名;</strong></p>
<p><strong>②GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON 数据库名.* TO 数据库名@localhost IDENTIFIED BY ‘密码’;</strong></p>
<p><strong>③SET PASSWORD FOR ‘数据库名’@’localhost’ = OLD_PASSWORD(‘密码’);</strong></p>
<p>依次执行3个命令完成数据库创建。注意:中文 “密码”和“数据库”是户自己需要设置的。</p>
<h1 id="42-显示数据库">4.2 显示数据库</h1>
<p>命令:<strong>show databases (注意:最后有个s)</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">mysql</span><span class="o">></span> <span class="n">show</span> <span class="n">databases</span><span class="o">;</span>
</code></pre></div></div>
<p>注意:为了不再显示的时候乱码,要修改数据库默认编码。以下以GBK编码页面为例进行说明:</p>
<p>1、修改MYSQL的配置文件:my.ini里面修改default-character-set=gbk</p>
<p>2、代码运行时修改:</p>
<p>** ①Java代码:jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=gbk**</p>
<p>** ②PHP代码:header(“Content-Type:text/html;charset=gb2312”);**</p>
<p>** ③C语言代码:int mysql_set_character_set( MYSQL * mysql, char * csname);**</p>
<p>该函数用于为当前连接设置默认的字符集。字符串csname指定了1个有效的字符集名称。连接校对成为字符集的默认校对。该</p>
<p>函数的工作方式与SET NAMES语句类似,但它还能设置mysql- > charset的值,从而影响了由mysql_real_escape_string() 设置的</p>
<p>字符集。</p>
<h1 id="43-删除数据库">4.3 删除数据库</h1>
<p>命令:**drop database <数据库名>**</数据库名></p>
<p>例如:删除名为 xhkdb的数据库</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">mysql</span><span class="o">></span> <span class="n">drop</span> <span class="n">database</span> <span class="n">xhkdb</span><span class="o">;</span>
</code></pre></div></div>
<p>例子1:删除一个已经确定存在的数据库</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">mysql</span><span class="o">></span> <span class="n">drop</span> <span class="n">database</span> <span class="n">drop_database</span><span class="o">;</span>
<span class="n">Query</span> <span class="n">OK</span><span class="o">,</span> <span class="mi">0</span> <span class="n">rows</span> <span class="nf">affected</span> <span class="o">(</span><span class="mf">0.00</span> <span class="n">sec</span><span class="o">)</span>
</code></pre></div></div>
<p>例子2:删除一个不确定存在的数据库</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">mysql</span><span class="o">></span> <span class="n">drop</span> <span class="n">database</span> <span class="n">drop_database</span><span class="o">;</span>
<span class="n">ERROR</span> <span class="mi">1008</span> <span class="o">(</span><span class="n">HY000</span><span class="o">):</span> <span class="n">Can</span><span class="err">'</span><span class="n">t</span> <span class="n">drop</span> <span class="n">database</span> <span class="err">'</span><span class="n">drop_database</span><span class="err">'</span><span class="o">;</span> <span class="n">database</span> <span class="n">doesn</span><span class="err">'</span><span class="n">t</span> <span class="n">exist</span>
<span class="c1">//发生错误,不能删除'drop_database'数据库,该数据库不存在。</span>
<span class="n">mysql</span><span class="o">></span> <span class="n">drop</span> <span class="n">database</span> <span class="k">if</span> <span class="n">exists</span> <span class="n">drop_database</span><span class="o">;</span>
<span class="n">Query</span> <span class="n">OK</span><span class="o">,</span> <span class="mi">0</span> <span class="n">rows</span> <span class="n">affected</span><span class="o">,</span> <span class="mi">1</span> <span class="n">warning</span> <span class="o">(</span><span class="mf">0.00</span> <span class="n">sec</span><span class="o">)</span><span class="c1">//产生一个警告说明此数据库不存在</span>
<span class="n">mysql</span><span class="o">></span> <span class="n">create</span> <span class="n">database</span> <span class="n">drop_database</span><span class="o">;</span>
<span class="n">Query</span> <span class="n">OK</span><span class="o">,</span> <span class="mi">1</span> <span class="n">row</span> <span class="nf">affected</span> <span class="o">(</span><span class="mf">0.00</span> <span class="n">sec</span><span class="o">)</span>
<span class="n">mysql</span><span class="o">></span> <span class="n">drop</span> <span class="n">database</span> <span class="k">if</span> <span class="n">exists</span> <span class="n">drop_database</span><span class="o">;</span><span class="c1">//if exists 判断数据库是否存在,不存在也不产生错误</span>
<span class="n">Query</span> <span class="n">OK</span><span class="o">,</span> <span class="mi">0</span> <span class="n">rows</span> <span class="nf">affected</span> <span class="o">(</span><span class="mf">0.00</span> <span class="n">sec</span><span class="o">)</span>
</code></pre></div></div>
<h1 id="44-连接数据库">4.4 连接数据库</h1>
<p>命令: use <数据库名></数据库名></p>
<p>例如:如果xhkdb数据库存在,尝试存取它:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">mysql</span><span class="o">></span> <span class="n">use</span> <span class="n">xhkdb</span><span class="o">;</span>
</code></pre></div></div>
<p>屏幕提示:<strong>Database changed</strong></p>
<p>use 语句可以通告MySQL把db_name数据库作为默认(当前)数据库使用,用于后续语句。该数据库保持为默认数据库,直到</p>
<p>语段的结尾,或者直到发布一个不同的USE语句:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">mysql</span><span class="o">></span> <span class="n">USE</span> <span class="n">db1</span><span class="o">;</span>
<span class="n">mysql</span><span class="o">></span> <span class="n">SELECT</span> <span class="nf">COUNT</span><span class="o">(*)</span> <span class="n">FROM</span> <span class="n">mytable</span><span class="o">;</span> <span class="err">#</span> <span class="n">selects</span> <span class="n">from</span> <span class="n">db1</span><span class="o">.</span><span class="na">mytable</span>
<span class="n">mysql</span><span class="o">></span> <span class="n">USE</span> <span class="n">db2</span><span class="o">;</span>
<span class="n">mysql</span><span class="o">></span> <span class="n">SELECT</span> <span class="nf">COUNT</span><span class="o">(*)</span> <span class="n">FROM</span> <span class="n">mytable</span><span class="o">;</span> <span class="err">#</span> <span class="n">selects</span> <span class="n">from</span> <span class="n">db2</span><span class="o">.</span><span class="na">mytable</span>
</code></pre></div></div>
<p>使用USE语句为一个特定的当前的数据库做标记,不会阻碍您访问其它数据库中的表。下面的例子可以从db1数据库访问作者</p>
<p>表,并从db2数据库访问编辑表:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">mysql</span><span class="o">></span> <span class="n">USE</span> <span class="n">db1</span><span class="o">;</span>
<span class="n">mysql</span><span class="o">></span> <span class="n">SELECT</span> <span class="n">author_name</span><span class="o">,</span><span class="n">editor_name</span> <span class="n">FROM</span> <span class="n">author</span><span class="o">,</span><span class="n">db2</span><span class="o">.</span><span class="na">editor</span>
<span class="o">-></span> <span class="n">WHERE</span> <span class="n">author</span><span class="o">.</span><span class="na">editor_id</span> <span class="o">=</span> <span class="n">db2</span><span class="o">.</span><span class="na">editor</span><span class="o">.</span><span class="na">editor_id</span><span class="o">;</span>
</code></pre></div></div>
<p>USE语句被设立出来,用于与Sybase相兼容。</p>
<p>有些网友问到,连接以后怎么退出。其实,不用退出来,use 数据库后,使用show databases就能查询所有数据库,如果想跳</p>
<p>到其他数据库,用</p>
<p>use 其他数据库名字</p>
<p>就可以了。</p>
<h1 id="45-当前选择的数据库">4.5 当前选择的数据库</h1>
<p>命令:<strong>mysql> select database();</strong></p>
<p>MySQL中SELECT命令类似于其他编程语言里的print或者write,你可以用它来显示一个字符串、数字、数学表达式的结果等等。</p>
<p>如何使用MySQL中SELECT命令的特殊功能?</p>
<p><strong>1.显示MYSQL的版本</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">mysql</span><span class="o">></span> <span class="n">select</span> <span class="nf">version</span><span class="o">();</span>
<span class="o">+-----------------------+</span>
<span class="o">|</span> <span class="n">version</span><span class="o">()</span> <span class="o">|</span>
<span class="o">+-----------------------+</span>
<span class="o">|</span> <span class="mf">6.0</span><span class="o">.</span><span class="mi">4</span><span class="o">-</span><span class="n">alpha</span><span class="o">-</span><span class="n">community</span> <span class="o">|</span>
<span class="o">+-----------------------+</span>
<span class="mi">1</span> <span class="n">row</span> <span class="n">in</span> <span class="nf">set</span> <span class="o">(</span><span class="mf">0.02</span> <span class="n">sec</span><span class="o">)</span>
</code></pre></div></div>
<p><strong>2. 显示当前时间</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">mysql</span><span class="o">></span> <span class="n">select</span> <span class="nf">now</span><span class="o">();</span>
<span class="o">+---------------------+</span>
<span class="o">|</span> <span class="n">now</span><span class="o">()</span> <span class="o">|</span>
<span class="o">+---------------------+</span>
<span class="o">|</span> <span class="mi">2009</span><span class="o">-</span><span class="mi">09</span><span class="o">-</span><span class="mi">15</span> <span class="mi">22</span><span class="o">:</span><span class="mi">35</span><span class="o">:</span><span class="mi">32</span> <span class="o">|</span>
<span class="o">+---------------------+</span>
<span class="mi">1</span> <span class="n">row</span> <span class="n">in</span> <span class="nf">set</span> <span class="o">(</span><span class="mf">0.04</span> <span class="n">sec</span><span class="o">)</span>
</code></pre></div></div>
<p><strong>3. 显示年月日</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">SELECT</span> <span class="nf">DAYOFMONTH</span><span class="o">(</span><span class="n">CURRENT_DATE</span><span class="o">);</span>
<span class="o">+--------------------------+</span>
<span class="o">|</span> <span class="n">DAYOFMONTH</span><span class="o">(</span><span class="n">CURRENT_DATE</span><span class="o">)</span> <span class="o">|</span>
<span class="o">+--------------------------+</span>
<span class="o">|</span> <span class="mi">15</span> <span class="o">|</span>
<span class="o">+--------------------------+</span>
<span class="mi">1</span> <span class="n">row</span> <span class="n">in</span> <span class="nf">set</span> <span class="o">(</span><span class="mf">0.01</span> <span class="n">sec</span><span class="o">)</span>
<span class="n">SELECT</span> <span class="nf">MONTH</span><span class="o">(</span><span class="n">CURRENT_DATE</span><span class="o">);</span>
<span class="o">+---------------------+</span>
<span class="o">|</span> <span class="n">MONTH</span><span class="o">(</span><span class="n">CURRENT_DATE</span><span class="o">)</span> <span class="o">|</span>
<span class="o">+---------------------+</span>
<span class="o">|</span> <span class="mi">9</span> <span class="o">|</span>
<span class="o">+---------------------+</span>
<span class="mi">1</span> <span class="n">row</span> <span class="n">in</span> <span class="nf">set</span> <span class="o">(</span><span class="mf">0.00</span> <span class="n">sec</span><span class="o">)</span>
<span class="n">SELECT</span> <span class="nf">YEAR</span><span class="o">(</span><span class="n">CURRENT_DATE</span><span class="o">);</span>
<span class="o">+--------------------+</span>
<span class="o">|</span> <span class="n">YEAR</span><span class="o">(</span><span class="n">CURRENT_DATE</span><span class="o">)</span> <span class="o">|</span>
<span class="o">+--------------------+</span>
<span class="o">|</span> <span class="mi">2009</span> <span class="o">|</span>
<span class="o">+--------------------+</span>
<span class="mi">1</span> <span class="n">row</span> <span class="n">in</span> <span class="nf">set</span> <span class="o">(</span><span class="mf">0.00</span> <span class="n">sec</span><span class="o">)</span>
</code></pre></div></div>
<p><strong>4. 显示字符串</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">mysql</span><span class="o">></span> <span class="n">SELECT</span> <span class="s">"welecome to my blog!"</span><span class="o">;</span>
<span class="o">+----------------------+</span>
<span class="o">|</span> <span class="n">welecome</span> <span class="n">to</span> <span class="n">my</span> <span class="n">blog</span><span class="o">!</span> <span class="o">|</span>
<span class="o">+----------------------+</span>
<span class="o">|</span> <span class="n">welecome</span> <span class="n">to</span> <span class="n">my</span> <span class="n">blog</span><span class="o">!</span> <span class="o">|</span>
<span class="o">+----------------------+</span>
<span class="mi">1</span> <span class="n">row</span> <span class="n">in</span> <span class="nf">set</span> <span class="o">(</span><span class="mf">0.00</span> <span class="n">sec</span><span class="o">)</span>
</code></pre></div></div>
<p><strong>5. 当计算器用</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">select</span> <span class="o">((</span><span class="mi">4</span> <span class="o">*</span> <span class="mi">4</span><span class="o">)</span> <span class="o">/</span> <span class="mi">10</span> <span class="o">)</span> <span class="o">+</span> <span class="mi">25</span><span class="o">;</span>
<span class="o">+----------------------+</span>
<span class="o">|</span> <span class="o">((</span><span class="mi">4</span> <span class="o">*</span> <span class="mi">4</span><span class="o">)</span> <span class="o">/</span> <span class="mi">10</span> <span class="o">)</span> <span class="o">+</span> <span class="mi">25</span> <span class="o">|</span>
<span class="o">+----------------------+</span>
<span class="o">|</span> <span class="mf">26.60</span> <span class="o">|</span>
<span class="o">+----------------------+</span>
<span class="mi">1</span> <span class="n">row</span> <span class="n">in</span> <span class="nf">set</span> <span class="o">(</span><span class="mf">0.00</span> <span class="n">sec</span><span class="o">)</span>
</code></pre></div></div>
<p><strong>6. 串接字符串</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">select</span> <span class="nf">CONCAT</span><span class="o">(</span><span class="n">f_name</span><span class="o">,</span> <span class="s">" "</span><span class="o">,</span> <span class="n">l_name</span><span class="o">)</span>
<span class="n">AS</span> <span class="n">Name</span>
<span class="n">from</span> <span class="n">employee_data</span>
<span class="n">where</span> <span class="n">title</span> <span class="o">=</span> <span class="err">'</span><span class="n">Marketing</span> <span class="n">Executive</span><span class="err">'</span><span class="o">;</span>
<span class="o">+---------------+</span>
<span class="o">|</span> <span class="n">Name</span> <span class="o">|</span>
<span class="o">+---------------+</span>
<span class="o">|</span> <span class="n">Monica</span> <span class="n">Sehgal</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Hal</span> <span class="n">Simlai</span> <span class="o">|</span>
<span class="o">|</span> <span class="n">Joseph</span> <span class="n">Irvine</span> <span class="o">|</span>
<span class="o">+---------------+</span>
<span class="mi">3</span> <span class="n">rows</span> <span class="n">in</span> <span class="nf">set</span> <span class="o">(</span><span class="mf">0.00</span> <span class="n">sec</span><span class="o">)</span>
</code></pre></div></div>
<p>注意:这里用到CONCAT()函数,用来把字符串串接起来。另外,我们还用到以前学到的AS给结果列’CONCAT(f_name, “ “,</p>
<p>l_name)’起了个假名。</p>
<h1 id="51-创建数据表">5.1 创建数据表</h1>
<p>命令:**create table <表名> ( <字段名1> <类型1> [,..<字段名n> <类型n>]);**</类型n></字段名n></类型1></字段名1></表名></p>
<p>例如,建立一个名为MyClass的表,</p>
<p>字段名 数字类型 数据宽度 是否为空 是否主键 自动增加 默认值</p>
<p>id int 4 否 primary key auto_increment</p>
<p>name char 20 否</p>
<p>sex int 4 否 0</p>
<p>degree double 16 是</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">mysql</span><span class="o">></span> <span class="n">create</span> <span class="n">table</span> <span class="nf">MyClass</span><span class="o">(</span>
<span class="o">></span> <span class="n">id</span> <span class="nf">int</span><span class="o">(</span><span class="mi">4</span><span class="o">)</span> <span class="n">not</span> <span class="kc">null</span> <span class="n">primary</span> <span class="n">key</span> <span class="n">auto_increment</span><span class="o">,</span>
<span class="o">></span> <span class="n">name</span> <span class="nf">char</span><span class="o">(</span><span class="mi">20</span><span class="o">)</span> <span class="n">not</span> <span class="kc">null</span><span class="o">,</span>
<span class="o">></span> <span class="n">sex</span> <span class="nf">int</span><span class="o">(</span><span class="mi">4</span><span class="o">)</span> <span class="n">not</span> <span class="kc">null</span> <span class="k">default</span> <span class="sc">'0'</span><span class="o">,</span>
<span class="o">></span> <span class="n">degree</span> <span class="nf">double</span><span class="o">(</span><span class="mi">16</span><span class="o">,</span><span class="mi">2</span><span class="o">));</span>
</code></pre></div></div>
<h1 id="52-删除数据表">5.2 删除数据表</h1>
<p>命令:**drop table <表名>**</表名></p>
<p>例如:删除表名为 MyClass 的表</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">mysql</span><span class="o">></span> <span class="n">drop</span> <span class="n">table</span> <span class="n">MyClass</span><span class="o">;</span>
</code></pre></div></div>
<p>DROP TABLE用于取消一个或多个表。您必须有每个表的DROP权限。所有的表数据和表定义会被取消,所以使用本语句要小</p>
<p>心!</p>
<p>注意:对于一个带分区的表,DROP TABLE会永久性地取消表定义,取消各分区,并取消储存在这些分区中的所有数据。DROP</p>
<p>TABLE还会取消与被取消的表有关联的分区定义(.par)文件。</p>
<p>对与不存在的表,使用IF EXISTS用于防止错误发生。当使用IF EXISTS时,对于每个不存在的表,会生成一个NOTE。</p>
<p>RESTRICT和CASCADE可以使分区更容易。目前,RESTRICT和CASCADE不起作用。</p>
<h1 id="53-表插入数据">5.3 表插入数据</h1>
<p>命令:**insert into <表名> [( <字段名1>[,..<字段名n> ])] values ( 值1 )[, ( 值n )]**</字段名n></字段名1></表名></p>
<p>例如:往表 MyClass中插入二条记录, 这二条记录表示:编号为1的名为Tom的成绩为96.45, 编号为2 的名为Joan 的成绩为</p>
<p>82.99, 编号为3 的名为Wang 的成绩为96.5。</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">mysql</span><span class="o">></span> <span class="n">insert</span> <span class="n">into</span> <span class="n">MyClass</span> <span class="nf">values</span><span class="o">(</span><span class="mi">1</span><span class="o">,</span><span class="err">'</span><span class="n">Tom</span><span class="err">'</span><span class="o">,</span><span class="mf">96.45</span><span class="o">),(</span><span class="mi">2</span><span class="o">,</span><span class="err">'</span><span class="n">Joan</span><span class="err">'</span><span class="o">,</span><span class="mf">82.99</span><span class="o">),</span> <span class="o">(</span><span class="mi">2</span><span class="o">,</span><span class="err">'</span><span class="n">Wang</span><span class="err">'</span><span class="o">,</span> <span class="mf">96.59</span><span class="o">);</span>
</code></pre></div></div>
<p>注意:insert into每次只能向表中插入一条记录。</p>
<h1 id="54-查询表中的数据">5.4 查询表中的数据</h1>
<p>1)、查询所有行</p>
<p>命令: <strong>select <字段1,字段2,…> from < 表名 > where < 表达式 ></strong></p>
<p>例如:查看表 MyClass 中所有数据</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">mysql</span><span class="o">></span> <span class="n">select</span> <span class="o">*</span> <span class="n">from</span> <span class="n">MyClass</span><span class="o">;</span>
</code></pre></div></div>
<p>2)、查询前几行数据</p>
<p>例如:查看表 MyClass 中前2行数据</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">mysql</span><span class="o">></span> <span class="n">select</span> <span class="o">*</span> <span class="n">from</span> <span class="n">MyClass</span> <span class="n">order</span> <span class="n">by</span> <span class="n">id</span> <span class="n">limit</span> <span class="mi">0</span><span class="o">,</span><span class="mi">2</span><span class="o">;</span>
</code></pre></div></div>
<p>select一般配合where使用,以查询更精确更复杂的数据。</p>
<h1 id="55-删除表中数据">5.5 删除表中数据</h1>
<p>命令:<strong>delete from 表名 where 表达式</strong></p>
<p>例如:删除表 MyClass中编号为1 的记录</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">mysql</span><span class="o">></span> <span class="n">delete</span> <span class="n">from</span> <span class="n">MyClass</span> <span class="n">where</span> <span class="n">id</span><span class="o">=</span><span class="mi">1</span><span class="o">;</span>
</code></pre></div></div>
<p>下面是一个删除数据前后表的对比。</p>
<p>FirstName LastName Age</p>
<p>Peter Griffin 35</p>
<p>Glenn Quagmire 33</p>
<p>下面以PHP代码为例删除 “Persons” 表中所有 LastName=’Griffin’ 的记录:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="o"><?</span><span class="n">php</span>
<span class="n">$con</span> <span class="o">=</span> <span class="n">mysql_connect</span><span class="o">(</span><span class="s">"localhost"</span><span class="o">,</span><span class="s">"peter"</span><span class="o">,</span><span class="s">"abc123"</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(!</span><span class="n">$con</span><span class="o">)</span>
<span class="o">{</span>
<span class="n">die</span><span class="o">(</span><span class="err">'</span><span class="n">Could</span> <span class="n">not</span> <span class="nl">connect:</span> <span class="err">'</span> <span class="o">.</span> <span class="n">mysql_error</span><span class="o">());</span>
<span class="o">}</span>
<span class="n">mysql_select_db</span><span class="o">(</span><span class="s">"my_db"</span><span class="o">,</span> <span class="n">$con</span><span class="o">);</span>
<span class="n">mysql_query</span><span class="o">(</span><span class="s">"DELETE FROM Persons WHERE LastName='Griffin'"</span><span class="o">);</span> <span class="n">mysql_close</span><span class="o">(</span><span class="n">$con</span><span class="o">);</span>
<span class="o">?></span>
</code></pre></div></div>
<p>在这次删除之后,表是这样的:
FirstName LastName Age
Glenn Quagmire 33</p>
<h1 id="56-修改表中数据">5.6 修改表中数据</h1>
<p>语法:<strong>update 表名 set 字段=新值,… where 条件</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">mysql</span><span class="o">></span> <span class="n">update</span> <span class="n">MyClass</span> <span class="n">set</span> <span class="n">name</span><span class="o">=</span><span class="err">'</span><span class="n">Mary</span><span class="err">'</span> <span class="n">where</span> <span class="n">id</span><span class="o">=</span><span class="mi">1</span><span class="o">;</span>
</code></pre></div></div>
<p>例子1:单表的MySQL UPDATE语句:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">UPDATE</span> <span class="o">[</span><span class="n">LOW_PRIORITY</span><span class="o">]</span> <span class="o">[</span><span class="n">IGNORE</span><span class="o">]</span> <span class="n">tbl_name</span> <span class="n">SET</span> <span class="n">col_name1</span><span class="o">=</span><span class="n">expr1</span> <span class="o">[,</span> <span class="n">col_name2</span><span class="o">=</span><span class="n">expr2</span> <span class="o">...]</span> <span class="o">[</span><span class="n">WHERE</span> <span class="n">where_definition</span><span class="o">]</span> <span class="o">[</span><span class="n">ORDER</span> <span class="n">BY</span> <span class="o">...]</span> <span class="o">[</span><span class="n">LIMIT</span> <span class="n">row_count</span><span class="o">]</span>
</code></pre></div></div>
<p>例子2:多表的UPDATE语句:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">UPDATE</span> <span class="o">[</span><span class="n">LOW_PRIORITY</span><span class="o">]</span> <span class="o">[</span><span class="n">IGNORE</span><span class="o">]</span> <span class="n">table_references</span> <span class="n">SET</span> <span class="n">col_name1</span><span class="o">=</span><span class="n">expr1</span> <span class="o">[,</span> <span class="n">col_name2</span><span class="o">=</span><span class="n">expr2</span> <span class="o">...]</span> <span class="o">[</span><span class="n">WHERE</span> <span class="n">where_definition</span><span class="o">]</span>
</code></pre></div></div>
<p>UPDATE语法可以用新值更新原有表行中的各列。SET子句指示要修改哪些列和要给予哪些值。WHERE子句指定应更新哪些行。</p>
<p>如果没有WHERE子句,则更新所有的行。如果指定了ORDER BY子句,则按照被指定的顺序对行进行更新。LIMIT子句用于给定</p>
<p>一个限值,限制可以被更新的行的数目。</p>
<h1 id="57-增加字段">5.7 增加字段</h1>
<p>命令:<strong>alter table 表名 add字段 类型 其他;</strong></p>
<p>例如:在表MyClass中添加了一个字段passtest,类型为int(4),默认值为0</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">mysql</span><span class="o">></span> <span class="n">alter</span> <span class="n">table</span> <span class="n">MyClass</span> <span class="n">add</span> <span class="n">passtest</span> <span class="nf">int</span><span class="o">(</span><span class="mi">4</span><span class="o">)</span> <span class="k">default</span> <span class="sc">'0'</span>
</code></pre></div></div>
<p><strong>加索引</strong></p>
<p>mysql> alter table 表名 add index 索引名 (字段名1[,字段名2 …]);
例子: mysql> alter table employee add index emp_name (name);</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="err">加主关键字的索引</span>
<span class="n">mysql</span><span class="o">></span> <span class="n">alter</span> <span class="n">table</span> <span class="err">表名</span> <span class="n">add</span> <span class="n">primary</span> <span class="nf">key</span> <span class="o">(</span><span class="err">字段名</span><span class="o">);</span>
<span class="err">例子:</span> <span class="n">mysql</span><span class="o">></span> <span class="n">alter</span> <span class="n">table</span> <span class="n">employee</span> <span class="n">add</span> <span class="n">primary</span> <span class="nf">key</span><span class="o">(</span><span class="n">id</span><span class="o">);</span>
<span class="err">加唯一限制条件的索引</span>
<span class="n">mysql</span><span class="o">></span> <span class="n">alter</span> <span class="n">table</span> <span class="err">表名</span> <span class="n">add</span> <span class="n">unique</span> <span class="err">索引名</span> <span class="o">(</span><span class="err">字段名</span><span class="o">);</span>
<span class="err">例子:</span> <span class="n">mysql</span><span class="o">></span> <span class="n">alter</span> <span class="n">table</span> <span class="n">employee</span> <span class="n">add</span> <span class="n">unique</span> <span class="nf">emp_name2</span><span class="o">(</span><span class="n">cardnumber</span><span class="o">);</span>
<span class="err">删除某个索引</span>
<span class="n">mysql</span><span class="o">></span> <span class="n">alter</span> <span class="n">table</span> <span class="err">表名</span> <span class="n">drop</span> <span class="n">index</span> <span class="err">索引名</span><span class="o">;</span>
<span class="err">例子:</span> <span class="n">mysql</span><span class="o">></span><span class="n">alter</span> <span class="n">table</span> <span class="n">employee</span> <span class="n">drop</span> <span class="n">index</span> <span class="n">emp_name</span><span class="o">;</span>
<span class="err">增加字段:</span>
<span class="n">mysql</span><span class="o">></span> <span class="n">ALTER</span> <span class="n">TABLE</span> <span class="n">table_name</span> <span class="n">ADD</span> <span class="n">field_name</span> <span class="n">field_type</span><span class="o">;</span>
<span class="err">修改原字段名称及类型:</span>
<span class="n">mysql</span><span class="o">></span> <span class="n">ALTER</span> <span class="n">TABLE</span> <span class="n">table_name</span> <span class="n">CHANGE</span> <span class="n">old_field_name</span> <span class="n">new_field_name</span> <span class="n">field_type</span><span class="o">;</span>
<span class="err">删除字段:</span>
<span class="n">MySQL</span> <span class="n">ALTER</span> <span class="n">TABLE</span> <span class="n">table_name</span> <span class="n">DROP</span> <span class="n">field_name</span><span class="o">;</span>
</code></pre></div></div>
<h1 id="58-修改表名">5.8 修改表名</h1>
<p>命令:<strong>rename table 原表名 to 新表名;</strong></p>
<p>例如:在表MyClass名字更改为YouClass</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">mysql</span><span class="o">></span> <span class="n">rename</span> <span class="n">table</span> <span class="n">MyClass</span> <span class="n">to</span> <span class="n">YouClass</span><span class="o">;</span>
</code></pre></div></div>
<p>当你执行 RENAME 时,你不能有任何锁定的表或活动的事务。你同样也必须有对原初表的 ALTER 和 DROP 权限,以及对新表的</p>
<p>CREATE 和 INSERT 权限。</p>
<p>如果在多表更名中,MySQL 遭遇到任何错误,它将对所有被更名的表进行倒退更名,将每件事物退回到最初状态。</p>
<p>RENAME TABLE 在 MySQL 3.23.23 中被加入。</p>
<h1 id="6备份数据库">6、备份数据库</h1>
<p><strong>命令在DOS的[url=file://\mysql\bin]\mysql\bin[/url]目录下执行</strong></p>
<p>1.导出整个数据库</p>
<p>导出文件默认是存在mysql\bin目录下</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">mysqldump</span> <span class="o">-</span><span class="n">u</span> <span class="err">用户名</span> <span class="o">-</span><span class="n">p</span> <span class="err">数据库名</span> <span class="o">></span> <span class="err">导出的文件名</span>
<span class="n">mysqldump</span> <span class="o">-</span><span class="n">u</span> <span class="n">user_name</span> <span class="o">-</span><span class="n">p123456</span> <span class="n">database_name</span> <span class="o">></span> <span class="n">outfile_name</span><span class="o">.</span><span class="na">sql</span>
</code></pre></div></div>
<p>2.导出一个表</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">mysqldump</span> <span class="o">-</span><span class="n">u</span> <span class="err">用户名</span> <span class="o">-</span><span class="n">p</span> <span class="err">数据库名</span> <span class="err">表名</span><span class="o">></span> <span class="err">导出的文件名</span>
<span class="n">mysqldump</span> <span class="o">-</span><span class="n">u</span> <span class="n">user_name</span> <span class="o">-</span><span class="n">p</span> <span class="n">database_name</span> <span class="n">table_name</span> <span class="o">></span> <span class="n">outfile_name</span><span class="o">.</span><span class="na">sql</span>
</code></pre></div></div>
<p>3.导出一个数据库结构</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">mysqldump</span> <span class="o">-</span><span class="n">u</span> <span class="n">user_name</span> <span class="o">-</span><span class="n">p</span> <span class="o">-</span><span class="n">d</span> <span class="err">–</span><span class="n">add</span><span class="o">-</span><span class="n">drop</span><span class="o">-</span><span class="n">table</span> <span class="n">database_name</span> <span class="o">></span> <span class="n">outfile_name</span><span class="o">.</span><span class="na">sql</span>
<span class="o">-</span><span class="n">d</span> <span class="err">没有数据</span> <span class="err">–</span><span class="n">add</span><span class="o">-</span><span class="n">drop</span><span class="o">-</span><span class="n">table</span> <span class="err">在每个</span><span class="n">create</span><span class="err">语句之前增加一个</span><span class="n">drop</span> <span class="n">table</span>
</code></pre></div></div>
<p>4.带语言参数导出</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">mysqldump</span> <span class="o">-</span><span class="n">uroot</span> <span class="o">-</span><span class="n">p</span> <span class="err">–</span><span class="k">default</span><span class="o">-</span><span class="n">character</span><span class="o">-</span><span class="n">set</span><span class="o">=</span><span class="n">latin1</span> <span class="err">–</span><span class="n">set</span><span class="o">-</span><span class="n">charset</span><span class="o">=</span><span class="n">gbk</span> <span class="err">–</span><span class="n">skip</span><span class="o">-</span><span class="n">opt</span> <span class="n">database_name</span> <span class="o">></span> <span class="n">outfile_name</span><span class="o">.</span><span class="na">sql</span>
</code></pre></div></div>
<p>例如,将aaa库备份到文件back_aaa中:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err"> </span><span class="o">[</span><span class="n">root</span><span class="nd">@test1</span> <span class="n">root</span><span class="o">]</span><span class="err">#</span> <span class="n">cd</span><span class="err"> </span><span class="o">/</span><span class="n">home</span><span class="o">/</span><span class="n">data</span><span class="o">/</span><span class="n">mysql</span>
<span class="err"> </span><span class="o">[</span><span class="n">root</span><span class="nd">@test1</span> <span class="n">mysql</span><span class="o">]</span><span class="err">#</span> <span class="n">mysqldump</span> <span class="o">-</span><span class="n">u</span> <span class="n">root</span> <span class="o">-</span><span class="n">p</span> <span class="o">--</span><span class="n">opt</span> <span class="n">aaa</span> <span class="o">></span> <span class="n">back_aaa</span>
</code></pre></div></div>
<h1 id="71-一个建库和建表的实例1">7.1 一个建库和建表的实例1</h1>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">drop</span> <span class="n">database</span> <span class="k">if</span> <span class="n">exists</span> <span class="n">school</span><span class="o">;</span> <span class="c1">//如果存在SCHOOL则删除</span>
<span class="n">create</span> <span class="n">database</span> <span class="n">school</span><span class="o">;</span> <span class="c1">//建立库SCHOOL</span>
<span class="n">use</span> <span class="n">school</span><span class="o">;</span> <span class="c1">//打开库SCHOOL</span>
<span class="n">create</span> <span class="n">table</span> <span class="n">teacher</span> <span class="c1">//建立表TEACHER</span>
<span class="o">(</span>
<span class="n">id</span> <span class="nf">int</span><span class="o">(</span><span class="mi">3</span><span class="o">)</span> <span class="n">auto_increment</span> <span class="n">not</span> <span class="kc">null</span> <span class="n">primary</span> <span class="n">key</span><span class="o">,</span>
<span class="n">name</span> <span class="nf">char</span><span class="o">(</span><span class="mi">10</span><span class="o">)</span> <span class="n">not</span> <span class="kc">null</span><span class="o">,</span>
<span class="n">address</span> <span class="nf">varchar</span><span class="o">(</span><span class="mi">50</span><span class="o">)</span> <span class="k">default</span> <span class="err">‘深圳’</span><span class="o">,</span>
<span class="n">year</span> <span class="n">date</span>
<span class="o">);</span> <span class="c1">//建表结束</span>
<span class="c1">//以下为插入字段</span>
<span class="n">insert</span> <span class="n">into</span> <span class="n">teacher</span> <span class="nf">values</span><span class="o">(</span><span class="err">”</span><span class="o">,</span><span class="err">’</span><span class="n">allen</span><span class="err">’</span><span class="o">,</span><span class="err">'大连一中’</span><span class="o">,</span><span class="err">'</span><span class="mi">1976</span><span class="o">-</span><span class="mi">10</span><span class="o">-</span><span class="mi">10</span><span class="err">′</span><span class="o">);</span>
<span class="n">insert</span> <span class="n">into</span> <span class="n">teacher</span> <span class="nf">values</span><span class="o">(</span><span class="err">”</span><span class="o">,</span><span class="err">’</span><span class="n">jack</span><span class="err">’</span><span class="o">,</span><span class="err">'大连二中’</span><span class="o">,</span><span class="err">'</span><span class="mi">1975</span><span class="o">-</span><span class="mi">12</span><span class="o">-</span><span class="mi">23</span><span class="err">′</span><span class="o">);</span>
</code></pre></div></div>
<p>如果你在mysql提示符键入上面的命令也可以,但不方便调试。</p>
<p>1、你可以将以上命令原样写入一个文本文件中,假设为school.sql,然后复制到c:\下,并在DOS状态进入目录</p>
<p>[url=file://\mysql\bin]\mysql\bin[/url],然后键入以下命令:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">mysql</span> <span class="o">-</span><span class="n">uroot</span> <span class="o">-</span><span class="n">p</span><span class="err">密码</span> <span class="o"><</span> <span class="nl">c:</span><span class="err">\\</span><span class="n">school</span><span class="o">.</span><span class="na">sql</span>
</code></pre></div></div>
<p>如果成功,空出一行无任何显示;如有错误,会有提示。(以上命令已经调试,你只要将//的注释去掉即可使用)。</p>
<p>2、或者进入命令行后使用 mysql> source c:\school.sql; 也可以将school.sql文件导入数据库中。</p>
<h1 id="72-一个建库和建表的实例2">7.2 一个建库和建表的实例2</h1>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">drop</span> <span class="n">database</span> <span class="k">if</span> <span class="n">exists</span> <span class="n">school</span><span class="o">;</span> <span class="c1">//如果存在SCHOOL则删除</span>
<span class="n">create</span> <span class="n">database</span> <span class="n">school</span><span class="o">;</span> <span class="c1">//建立库SCHOOL</span>
<span class="n">use</span> <span class="n">school</span><span class="o">;</span> <span class="c1">//打开库SCHOOL</span>
<span class="n">create</span> <span class="n">table</span> <span class="n">teacher</span> <span class="c1">//建立表TEACHER</span>
<span class="o">(</span>
<span class="n">id</span> <span class="nf">int</span><span class="o">(</span><span class="mi">3</span><span class="o">)</span> <span class="n">auto_increment</span> <span class="n">not</span> <span class="kc">null</span> <span class="n">primary</span> <span class="n">key</span><span class="o">,</span>
<span class="n">name</span> <span class="nf">char</span><span class="o">(</span><span class="mi">10</span><span class="o">)</span> <span class="n">not</span> <span class="kc">null</span><span class="o">,</span>
<span class="n">address</span> <span class="nf">varchar</span><span class="o">(</span><span class="mi">50</span><span class="o">)</span> <span class="k">default</span> <span class="err">''深圳''</span><span class="o">,</span>
<span class="n">year</span> <span class="n">date</span>
<span class="o">);</span> <span class="c1">//建表结束</span>
<span class="c1">//以下为插入字段</span>
<span class="n">insert</span> <span class="n">into</span> <span class="n">teacher</span> <span class="nf">values</span><span class="o">(</span><span class="sc">'''','</span><span class="err">'</span><span class="n">glchengang</span><span class="err">'</span><span class="sc">','</span><span class="err">'深圳一中'</span><span class="sc">','</span><span class="err">'</span><span class="mi">1976</span><span class="o">-</span><span class="mi">10</span><span class="o">-</span><span class="mi">10</span><span class="err">''</span><span class="o">);</span>
<span class="n">insert</span> <span class="n">into</span> <span class="n">teacher</span> <span class="nf">values</span><span class="o">(</span><span class="sc">'''','</span><span class="err">'</span><span class="n">jack</span><span class="err">'</span><span class="sc">','</span><span class="err">'深圳一中'</span><span class="sc">','</span><span class="err">'</span><span class="mi">1975</span><span class="o">-</span><span class="mi">12</span><span class="o">-</span><span class="mi">23</span><span class="err">''</span><span class="o">);</span>
</code></pre></div></div>
<p><strong>注:在建表中</strong></p>
<p>1、将ID设为长度为3的数字字段:int(3);并让它每个记录自动加一:auto_increment;并不能为空:not null;而且让他成为主字段primary key。</p>
<p>2、将NAME设为长度为10的字符字段</p>
<p>3、将ADDRESS设为长度50的字符字段,而且缺省值为深圳。</p>
<p>4、将YEAR设为日期字段。</p>ShineDe这是我从网上收集的一些MySQL 命令,像MySQL数据库用的多的都是一些数据库管理工具,像:phpMyAdmin、MySQLDumper、Navicat、MySQL GUI Tools 等 ,这里不一一介绍了。但是我们还是要熟悉它的命令所以写了这篇文章。Redis(String) 字符串命令集合2016-12-22T00:00:00+08:002016-12-22T00:00:00+08:00https://shinede.github.io//2016/12/22/Redis-String-command-1<p>字符串命令有一下几种:</p>
<ul>
<li>Redis SET 命令、</li>
<li>Redis Get 命令、</li>
<li>Redis Getrange 命令、</li>
<li>Redis Getset 命令、</li>
<li>Redis Getbit 命令、</li>
<li>Redis Mget 命令、</li>
<li>Redis Setbit 命令、</li>
<li>Redis Setex 命令、</li>
<li>Redis Setnx 命令、</li>
<li>Redis Setrange 命令、</li>
<li>Redis Strlen 命令、</li>
<li>Redis Mset 命令、</li>
<li>Redis Msetnx 命令、</li>
<li>Redis Psetex 命令、</li>
<li>Redis Incr 命令、</li>
<li>Redis Incrby 命令、</li>
<li>Redis Incrbyfloat 命令、</li>
<li>Redis Decr 命令、</li>
<li>Redis Decrby 命令、</li>
<li>Redis Append 命令</li>
</ul>
<!--more-->
<h1 id="redis-set-命令---设置指定-key-的值">Redis SET 命令 - 设置指定 key 的值</h1>
<p>Redis SET 命令用于设置给定 key 的值。如果 key 已经存储其他值, SET 就覆写旧值,且无视类型。</p>
<p><strong>语法</strong></p>
<p>redis SET 命令基本语法如下:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">SET</span> <span class="n">KEY_NAME</span> <span class="n">VALUE</span>
</code></pre></div></div>
<p><strong>可用版本</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">>=</span> <span class="mf">1.0</span><span class="o">.</span><span class="mi">0</span>
</code></pre></div></div>
<p><strong>返回值</strong></p>
<p>在 Redis 2.6.12 以前版本, SET 命令总是返回 OK 。</p>
<p>从 Redis 2.6.12 版本开始, SET 在设置操作成功完成时,才返回 OK 。</p>
<p><strong>实例</strong></p>
<p>首先,我们在 redis 中创建一个 key 并设置值。</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">#</span> <span class="err">对不存在的键进行设置</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">SET</span> <span class="n">key</span> <span class="s">"value"</span>
<span class="n">OK</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">GET</span> <span class="n">key</span>
<span class="s">"value"</span>
<span class="err">#</span> <span class="err">对已存在的键进行设置</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">SET</span> <span class="n">key</span> <span class="s">"new-value"</span>
<span class="n">OK</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">GET</span> <span class="n">key</span>
<span class="s">"new-value"</span>
</code></pre></div></div>
<hr />
<h1 id="redis-get-命令---获取指定-key-的值">Redis Get 命令 - 获取指定 key 的值。</h1>
<p>Redis Get 命令用于获取指定 key 的值。如果 key 不存在,返回 nil 。如果key 储存的值不是字符串类型,返回一个错误。</p>
<p><strong>语法</strong></p>
<p>redis Get 命令基本语法如下:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">GET</span> <span class="n">KEY_NAME</span>
</code></pre></div></div>
<p><strong>可用版本</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">>=</span> <span class="mf">1.0</span><span class="o">.</span><span class="mi">0</span>
</code></pre></div></div>
<p><strong>返回值</strong></p>
<p>返回 key 的值,如果 key 不存在时,返回 nil。 如果 key 不是字符串类型,那么返回一个错误。</p>
<p><strong>实例</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">#</span> <span class="err">对不存在的</span> <span class="n">key</span> <span class="err">或字符串类型</span> <span class="n">key</span> <span class="err">进行</span> <span class="n">GET</span>
<span class="n">redis</span><span class="o">></span> <span class="n">GET</span> <span class="nf">db</span>
<span class="o">(</span><span class="n">nil</span><span class="o">)</span>
<span class="n">redis</span><span class="o">></span> <span class="n">SET</span> <span class="n">db</span> <span class="n">redis</span>
<span class="n">OK</span>
<span class="n">redis</span><span class="o">></span> <span class="n">GET</span> <span class="n">db</span>
<span class="s">"redis"</span>
<span class="err">#</span> <span class="err">对不是字符串类型的</span> <span class="n">key</span> <span class="err">进行</span> <span class="n">GET</span>
<span class="n">redis</span><span class="o">></span> <span class="n">DEL</span> <span class="nf">db</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">1</span>
<span class="n">redis</span><span class="o">></span> <span class="n">LPUSH</span> <span class="n">db</span> <span class="n">redis</span> <span class="n">mongodb</span> <span class="nf">mysql</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">3</span>
<span class="n">redis</span><span class="o">></span> <span class="n">GET</span> <span class="nf">db</span>
<span class="o">(</span><span class="n">error</span><span class="o">)</span> <span class="n">ERR</span> <span class="n">Operation</span> <span class="n">against</span> <span class="n">a</span> <span class="n">key</span> <span class="n">holding</span> <span class="n">the</span> <span class="n">wrong</span> <span class="n">kind</span> <span class="n">of</span> <span class="n">value</span>
</code></pre></div></div>
<hr />
<h1 id="redis-getrange-命令---返回-key-中字符串值的子字符">Redis Getrange 命令 - 返回 key 中字符串值的子字符</h1>
<p>Redis Getrange 命令用于获取存储在指定 key 中字符串的子字符串。字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。</p>
<p><strong>语法</strong></p>
<p>redis Getrange 命令基本语法如下:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">GETRANGE</span> <span class="n">KEY_NAME</span> <span class="n">start</span> <span class="n">end</span>
</code></pre></div></div>
<p><strong>可用版本</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">>=</span> <span class="mf">2.4</span><span class="o">.</span><span class="mi">0</span>
</code></pre></div></div>
<p><strong>返回值</strong></p>
<p>截取得到的子字符串。</p>
<p><strong>实例</strong></p>
<p>首先,设置 mykey 的值并截取字符串。</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">SET</span> <span class="n">mykey</span> <span class="s">"This is my test key"</span>
<span class="n">OK</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">GETRANGE</span> <span class="n">mykey</span> <span class="mi">0</span> <span class="mi">3</span>
<span class="s">"This"</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">GETRANGE</span> <span class="n">mykey</span> <span class="mi">0</span> <span class="o">-</span><span class="mi">1</span>
<span class="s">"This is my test key"</span>
</code></pre></div></div>
<hr />
<h1 id="redis-getset-命令---将给定-key-的值设为-value-并返回-key-的旧值old-value">Redis Getset 命令 - 将给定 key 的值设为 value ,并返回 key 的旧值(old value)。</h1>
<p>Redis Getset 命令用于设置指定 key 的值,并返回 key 旧的值。</p>
<p><strong>语法</strong></p>
<p>redis Getset 命令基本语法如下:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">GETSET</span> <span class="n">KEY_NAME</span> <span class="n">VALUE</span>
</code></pre></div></div>
<p><strong>可用版本</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">>=</span> <span class="mf">1.0</span><span class="o">.</span><span class="mi">0</span>
</code></pre></div></div>
<p><strong>返回值</strong></p>
<p>返回给定 key 的旧值。 当 key 没有旧值时,即 key 不存在时,返回 nil 。</p>
<p>当 key 存在但不是字符串类型时,返回一个错误。</p>
<p><strong>实例</strong></p>
<p>首先,设置 mykey 的值并截取字符串。</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">GETSET</span> <span class="n">mynewkey</span> <span class="s">"This is my test key"</span>
<span class="o">(</span><span class="n">nil</span><span class="o">)</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">GETSET</span> <span class="n">mynewkey</span> <span class="s">"This is my new value to test getset"</span>
<span class="s">"This is my test key"</span>
</code></pre></div></div>
<hr />
<h1 id="redis-getbit-命令---对-key-所储存的字符串值获取指定偏移量上的位bit">Redis Getbit 命令 - 对 key 所储存的字符串值,获取指定偏移量上的位(bit)。</h1>
<p>Redis Getbit 命令用于对 key 所储存的字符串值,获取指定偏移量上的位(bit)。</p>
<p><strong>语法</strong></p>
<p>redis Getbit 命令基本语法如下:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">GETBIT</span> <span class="n">KEY_NAME</span> <span class="n">OFFSET</span>
</code></pre></div></div>
<p><strong>可用版本</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">>=</span> <span class="mf">2.2</span><span class="o">.</span><span class="mi">0</span>
</code></pre></div></div>
<p><strong>返回值</strong></p>
<p>字符串值指定偏移量上的位(bit)。</p>
<p>当偏移量 OFFSET 比字符串值的长度大,或者 key 不存在时,返回 0 。</p>
<p><strong>实例</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">#</span> <span class="err">对不存在的</span> <span class="n">key</span> <span class="err">或者不存在的</span> <span class="n">offset</span> <span class="err">进行</span> <span class="n">GETBIT</span><span class="err">,</span> <span class="err">返回</span> <span class="mi">0</span>
<span class="n">redis</span><span class="o">></span> <span class="n">EXISTS</span> <span class="nf">bit</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">0</span>
<span class="n">redis</span><span class="o">></span> <span class="n">GETBIT</span> <span class="n">bit</span> <span class="mi">10086</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">0</span>
<span class="err">#</span> <span class="err">对已存在的</span> <span class="n">offset</span> <span class="err">进行</span> <span class="n">GETBIT</span>
<span class="n">redis</span><span class="o">></span> <span class="n">SETBIT</span> <span class="n">bit</span> <span class="mi">10086</span> <span class="mi">1</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">0</span>
<span class="n">redis</span><span class="o">></span> <span class="n">GETBIT</span> <span class="n">bit</span> <span class="mi">10086</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">1</span>
</code></pre></div></div>
<hr />
<h1 id="redis-mget-命令---获取所有一个或多个给定-key-的值">Redis Mget 命令 - 获取所有(一个或多个)给定 key 的值。</h1>
<p>Redis Mget 命令返回所有(一个或多个)给定 key 的值。 如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。</p>
<p><strong>语法</strong></p>
<p>redis Mget 命令基本语法如下:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">MGET</span> <span class="n">KEY1</span> <span class="n">KEY2</span> <span class="o">..</span> <span class="n">KEYN</span>
</code></pre></div></div>
<p><strong>可用版本</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">>=</span> <span class="mf">1.0</span><span class="o">.</span><span class="mi">0</span>
</code></pre></div></div>
<p><strong>返回值</strong></p>
<p>一个包含所有给定 key 的值的列表。</p>
<p><strong>实例</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">SET</span> <span class="n">key1</span> <span class="s">"hello"</span>
<span class="n">OK</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">SET</span> <span class="n">key2</span> <span class="s">"world"</span>
<span class="n">OK</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">MGET</span> <span class="n">key1</span> <span class="n">key2</span> <span class="n">someOtherKey</span>
<span class="mi">1</span><span class="o">)</span> <span class="s">"Hello"</span>
<span class="mi">2</span><span class="o">)</span> <span class="s">"World"</span>
<span class="mi">3</span><span class="o">)</span> <span class="o">(</span><span class="n">nil</span><span class="o">)</span>
</code></pre></div></div>
<hr />
<h1 id="redis-setbit-命令---对-key-所储存的字符串值设置或清除指定偏移量上的位bit">Redis Setbit 命令 - 对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。</h1>
<p>Redis Setbit 命令用于对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。</p>
<p><strong>语法</strong></p>
<p>redis Setbit 命令基本语法如下:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">Setbit</span> <span class="n">KEY_NAME</span> <span class="n">OFFSET</span>
</code></pre></div></div>
<p><strong>可用版本</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">>=</span> <span class="mf">2.2</span><span class="o">.</span><span class="mi">0</span>
</code></pre></div></div>
<p><strong>返回值</strong></p>
<p>指定偏移量原来储存的位。</p>
<p><strong>实例</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span><span class="o">></span> <span class="n">SETBIT</span> <span class="n">bit</span> <span class="mi">10086</span> <span class="mi">1</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">0</span>
<span class="n">redis</span><span class="o">></span> <span class="n">GETBIT</span> <span class="n">bit</span> <span class="mi">10086</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">1</span>
<span class="n">redis</span><span class="o">></span> <span class="n">GETBIT</span> <span class="n">bit</span> <span class="mi">100</span> <span class="err">#</span> <span class="n">bit</span> <span class="err">默认被初始化为</span> <span class="mi">0</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">0</span>
</code></pre></div></div>
<hr />
<h1 id="redis-setex-命令---将值-value-关联到-key-并将-key-的过期时间设为-seconds-以秒为单位">Redis Setex 命令 - 将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。</h1>
<p>Redis Setex 命令为指定的 key 设置值及其过期时间。如果 key 已经存在, SETEX 命令将会替换旧的值。</p>
<p><strong>语法</strong></p>
<p>redis Setex 命令基本语法如下:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">SETEX</span> <span class="n">KEY_NAME</span> <span class="n">TIMEOUT</span> <span class="n">VALUE</span>
</code></pre></div></div>
<p><strong>可用版本</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">>=</span> <span class="mf">2.0</span><span class="o">.</span><span class="mi">0</span>
</code></pre></div></div>
<p><strong>返回值</strong></p>
<p>设置成功时返回 OK 。</p>
<p><strong>实例</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">SETEX</span> <span class="n">mykey</span> <span class="mi">60</span> <span class="n">redis</span>
<span class="n">OK</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">TTL</span> <span class="n">mykey</span>
<span class="mi">60</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">GET</span> <span class="n">mykey</span>
<span class="err">"</span><span class="n">redis</span>
</code></pre></div></div>
<hr />
<h1 id="redis-setnx-命令---只有在-key-不存在时设置-key-的值">Redis Setnx 命令 - 只有在 key 不存在时设置 key 的值。</h1>
<p>Redis Setnx(SET if Not eXists) 命令在指定的 key 不存在时,为 key 设置指定的值。</p>
<p><strong>语法</strong></p>
<p>redis Setnx 命令基本语法如下:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">SETNX</span> <span class="n">KEY_NAME</span> <span class="n">VALUE</span>
</code></pre></div></div>
<p><strong>可用版本</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">>=</span> <span class="mf">1.0</span><span class="o">.</span><span class="mi">0</span>
</code></pre></div></div>
<p><strong>返回值</strong></p>
<p>设置成功,返回 1 。 设置失败,返回 0 。</p>
<p><strong>实例</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span><span class="o">></span> <span class="n">EXISTS</span> <span class="n">job</span> <span class="err">#</span> <span class="n">job</span> <span class="err">不存在</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">0</span>
<span class="n">redis</span><span class="o">></span> <span class="n">SETNX</span> <span class="n">job</span> <span class="s">"programmer"</span> <span class="err">#</span> <span class="n">job</span> <span class="err">设置成功</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">1</span>
<span class="n">redis</span><span class="o">></span> <span class="n">SETNX</span> <span class="n">job</span> <span class="s">"code-farmer"</span> <span class="err">#</span> <span class="err">尝试覆盖</span> <span class="n">job</span> <span class="err">,失败</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">0</span>
<span class="n">redis</span><span class="o">></span> <span class="n">GET</span> <span class="n">job</span> <span class="err">#</span> <span class="err">没有被覆盖</span>
<span class="s">"programmer"</span>
</code></pre></div></div>
<hr />
<h1 id="redis-setrange-命令---用-value-参数覆写给定-key-所储存的字符串值从偏移量-offset-开始">Redis Setrange 命令 - 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。</h1>
<p>Redis Setrange 命令用指定的字符串覆盖给定 key 所储存的字符串值,覆盖的位置从偏移量 offset 开始。</p>
<p><strong>语法</strong></p>
<p>redis Setrange 命令基本语法如下:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">SETRANGE</span> <span class="n">KEY_NAME</span> <span class="n">OFFSET</span> <span class="n">VALUE</span>
</code></pre></div></div>
<p><strong>可用版本</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">>=</span> <span class="mf">2.2</span><span class="o">.</span><span class="mi">0</span>
</code></pre></div></div>
<p><strong>返回</strong></p>
<p>被修改后的字符串长度。</p>
<p><strong>实例</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">SET</span> <span class="n">key1</span> <span class="s">"Hello World"</span>
<span class="n">OK</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">SETRANGE</span> <span class="n">key1</span> <span class="mi">6</span> <span class="s">"Redis"</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">11</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">GET</span> <span class="n">key1</span>
<span class="s">"Hello Redis"</span>
</code></pre></div></div>
<hr />
<h1 id="redis-strlen-命令---返回-key-所储存的字符串值的长度">Redis Strlen 命令 - 返回 key 所储存的字符串值的长度。</h1>
<p>Redis Strlen 命令用于获取指定 key 所储存的字符串值的长度。当 key 储存的不是字符串值时,返回一个错误。</p>
<p><strong>语法</strong></p>
<p>redis Strlen 命令基本语法如下:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">STRLEN</span> <span class="n">KEY_NAME</span>
</code></pre></div></div>
<p><strong>可用版本</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">>=</span> <span class="mf">2.2</span><span class="o">.</span><span class="mi">0</span>
</code></pre></div></div>
<p><strong>返回值</strong></p>
<p>字符串值的长度。 当 key 不存在时,返回 0。</p>
<p><strong>实例</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">#</span> <span class="err">获取字符串的长度</span>
<span class="n">redis</span><span class="o">></span> <span class="n">SET</span> <span class="n">mykey</span> <span class="s">"Hello world"</span>
<span class="n">OK</span>
<span class="n">redis</span><span class="o">></span> <span class="n">STRLEN</span> <span class="nf">mykey</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">11</span>
<span class="err">#</span> <span class="err">不存在的</span> <span class="n">key</span> <span class="err">长度为</span> <span class="mi">0</span>
<span class="n">redis</span><span class="o">></span> <span class="n">STRLEN</span> <span class="nf">nonexisting</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">0</span>
</code></pre></div></div>
<hr />
<h1 id="redis-mset-命令---同时设置一个或多个-key-value-对">Redis Mset 命令 - 同时设置一个或多个 key-value 对。</h1>
<p>Redis Mset 命令用于同时设置一个或多个 key-value 对。</p>
<p><strong>语法</strong></p>
<p>redis Mset 命令基本语法如下:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">MSET</span> <span class="n">key1</span> <span class="n">value1</span> <span class="n">key2</span> <span class="n">value2</span> <span class="o">..</span> <span class="n">keyN</span> <span class="n">valueN</span>
</code></pre></div></div>
<p><strong>可用版本</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">>=</span> <span class="mf">1.0</span><span class="o">.</span><span class="mi">1</span>
</code></pre></div></div>
<p><strong>返回值</strong></p>
<p>总是返回 OK 。</p>
<p><strong>实例</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">MSET</span> <span class="n">key1</span> <span class="s">"Hello"</span> <span class="n">key2</span> <span class="s">"World"</span>
<span class="n">OK</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">GET</span> <span class="n">key1</span>
<span class="s">"Hello"</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">GET</span> <span class="n">key2</span>
<span class="mi">1</span><span class="o">)</span> <span class="s">"World"</span>
</code></pre></div></div>
<hr />
<h1 id="redis-msetnx-命令---同时设置一个或多个-key-value-对当且仅当所有给定-key-都不存在">Redis Msetnx 命令 - 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。</h1>
<p>Redis Msetnx 命令用于所有给定 key 都不存在时,同时设置一个或多个 key-value 对。</p>
<p><strong>语法</strong></p>
<p>redis Msetnx 命令基本语法如下:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">MSETNX</span> <span class="n">key1</span> <span class="n">value1</span> <span class="n">key2</span> <span class="n">value2</span> <span class="o">..</span> <span class="n">keyN</span> <span class="n">valueN</span>
</code></pre></div></div>
<p><strong>可用版本</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">>=</span> <span class="mf">1.0</span><span class="o">.</span><span class="mi">1</span>
</code></pre></div></div>
<p><strong>返回值</strong></p>
<p>当所有 key 都成功设置,返回 1 。 如果所有给定 key 都设置失败(至少有一个 key 已经存在),那么返回 0 。</p>
<p><strong>实例</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">#</span> <span class="err">对不存在的</span> <span class="n">key</span> <span class="err">进行</span> <span class="n">MSETNX</span>
<span class="n">redis</span><span class="o">></span> <span class="n">MSETNX</span> <span class="n">rmdbs</span> <span class="s">"MySQL"</span> <span class="n">nosql</span> <span class="s">"MongoDB"</span> <span class="n">key</span><span class="o">-</span><span class="n">value</span><span class="o">-</span><span class="n">store</span> <span class="s">"redis"</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">1</span>
<span class="n">redis</span><span class="o">></span> <span class="n">MGET</span> <span class="n">rmdbs</span> <span class="n">nosql</span> <span class="n">key</span><span class="o">-</span><span class="n">value</span><span class="o">-</span><span class="n">store</span>
<span class="mi">1</span><span class="o">)</span> <span class="s">"MySQL"</span>
<span class="mi">2</span><span class="o">)</span> <span class="s">"MongoDB"</span>
<span class="mi">3</span><span class="o">)</span> <span class="s">"redis"</span>
<span class="err">#</span> <span class="n">MSET</span> <span class="err">的给定</span> <span class="n">key</span> <span class="err">当中有已存在的</span> <span class="n">key</span>
<span class="n">redis</span><span class="o">></span> <span class="n">MSETNX</span> <span class="n">rmdbs</span> <span class="s">"Sqlite"</span> <span class="n">language</span> <span class="s">"python"</span> <span class="err">#</span> <span class="n">rmdbs</span> <span class="err">键已经存在,操作失败</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">0</span>
<span class="n">redis</span><span class="o">></span> <span class="n">EXISTS</span> <span class="n">language</span> <span class="err">#</span> <span class="err">因为</span> <span class="n">MSET</span> <span class="err">是原子性操作,</span><span class="n">language</span> <span class="err">没有被设置</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">0</span>
<span class="n">redis</span><span class="o">></span> <span class="n">GET</span> <span class="n">rmdbs</span> <span class="err">#</span> <span class="n">rmdbs</span> <span class="err">也没有被修改</span>
<span class="s">"MySQL"</span>
</code></pre></div></div>
<hr />
<h1 id="redis-psetex-命令---这个命令和-setex-命令相似但它以毫秒为单位设置-key-的生存时间而不是像-setex-命令那样以秒为单位">Redis Psetex 命令 - 这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。</h1>
<p>Redis Psetex 命令以毫秒为单位设置 key 的生存时间。</p>
<p><strong>语法</strong></p>
<p>redis Psetex 命令基本语法如下:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">PSETEX</span> <span class="n">key1</span> <span class="n">EXPIRY_IN_MILLISECONDS</span> <span class="n">value1</span>
</code></pre></div></div>
<p><strong>可用版本</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">>=</span> <span class="mf">2.6</span><span class="o">.</span><span class="mi">0</span>
</code></pre></div></div>
<p><strong>返回值</strong></p>
<p>设置成功时返回 OK 。</p>
<p><strong>实例</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">PSETEX</span> <span class="n">mykey</span> <span class="mi">1000</span> <span class="s">"Hello"</span>
<span class="n">OK</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">PTTL</span> <span class="n">mykey</span>
<span class="mi">999</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">GET</span> <span class="n">mykey</span>
<span class="mi">1</span><span class="o">)</span> <span class="s">"Hello"</span>
</code></pre></div></div>
<hr />
<h1 id="redis-incr-命令---将-key-中储存的数字值增一">Redis Incr 命令 - 将 key 中储存的数字值增一。</h1>
<p>Redis Incr 命令将 key 中储存的数字值增一。</p>
<p>如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。</p>
<p>如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。</p>
<p>本操作的值限制在 64 位(bit)有符号数字表示之内。</p>
<p><strong>语法</strong></p>
<p>redis Incr 命令基本语法如下:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">INCR</span> <span class="n">KEY_NAME</span>
</code></pre></div></div>
<p><strong>可用版本</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">>=</span> <span class="mf">1.0</span><span class="o">.</span><span class="mi">0</span>
</code></pre></div></div>
<p><strong>返回值</strong></p>
<p>执行 INCR 命令之后 key 的值。</p>
<p><strong>实例</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span><span class="o">></span> <span class="n">SET</span> <span class="n">page_view</span> <span class="mi">20</span>
<span class="n">OK</span>
<span class="n">redis</span><span class="o">></span> <span class="n">INCR</span> <span class="nf">page_view</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">21</span>
<span class="n">redis</span><span class="o">></span> <span class="n">GET</span> <span class="n">page_view</span> <span class="err">#</span> <span class="err">数字值在</span> <span class="n">Redis</span> <span class="err">中以字符串的形式保存</span>
<span class="s">"21"</span>
</code></pre></div></div>
<hr />
<h1 id="redis-incrby-命令---将-key-所储存的值加上给定的增量值increment-">Redis Incrby 命令 - 将 key 所储存的值加上给定的增量值(increment) 。</h1>
<p>Redis Incrby 命令将 key 中储存的数字加上指定的增量值。</p>
<p>如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCRBY 命令。</p>
<p>如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。</p>
<p>本操作的值限制在 64 位(bit)有符号数字表示之内。</p>
<p><strong>语法</strong></p>
<p>redis Incrby 命令基本语法如下:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">INCRBY</span> <span class="n">KEY_NAME</span> <span class="n">INCR_AMOUNT</span>
</code></pre></div></div>
<p><strong>可用版本</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">>=</span> <span class="mf">1.0</span><span class="o">.</span><span class="mi">0</span>
</code></pre></div></div>
<p><strong>返回值</strong></p>
<p>加上指定的增量值之后, key 的值。</p>
<p><strong>实例</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">#</span> <span class="n">key</span> <span class="err">存在且是数字值</span>
<span class="n">redis</span><span class="o">></span> <span class="n">SET</span> <span class="n">rank</span> <span class="mi">50</span>
<span class="n">OK</span>
<span class="n">redis</span><span class="o">></span> <span class="n">INCRBY</span> <span class="n">rank</span> <span class="mi">20</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">70</span>
<span class="n">redis</span><span class="o">></span> <span class="n">GET</span> <span class="n">rank</span>
<span class="s">"70"</span>
<span class="err">#</span> <span class="n">key</span> <span class="err">不存在时</span>
<span class="n">redis</span><span class="o">></span> <span class="n">EXISTS</span> <span class="nf">counter</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">0</span>
<span class="n">redis</span><span class="o">></span> <span class="n">INCRBY</span> <span class="n">counter</span> <span class="mi">30</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">30</span>
<span class="n">redis</span><span class="o">></span> <span class="n">GET</span> <span class="n">counter</span>
<span class="s">"30"</span>
<span class="err">#</span> <span class="n">key</span> <span class="err">不是数字值时</span>
<span class="n">redis</span><span class="o">></span> <span class="n">SET</span> <span class="n">book</span> <span class="s">"long long ago..."</span>
<span class="n">OK</span>
<span class="n">redis</span><span class="o">></span> <span class="n">INCRBY</span> <span class="n">book</span> <span class="mi">200</span>
<span class="o">(</span><span class="n">error</span><span class="o">)</span> <span class="n">ERR</span> <span class="n">value</span> <span class="n">is</span> <span class="n">not</span> <span class="n">an</span> <span class="n">integer</span> <span class="n">or</span> <span class="n">out</span> <span class="n">of</span> <span class="n">range</span>
</code></pre></div></div>
<hr />
<h1 id="redis-incrbyfloat-命令---将-key-所储存的值加上给定的浮点增量值increment-">Redis Incrbyfloat 命令 - 将 key 所储存的值加上给定的浮点增量值(increment) 。</h1>
<p>Redis Incrbyfloat 命令为 key 中所储存的值加上指定的浮点数增量值。</p>
<p>如果 key 不存在,那么 INCRBYFLOAT 会先将 key 的值设为 0 ,再执行加法操作。</p>
<p><strong>语法</strong></p>
<p>redis Incrbyfloat 命令基本语法如下:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">INCRBYFLOAT</span> <span class="n">KEY_NAME</span> <span class="n">INCR_AMOUNT</span>
</code></pre></div></div>
<p><strong>可用版本</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">>=</span> <span class="mf">2.6</span><span class="o">.</span><span class="mi">0</span>
</code></pre></div></div>
<p><strong>返回值</strong></p>
<p>执行命令之后 key 的值。</p>
<p><strong>实例</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">#</span> <span class="err">值和增量都不是指数符号</span>
<span class="n">redis</span><span class="o">></span> <span class="n">SET</span> <span class="n">mykey</span> <span class="mf">10.50</span>
<span class="n">OK</span>
<span class="n">redis</span><span class="o">></span> <span class="n">INCRBYFLOAT</span> <span class="n">mykey</span> <span class="mf">0.1</span>
<span class="s">"10.6"</span>
<span class="err">#</span> <span class="err">值和增量都是指数符号</span>
<span class="n">redis</span><span class="o">></span> <span class="n">SET</span> <span class="n">mykey</span> <span class="mi">314</span><span class="n">e</span><span class="o">-</span><span class="mi">2</span>
<span class="n">OK</span>
<span class="n">redis</span><span class="o">></span> <span class="n">GET</span> <span class="n">mykey</span> <span class="err">#</span> <span class="err">用</span> <span class="n">SET</span> <span class="err">设置的值可以是指数符号</span>
<span class="s">"314e-2"</span>
<span class="n">redis</span><span class="o">></span> <span class="n">INCRBYFLOAT</span> <span class="n">mykey</span> <span class="mi">0</span> <span class="err">#</span> <span class="err">但执行</span> <span class="n">INCRBYFLOAT</span> <span class="err">之后格式会被改成非指数符号</span>
<span class="s">"3.14"</span>
<span class="err">#</span> <span class="err">可以对整数类型执行</span>
<span class="n">redis</span><span class="o">></span> <span class="n">SET</span> <span class="n">mykey</span> <span class="mi">3</span>
<span class="n">OK</span>
<span class="n">redis</span><span class="o">></span> <span class="n">INCRBYFLOAT</span> <span class="n">mykey</span> <span class="mf">1.1</span>
<span class="s">"4.1"</span>
<span class="err">#</span> <span class="err">后跟的</span> <span class="mi">0</span> <span class="err">会被移除</span>
<span class="n">redis</span><span class="o">></span> <span class="n">SET</span> <span class="n">mykey</span> <span class="mf">3.0</span>
<span class="n">OK</span>
<span class="n">redis</span><span class="o">></span> <span class="n">GET</span> <span class="n">mykey</span> <span class="err">#</span> <span class="n">SET</span> <span class="err">设置的值小数部分可以是</span> <span class="mi">0</span>
<span class="s">"3.0"</span>
<span class="n">redis</span><span class="o">></span> <span class="n">INCRBYFLOAT</span> <span class="n">mykey</span> <span class="mf">1.000000000000000000000</span> <span class="err">#</span> <span class="err">但</span> <span class="n">INCRBYFLOAT</span> <span class="err">会将无用的</span> <span class="mi">0</span> <span class="err">忽略掉,有需要的话,将浮点变为整数</span>
<span class="s">"4"</span>
<span class="n">redis</span><span class="o">></span> <span class="n">GET</span> <span class="n">mykey</span>
<span class="s">"4"</span>
</code></pre></div></div>
<hr />
<h1 id="redis-decr-命令---将-key-中储存的数字值减一">Redis Decr 命令 - 将 key 中储存的数字值减一。</h1>
<p>Redis Decr 命令将 key 中储存的数字值减一。</p>
<p>如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECR 操作。</p>
<p>如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。</p>
<p>本操作的值限制在 64 位(bit)有符号数字表示之内。</p>
<p><strong>语法</strong></p>
<p>redis Decr 命令基本语法如下:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">DECR</span> <span class="n">KEY_NAME</span>
</code></pre></div></div>
<p><strong>可用版本</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">>=</span> <span class="mf">1.0</span><span class="o">.</span><span class="mi">0</span>
</code></pre></div></div>
<p><strong>返回值</strong></p>
<p>执行命令之后 key 的值。</p>
<p><strong>实例</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">#</span> <span class="err">对存在的数字值</span> <span class="n">key</span> <span class="err">进行</span> <span class="n">DECR</span>
<span class="n">redis</span><span class="o">></span> <span class="n">SET</span> <span class="n">failure_times</span> <span class="mi">10</span>
<span class="n">OK</span>
<span class="n">redis</span><span class="o">></span> <span class="n">DECR</span> <span class="nf">failure_times</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">9</span>
<span class="err">#</span> <span class="err">对不存在的</span> <span class="n">key</span> <span class="err">值进行</span> <span class="n">DECR</span>
<span class="n">redis</span><span class="o">></span> <span class="n">EXISTS</span> <span class="nf">count</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">0</span>
<span class="n">redis</span><span class="o">></span> <span class="n">DECR</span> <span class="nf">count</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="o">-</span><span class="mi">1</span>
<span class="err">#</span> <span class="err">对存在但不是数值的</span> <span class="n">key</span> <span class="err">进行</span> <span class="n">DECR</span>
<span class="n">redis</span><span class="o">></span> <span class="n">SET</span> <span class="n">company</span> <span class="n">YOUR_CODE_SUCKS</span><span class="o">.</span><span class="na">LLC</span>
<span class="n">OK</span>
<span class="n">redis</span><span class="o">></span> <span class="n">DECR</span> <span class="nf">company</span>
<span class="o">(</span><span class="n">error</span><span class="o">)</span> <span class="n">ERR</span> <span class="n">value</span> <span class="n">is</span> <span class="n">not</span> <span class="n">an</span> <span class="n">integer</span> <span class="n">or</span> <span class="n">out</span> <span class="n">of</span> <span class="n">range</span>
</code></pre></div></div>
<hr />
<h1 id="redis-decrby-命令---key-所储存的值减去给定的减量值decrement-">Redis Decrby 命令 - key 所储存的值减去给定的减量值(decrement) 。</h1>
<p>Redis Decrby 命令将 key 所储存的值减去指定的减量值。</p>
<p>如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECRBY 操作。</p>
<p>如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。</p>
<p>本操作的值限制在 64 位(bit)有符号数字表示之内。</p>
<p><strong>语法</strong></p>
<p>redis Decrby 命令基本语法如下:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">DECRBY</span> <span class="n">KEY_NAME</span> <span class="n">DECREMENT_AMOUNT</span>
</code></pre></div></div>
<p><strong>可用版本</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">>=</span> <span class="mf">1.0</span><span class="o">.</span><span class="mi">0</span>
</code></pre></div></div>
<p><strong>返回值</strong></p>
<p>减去指定减量值之后, key 的值。</p>
<p><strong>实例</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">#</span> <span class="err">对已存在的</span> <span class="n">key</span> <span class="err">进行</span> <span class="n">DECRBY</span>
<span class="n">redis</span><span class="o">></span> <span class="n">SET</span> <span class="n">count</span> <span class="mi">100</span>
<span class="n">OK</span>
<span class="n">redis</span><span class="o">></span> <span class="n">DECRBY</span> <span class="n">count</span> <span class="mi">20</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">80</span>
<span class="err">#</span> <span class="err">对不存在的</span> <span class="n">key</span> <span class="err">进行</span><span class="n">DECRBY</span>
<span class="n">redis</span><span class="o">></span> <span class="n">EXISTS</span> <span class="nf">pages</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">0</span>
<span class="n">redis</span><span class="o">></span> <span class="n">DECRBY</span> <span class="n">pages</span> <span class="mi">10</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="o">-</span><span class="mi">10</span>
</code></pre></div></div>
<hr />
<h1 id="redis-append-命令---如果-key-已经存在并且是一个字符串-append-命令将-value-追加到-key-原来的值的末尾">Redis Append 命令 - 如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。</h1>
<p>Redis Append 命令用于为指定的 key 追加值。</p>
<p>如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。</p>
<p>如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。</p>
<p><strong>语法</strong></p>
<p>redis Append 命令基本语法如下:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">APPEND</span> <span class="n">KEY_NAME</span> <span class="n">NEW_VALUE</span>
</code></pre></div></div>
<p><strong>可用版本</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">>=</span> <span class="mf">2.0</span><span class="o">.</span><span class="mi">0</span>
</code></pre></div></div>
<p><strong>返回值</strong></p>
<p>追加指定值之后, key 中字符串的长度。</p>
<p><strong>实例</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">#</span> <span class="err">对不存在的</span> <span class="n">key</span> <span class="err">执行</span> <span class="n">APPEND</span>
<span class="n">redis</span><span class="o">></span> <span class="n">EXISTS</span> <span class="n">myphone</span> <span class="err">#</span> <span class="err">确保</span> <span class="n">myphone</span> <span class="err">不存在</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">0</span>
<span class="n">redis</span><span class="o">></span> <span class="n">APPEND</span> <span class="n">myphone</span> <span class="s">"nokia"</span> <span class="err">#</span> <span class="err">对不存在的</span> <span class="n">key</span> <span class="err">进行</span> <span class="n">APPEND</span> <span class="err">,等同于</span> <span class="n">SET</span> <span class="n">myphone</span> <span class="s">"nokia"</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">5</span> <span class="err">#</span> <span class="err">字符长度</span>
<span class="err">#</span> <span class="err">对已存在的字符串进行</span> <span class="n">APPEND</span>
<span class="n">redis</span><span class="o">></span> <span class="n">APPEND</span> <span class="n">myphone</span> <span class="s">" - 1110"</span> <span class="err">#</span> <span class="err">长度从</span> <span class="mi">5</span> <span class="err">个字符增加到</span> <span class="mi">12</span> <span class="err">个字符</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">12</span>
<span class="n">redis</span><span class="o">></span> <span class="n">GET</span> <span class="n">myphone</span>
<span class="s">"nokia - 1110"</span>
</code></pre></div></div>ShineDe字符串命令有一下几种: Redis SET 命令、 Redis Get 命令、 Redis Getrange 命令、 Redis Getset 命令、 Redis Getbit 命令、 Redis Mget 命令、 Redis Setbit 命令、 Redis Setex 命令、 Redis Setnx 命令、 Redis Setrange 命令、 Redis Strlen 命令、 Redis Mset 命令、 Redis Msetnx 命令、 Redis Psetex 命令、 Redis Incr 命令、 Redis Incrby 命令、 Redis Incrbyfloat 命令、 Redis Decr 命令、 Redis Decrby 命令、 Redis Append 命令Redis键(key) 命令集合2016-12-21T00:00:00+08:002016-12-21T00:00:00+08:00https://shinede.github.io//2016/12/21/Redis-key-command-1<h1 id="redis-del-命令---该命令用于在-key-存在是删除-key">Redis DEL 命令 - 该命令用于在 key 存在是删除 key。</h1>
<p><strong>Redis DEL 命令用于删除已存在的键。不存在的 key 会被忽略。</strong></p>
<h2 id="语法">语法</h2>
<p>redis DEL 命令基本语法如下:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">DEL</span> <span class="n">KEY_NAME</span>
</code></pre></div></div>
<!--more-->
<p><strong>可用版本</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">>=</span> <span class="mf">1.0</span><span class="o">.</span><span class="mi">0</span>
</code></pre></div></div>
<p><strong>返回值</strong></p>
<p>被删除 key 的数量。</p>
<h2 id="实例">实例</h2>
<p>首先,我们在 redis 中创建一个 key 并设置值。</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">SET</span> <span class="n">w3ckey</span> <span class="n">redis</span>
<span class="n">OK</span>
</code></pre></div></div>
<p>现在我们删除已创建的 key。</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">DEL</span> <span class="nf">w3ckey</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">1</span>
</code></pre></div></div>
<hr />
<h1 id="redis-dump-命令---序列化给定-key-并返回被序列化的值">Redis Dump 命令 - 序列化给定 key ,并返回被序列化的值。</h1>
<p><strong>Redis DUMP 命令用于序列化给定 key ,并返回被序列化的值。</strong></p>
<h2 id="语法-1">语法</h2>
<p>redis DUMP 命令基本语法如下:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">DUMP</span> <span class="n">KEY_NAME</span>
</code></pre></div></div>
<p><strong>可用版本</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">>=</span> <span class="mf">2.6</span><span class="o">.</span><span class="mi">0</span>
</code></pre></div></div>
<p><strong>返回值</strong></p>
<p>如果 key 不存在,那么返回 nil 。 否则,返回序列化之后的值。</p>
<h2 id="实例-1">实例</h2>
<p>首先,我们在 redis 中创建一个 key 并设置值。</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span><span class="o">></span> <span class="n">SET</span> <span class="n">greeting</span> <span class="s">"hello, dumping world!"</span>
<span class="n">OK</span>
</code></pre></div></div>
<p>现在使用 DUMP 序列化键值。</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span><span class="o">></span> <span class="n">DUMP</span> <span class="n">greeting</span>
<span class="s">"\x00\x15hello, dumping world!\x06\x00E\xa0Z\x82\xd8r\xc1\xde"</span>
<span class="n">redis</span><span class="o">></span> <span class="n">DUMP</span> <span class="n">not</span><span class="o">-</span><span class="n">exists</span><span class="o">-</span><span class="n">key</span>
<span class="o">(</span><span class="n">nil</span><span class="o">)</span>
</code></pre></div></div>
<hr />
<h1 id="redis-exists-命令---检查给定-key-是否存在">Redis EXISTS 命令 - 检查给定 key 是否存在。</h1>
<p><strong>Redis EXISTS 命令用于检查给定 key 是否存在。</strong></p>
<h2 id="语法-2">语法</h2>
<p>redis EXISTS 命令基本语法如下:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">EXISTS</span> <span class="n">KEY_NAME</span>
</code></pre></div></div>
<p><strong>可用版本</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">>=</span> <span class="mf">1.0</span><span class="o">.</span><span class="mi">0</span>
</code></pre></div></div>
<p><strong>返回值</strong></p>
<p>若 key 存在返回 1 ,否则返回 0 。</p>
<h2 id="实例-2">实例</h2>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">EXISTS</span> <span class="n">w3cschoolcc</span><span class="o">-</span><span class="k">new</span><span class="o">-</span><span class="n">key</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">0</span>
</code></pre></div></div>
<p>现在我们创建一个名为 w3cschoolcc-new-key 的键并赋值,再使用 EXISTS 命令。</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">set</span> <span class="n">w3cschoolcc</span><span class="o">-</span><span class="k">new</span><span class="o">-</span><span class="n">key</span> <span class="n">newkey</span>
<span class="n">OK</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">EXISTS</span> <span class="n">w3cschoolcc</span><span class="o">-</span><span class="k">new</span><span class="o">-</span><span class="n">key</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">1</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span>
</code></pre></div></div>
<hr />
<h1 id="redis-expire-命令---seconds-为给定-key-设置过期时间">Redis Expire 命令 - seconds 为给定 key 设置过期时间。</h1>
<p><strong>Redis Expire 命令用于设置 key 的过期时间。key 过期后将不再可用。</strong></p>
<h2 id="语法-3">语法</h2>
<p>redis Expire 命令基本语法如下:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">Expire</span> <span class="n">KEY_NAME</span> <span class="n">TIME_IN_SECONDS</span>
</code></pre></div></div>
<p><strong>可用版本</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">>=</span> <span class="mf">1.0</span><span class="o">.</span><span class="mi">0</span>
</code></pre></div></div>
<p><strong>返回值</strong></p>
<p>设置成功返回 1 。 当 key 不存在或者不能为 key 设置过期时间时(比如在低于 2.1.3 版本的 Redis 中你尝试更新 key 的过期时间)返回 0 。</p>
<h2 id="实例-3">实例</h2>
<p>首先创建一个 key 并赋值:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">SET</span> <span class="n">w3ckey</span> <span class="n">redis</span>
<span class="n">OK</span>
</code></pre></div></div>
<p>为 key 设置过期时间:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">EXPIRE</span> <span class="n">w3ckey</span> <span class="mi">60</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">1</span>
</code></pre></div></div>
<p>以上实例中我们为键 w3ckey 设置了过期时间为 1 分钟,1分钟后该键会自动删除。</p>
<hr />
<h1 id="redis-expireat-命令---expireat-的作用和-expire-类似都用于为-key-设置过期时间-不同在于-expireat-命令接受的时间参数是-unix-时间戳unix-timestamp">Redis Expireat 命令 - EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。</h1>
<p><strong>Redis Expireat 命令用于以 UNIX 时间戳(unix timestamp)格式设置 key 的过期时间。key 过期后将不再可用。</strong></p>
<h2 id="语法-4">语法</h2>
<p>redis Expireat 命令基本语法如下:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">Expireat</span> <span class="n">KEY_NAME</span> <span class="n">TIME_IN_UNIX_TIMESTAMP</span>
</code></pre></div></div>
<p>可用版本</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">>=</span> <span class="mf">1.0</span><span class="o">.</span><span class="mi">0</span>
</code></pre></div></div>
<p><strong>返回值</strong></p>
<p>设置成功返回 1 。 当 key 不存在或者不能为 key 设置过期时间时(比如在低于 2.1.3 版本的 Redis 中你尝试更新 key 的过期时间)返回 0 。</p>
<h2 id="实例-4">实例</h2>
<p>首先创建一个 key 并赋值:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">SET</span> <span class="n">w3ckey</span> <span class="n">redis</span>
<span class="n">OK</span>
</code></pre></div></div>
<p>为 key 设置过期时间:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">EXPIREAT</span> <span class="n">w3ckey</span> <span class="mi">1293840000</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">1</span>
<span class="n">EXISTS</span> <span class="nf">w3ckey</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">0</span>
</code></pre></div></div>
<hr />
<h1 id="redis-pexpireat-命令---设置-key-的过期时间亿以毫秒计">Redis PEXPIREAT 命令 - 设置 key 的过期时间亿以毫秒计。</h1>
<p>Redis PEXPIREAT 命令用于设置 key 的过期时间,已毫秒技。key 过期后将不再可用。</p>
<h2 id="语法-5">语法</h2>
<p>redis PEXPIREAT 命令基本语法如下:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">PEXPIREAT</span> <span class="n">KEY_NAME</span> <span class="n">TIME_IN_MILLISECONDS_IN_UNIX_TIMESTAMP</span>
</code></pre></div></div>
<p><strong>可用版本</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">>=</span> <span class="mf">1.0</span><span class="o">.</span><span class="mi">0</span>
</code></pre></div></div>
<p><strong>返回值</strong></p>
<p>设置成功返回 1 。 当 key 不存在或者不能为 key 设置过期时间时(比如在低于 2.1.3 版本的 Redis 中你尝试更新 key 的过期时间)返回 0 。</p>
<h2 id="实例-5">实例</h2>
<p>首先创建一个 key 并赋值:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">SET</span> <span class="n">w3ckey</span> <span class="n">redis</span>
<span class="n">OK</span>
</code></pre></div></div>
<p>为 key 设置过期时间:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">PEXPIREAT</span> <span class="n">tutorialspoint</span> <span class="mi">1555555555005</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">1</span>
</code></pre></div></div>
<hr />
<h1 id="redis-keys-命令---查找所有符合给定模式-pattern的-key-">Redis Keys 命令 - 查找所有符合给定模式( pattern)的 key 。</h1>
<p>Redis Keys 命令用于查找所有符合给定模式 pattern 的 key 。。</p>
<h2 id="语法-6">语法</h2>
<p>redis KEYS 命令基本语法如下:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">KEYS</span> <span class="n">PATTERN</span>
</code></pre></div></div>
<p><strong>可用版本</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">>=</span> <span class="mf">1.0</span><span class="o">.</span><span class="mi">0</span>
</code></pre></div></div>
<p><strong>返回值</strong></p>
<p>符合给定模式的 key 列表 (Array)。</p>
<h2 id="实例-6">实例</h2>
<p>首先创建一些 key,并赋上对应值:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">SET</span> <span class="n">w3c1</span> <span class="n">redis</span>
<span class="n">OK</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">SET</span> <span class="n">w3c2</span> <span class="n">mysql</span>
<span class="n">OK</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">SET</span> <span class="n">w3c3</span> <span class="n">mongodb</span>
<span class="n">OK</span>
</code></pre></div></div>
<p>查找以 w3c 为开头的 key:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">KEYS</span> <span class="n">w3c</span><span class="o">*</span>
<span class="mi">1</span><span class="o">)</span> <span class="s">"w3c3"</span>
<span class="mi">2</span><span class="o">)</span> <span class="s">"w3c1"</span>
<span class="mi">3</span><span class="o">)</span> <span class="s">"w3c2"</span>
</code></pre></div></div>
<p>获取 redis 中所有的 key 可用使用 *。</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">KEYS</span> <span class="o">*</span>
<span class="mi">1</span><span class="o">)</span> <span class="s">"w3c3"</span>
<span class="mi">2</span><span class="o">)</span> <span class="s">"w3c1"</span>
<span class="mi">3</span><span class="o">)</span> <span class="s">"w3c2"</span>
</code></pre></div></div>
<hr />
<h1 id="redis-move-命令---将当前数据库的-key-移动到给定的数据库-db-当中">Redis Move 命令 - 将当前数据库的 key 移动到给定的数据库 db 当中。</h1>
<p>Redis MOVE 命令用于将当前数据库的 key 移动到给定的数据库 db 当中。</p>
<h2 id="语法-7">语法</h2>
<p>redis Move 命令基本语法如下:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">MOVE</span> <span class="n">KEY_NAME</span> <span class="n">DESTINATION_DATABASE</span>
</code></pre></div></div>
<p><strong>可用版本</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">>=</span> <span class="mf">1.0</span><span class="o">.</span><span class="mi">0</span>
</code></pre></div></div>
<p><strong>返回值</strong></p>
<p>移动成功返回 1 ,失败则返回 0 。</p>
<h2 id="实例-7">实例</h2>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">#</span> <span class="n">key</span> <span class="err">存在于当前数据库</span>
<span class="n">redis</span><span class="o">></span> <span class="n">SELECT</span> <span class="mi">0</span> <span class="err">#</span> <span class="n">redis</span><span class="err">默认使用数据库</span> <span class="mi">0</span><span class="err">,为了清晰起见,这里再显式指定一次。</span>
<span class="n">OK</span>
<span class="n">redis</span><span class="o">></span> <span class="n">SET</span> <span class="n">song</span> <span class="s">"secret base - Zone"</span>
<span class="n">OK</span>
<span class="n">redis</span><span class="o">></span> <span class="n">MOVE</span> <span class="n">song</span> <span class="mi">1</span> <span class="err">#</span> <span class="err">将</span> <span class="n">song</span> <span class="err">移动到数据库</span> <span class="mi">1</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">1</span>
<span class="n">redis</span><span class="o">></span> <span class="n">EXISTS</span> <span class="n">song</span> <span class="err">#</span> <span class="n">song</span> <span class="err">已经被移走</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">0</span>
<span class="n">redis</span><span class="o">></span> <span class="n">SELECT</span> <span class="mi">1</span> <span class="err">#</span> <span class="err">使用数据库</span> <span class="mi">1</span>
<span class="n">OK</span>
<span class="nl">redis:</span><span class="mi">1</span><span class="o">></span> <span class="n">EXISTS</span> <span class="n">song</span> <span class="err">#</span> <span class="err">证实</span> <span class="n">song</span> <span class="err">被移到了数据库</span> <span class="mi">1</span> <span class="o">(</span><span class="err">注意命令提示符变成了</span><span class="s">"redis:1"</span><span class="err">,表明正在使用数据库</span> <span class="mi">1</span><span class="o">)</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">1</span>
<span class="err">#</span> <span class="err">当</span> <span class="n">key</span> <span class="err">不存在的时候</span>
<span class="nl">redis:</span><span class="mi">1</span><span class="o">></span> <span class="n">EXISTS</span> <span class="nf">fake_key</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">0</span>
<span class="nl">redis:</span><span class="mi">1</span><span class="o">></span> <span class="n">MOVE</span> <span class="n">fake_key</span> <span class="mi">0</span> <span class="err">#</span> <span class="err">试图从数据库</span> <span class="mi">1</span> <span class="err">移动一个不存在的</span> <span class="n">key</span> <span class="err">到数据库</span> <span class="mi">0</span><span class="err">,失败</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">0</span>
<span class="nl">redis:</span><span class="mi">1</span><span class="o">></span> <span class="n">select</span> <span class="mi">0</span> <span class="err">#</span> <span class="err">使用数据库</span><span class="mi">0</span>
<span class="n">OK</span>
<span class="n">redis</span><span class="o">></span> <span class="n">EXISTS</span> <span class="n">fake_key</span> <span class="err">#</span> <span class="err">证实</span> <span class="n">fake_key</span> <span class="err">不存在</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">0</span>
<span class="err">#</span> <span class="err">当源数据库和目标数据库有相同的</span> <span class="n">key</span> <span class="err">时</span>
<span class="n">redis</span><span class="o">></span> <span class="n">SELECT</span> <span class="mi">0</span> <span class="err">#</span> <span class="err">使用数据库</span><span class="mi">0</span>
<span class="n">OK</span>
<span class="n">redis</span><span class="o">></span> <span class="n">SET</span> <span class="n">favorite_fruit</span> <span class="s">"banana"</span>
<span class="n">OK</span>
<span class="n">redis</span><span class="o">></span> <span class="n">SELECT</span> <span class="mi">1</span> <span class="err">#</span> <span class="err">使用数据库</span><span class="mi">1</span>
<span class="n">OK</span>
<span class="nl">redis:</span><span class="mi">1</span><span class="o">></span> <span class="n">SET</span> <span class="n">favorite_fruit</span> <span class="s">"apple"</span>
<span class="n">OK</span>
<span class="nl">redis:</span><span class="mi">1</span><span class="o">></span> <span class="n">SELECT</span> <span class="mi">0</span> <span class="err">#</span> <span class="err">使用数据库</span><span class="mi">0</span><span class="err">,并试图将</span> <span class="n">favorite_fruit</span> <span class="err">移动到数据库</span> <span class="mi">1</span>
<span class="n">OK</span>
<span class="n">redis</span><span class="o">></span> <span class="n">MOVE</span> <span class="n">favorite_fruit</span> <span class="mi">1</span> <span class="err">#</span> <span class="err">因为两个数据库有相同的</span> <span class="n">key</span><span class="err">,</span><span class="n">MOVE</span> <span class="err">失败</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">0</span>
<span class="n">redis</span><span class="o">></span> <span class="n">GET</span> <span class="n">favorite_fruit</span> <span class="err">#</span> <span class="err">数据库</span> <span class="mi">0</span> <span class="err">的</span> <span class="n">favorite_fruit</span> <span class="err">没变</span>
<span class="s">"banana"</span>
<span class="n">redis</span><span class="o">></span> <span class="n">SELECT</span> <span class="mi">1</span>
<span class="n">OK</span>
<span class="nl">redis:</span><span class="mi">1</span><span class="o">></span> <span class="n">GET</span> <span class="n">favorite_fruit</span> <span class="err">#</span> <span class="err">数据库</span> <span class="mi">1</span> <span class="err">的</span> <span class="n">favorite_fruit</span> <span class="err">也是</span>
<span class="s">"apple"</span>
</code></pre></div></div>
<hr />
<h1 id="redis-persist-命令---移除-key-的过期时间key-将持久保持">Redis PERSIST 命令 - 移除 key 的过期时间,key 将持久保持。</h1>
<p>Redis PERSIST 命令用于移除给定 key 的过期时间,使得 key 永不过期。</p>
<h2 id="语法-8">语法</h2>
<p>redis PERSIST 命令基本语法如下:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">PERSIST</span> <span class="n">KEY_NAME</span>
</code></pre></div></div>
<p><strong>可用版本</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">>=</span> <span class="mf">2.2</span><span class="o">.</span><span class="mi">0</span>
</code></pre></div></div>
<p><strong>返回值</strong></p>
<p>当过期时间移除成功时,返回 1 。 如果 key 不存在或 key 没有设置过期时间,返回 0 。</p>
<h2 id="实例-8">实例</h2>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span><span class="o">></span> <span class="n">SET</span> <span class="n">mykey</span> <span class="s">"Hello"</span>
<span class="n">OK</span>
<span class="n">redis</span><span class="o">></span> <span class="n">EXPIRE</span> <span class="n">mykey</span> <span class="mi">10</span> <span class="err">#</span> <span class="err">为</span> <span class="n">key</span> <span class="err">设置生存时间</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">1</span>
<span class="n">redis</span><span class="o">></span> <span class="n">TTL</span> <span class="nf">mykey</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">10</span>
<span class="n">redis</span><span class="o">></span> <span class="n">PERSIST</span> <span class="n">mykey</span> <span class="err">#</span> <span class="err">移除</span> <span class="n">key</span> <span class="err">的生存时间</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">1</span>
<span class="n">redis</span><span class="o">></span> <span class="n">TTL</span> <span class="nf">mykey</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="o">-</span><span class="mi">1</span>
</code></pre></div></div>
<hr />
<h1 id="redis-pttl-命令---以毫秒为单位返回-key-的剩余的过期时间">Redis Pttl 命令 - 以毫秒为单位返回 key 的剩余的过期时间。</h1>
<p>Redis Pttl 命令以毫秒为单位返回 key 的剩余过期时间。</p>
<h2 id="语法-9">语法</h2>
<p>redis Pttl 命令基本语法如下:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">PTTL</span> <span class="n">KEY_NAME</span>
</code></pre></div></div>
<p>可用版本</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">>=</span> <span class="mf">2.6</span><span class="o">.</span><span class="mi">0</span>
</code></pre></div></div>
<p><strong>返回值</strong></p>
<p>当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以毫秒为单位,返回 key 的剩余生存时间。</p>
<p>注意:在 Redis 2.8 以前,当 key 不存在,或者 key 没有设置剩余生存时间时,命令都返回 -1 。</p>
<h2 id="实例-9">实例</h2>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">#</span> <span class="err">不存在的</span> <span class="n">key</span>
<span class="n">redis</span><span class="o">></span> <span class="n">FLUSHDB</span>
<span class="n">OK</span>
<span class="n">redis</span><span class="o">></span> <span class="n">PTTL</span> <span class="nf">key</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="o">-</span><span class="mi">2</span>
<span class="err">#</span> <span class="n">key</span> <span class="err">存在,但没有设置剩余生存时间</span>
<span class="n">redis</span><span class="o">></span> <span class="n">SET</span> <span class="n">key</span> <span class="n">value</span>
<span class="n">OK</span>
<span class="n">redis</span><span class="o">></span> <span class="n">PTTL</span> <span class="nf">key</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="o">-</span><span class="mi">1</span>
<span class="err">#</span> <span class="err">有剩余生存时间的</span> <span class="n">key</span>
<span class="n">redis</span><span class="o">></span> <span class="n">PEXPIRE</span> <span class="n">key</span> <span class="mi">10086</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">1</span>
<span class="n">redis</span><span class="o">></span> <span class="n">PTTL</span> <span class="nf">key</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">6179</span>
</code></pre></div></div>
<hr />
<h1 id="redis-ttl-命令---以秒为单位返回给定-key-的剩余生存时间ttl-time-to-live">Redis TTL 命令 - 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。</h1>
<p>Redis TTL 命令以秒为单位返回 key 的剩余过期时间。</p>
<h2 id="语法-10">语法</h2>
<p>redis TTL 命令基本语法如下:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">TTL</span> <span class="n">KEY_NAME</span>
</code></pre></div></div>
<p><strong>可用版本</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">>=</span> <span class="mf">1.0</span><span class="o">.</span><span class="mi">0</span>
</code></pre></div></div>
<p><strong>返回值</strong></p>
<p>当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以毫秒为单位,返回 key 的剩余生存时间。</p>
<p>注意:在 Redis 2.8 以前,当 key 不存在,或者 key 没有设置剩余生存时间时,命令都返回 -1 。</p>
<h2 id="实例-10">实例</h2>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">#</span> <span class="err">不存在的</span> <span class="n">key</span>
<span class="n">redis</span><span class="o">></span> <span class="n">FLUSHDB</span>
<span class="n">OK</span>
<span class="n">redis</span><span class="o">></span> <span class="n">TTL</span> <span class="nf">key</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="o">-</span><span class="mi">2</span>
<span class="err">#</span> <span class="n">key</span> <span class="err">存在,但没有设置剩余生存时间</span>
<span class="n">redis</span><span class="o">></span> <span class="n">SET</span> <span class="n">key</span> <span class="n">value</span>
<span class="n">OK</span>
<span class="n">redis</span><span class="o">></span> <span class="n">TTL</span> <span class="nf">key</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="o">-</span><span class="mi">1</span>
<span class="err">#</span> <span class="err">有剩余生存时间的</span> <span class="n">key</span>
<span class="n">redis</span><span class="o">></span> <span class="n">EXPIRE</span> <span class="n">key</span> <span class="mi">10086</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">1</span>
<span class="n">redis</span><span class="o">></span> <span class="n">TTL</span> <span class="nf">key</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">10084</span>
</code></pre></div></div>
<hr />
<h1 id="redis-randomkey-命令---从当前数据库中随机返回一个-key-">Redis RANDOMKEY 命令 - 从当前数据库中随机返回一个 key 。</h1>
<p>Redis RANDOMKEY 命令从当前数据库中随机返回一个 key 。</p>
<h2 id="语法-11">语法</h2>
<p>redis RANDOMKEY 命令基本语法如下:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">RANDOMKEY</span>
</code></pre></div></div>
<p><strong>可用版本</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">>=</span> <span class="mf">1.0</span><span class="o">.</span><span class="mi">0</span>
</code></pre></div></div>
<p><strong>返回值</strong></p>
<p>当数据库不为空时,返回一个 key 。 当数据库为空时,返回 nil 。</p>
<h2 id="实例-11">实例</h2>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">#</span> <span class="err">数据库不为空</span>
<span class="n">redis</span><span class="o">></span> <span class="n">MSET</span> <span class="n">fruit</span> <span class="s">"apple"</span> <span class="n">drink</span> <span class="s">"beer"</span> <span class="n">food</span> <span class="s">"cookies"</span> <span class="err">#</span> <span class="err">设置多个</span> <span class="n">key</span>
<span class="n">OK</span>
<span class="n">redis</span><span class="o">></span> <span class="n">RANDOMKEY</span>
<span class="s">"fruit"</span>
<span class="n">redis</span><span class="o">></span> <span class="n">RANDOMKEY</span>
<span class="s">"food"</span>
<span class="n">redis</span><span class="o">></span> <span class="n">KEYS</span> <span class="o">*</span> <span class="err">#</span> <span class="err">查看数据库内所有</span><span class="n">key</span><span class="err">,证明</span> <span class="n">RANDOMKEY</span> <span class="err">并不删除</span> <span class="n">key</span>
<span class="mi">1</span><span class="o">)</span> <span class="s">"food"</span>
<span class="mi">2</span><span class="o">)</span> <span class="s">"drink"</span>
<span class="mi">3</span><span class="o">)</span> <span class="s">"fruit"</span>
<span class="err">#</span> <span class="err">数据库为空</span>
<span class="n">redis</span><span class="o">></span> <span class="n">FLUSHDB</span> <span class="err">#</span> <span class="err">删除当前数据库所有</span> <span class="n">key</span>
<span class="n">OK</span>
<span class="n">redis</span><span class="o">></span> <span class="nf">RANDOMKEY</span>
<span class="o">(</span><span class="n">nil</span><span class="o">)</span>
</code></pre></div></div>
<hr />
<h1 id="redis-rename-命令---修改-key-的名称">Redis Rename 命令 - 修改 key 的名称</h1>
<p>Redis Rename 命令用于修改 key 的名称 。</p>
<h2 id="语法-12">语法</h2>
<p>redis Rename 命令基本语法如下:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">RENAME</span> <span class="n">OLD_KEY_NAME</span> <span class="n">NEW_KEY_NAME</span>
</code></pre></div></div>
<p><strong>可用版本</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">>=</span> <span class="mf">1.0</span><span class="o">.</span><span class="mi">0</span>
</code></pre></div></div>
<p><strong>返回值</strong></p>
<p>改名成功时提示 OK ,失败时候返回一个错误。</p>
<p>当 OLD_KEY_NAME 和 NEW_KEY_NAME 相同,或者 OLD_KEY_NAME 不存在时,返回一个错误。 当 NEW_KEY_NAME 已经存在时, RENAME 命令将覆盖旧值。</p>
<h2 id="实例-12">实例</h2>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">#</span> <span class="n">key</span> <span class="err">存在且</span> <span class="n">newkey</span> <span class="err">不存在</span>
<span class="n">redis</span><span class="o">></span> <span class="n">SET</span> <span class="n">message</span> <span class="s">"hello world"</span>
<span class="n">OK</span>
<span class="n">redis</span><span class="o">></span> <span class="n">RENAME</span> <span class="n">message</span> <span class="n">greeting</span>
<span class="n">OK</span>
<span class="n">redis</span><span class="o">></span> <span class="n">EXISTS</span> <span class="n">message</span> <span class="err">#</span> <span class="n">message</span> <span class="err">不复存在</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">0</span>
<span class="n">redis</span><span class="o">></span> <span class="n">EXISTS</span> <span class="n">greeting</span> <span class="err">#</span> <span class="n">greeting</span> <span class="err">取而代之</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">1</span>
<span class="err">#</span> <span class="err">当</span> <span class="n">key</span> <span class="err">不存在时,返回错误</span>
<span class="n">redis</span><span class="o">></span> <span class="n">RENAME</span> <span class="n">fake_key</span> <span class="nf">never_exists</span>
<span class="o">(</span><span class="n">error</span><span class="o">)</span> <span class="n">ERR</span> <span class="n">no</span> <span class="n">such</span> <span class="n">key</span>
<span class="err">#</span> <span class="n">newkey</span> <span class="err">已存在时,</span> <span class="n">RENAME</span> <span class="err">会覆盖旧</span> <span class="n">newkey</span>
<span class="n">redis</span><span class="o">></span> <span class="n">SET</span> <span class="n">pc</span> <span class="s">"lenovo"</span>
<span class="n">OK</span>
<span class="n">redis</span><span class="o">></span> <span class="n">SET</span> <span class="n">personal_computer</span> <span class="s">"dell"</span>
<span class="n">OK</span>
<span class="n">redis</span><span class="o">></span> <span class="n">RENAME</span> <span class="n">pc</span> <span class="n">personal_computer</span>
<span class="n">OK</span>
<span class="n">redis</span><span class="o">></span> <span class="n">GET</span> <span class="nf">pc</span>
<span class="o">(</span><span class="n">nil</span><span class="o">)</span>
<span class="nl">redis:</span><span class="mi">1</span><span class="o">></span> <span class="n">GET</span> <span class="n">personal_computer</span> <span class="err">#</span> <span class="err">原来的值</span> <span class="n">dell</span> <span class="err">被覆盖了</span>
<span class="s">"lenovo"</span>
</code></pre></div></div>
<hr />
<h1 id="redis-renamenx-命令---仅当-newkey-不存在时将-key-改名为-newkey-">Redis Renamenx 命令 - 仅当 newkey 不存在时,将 key 改名为 newkey 。</h1>
<p>Redis Renamenx 命令用于在新的 key 不存在时修改 key 的名称 。</p>
<h2 id="语法-13">语法</h2>
<p>redis Renamenx 命令基本语法如下:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">RENAMENX</span> <span class="n">OLD_KEY_NAME</span> <span class="n">NEW_KEY_NAME</span>
</code></pre></div></div>
<p><strong>可用版本</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">>=</span> <span class="mf">1.0</span><span class="o">.</span><span class="mi">0</span>
</code></pre></div></div>
<p><strong>返回值</strong></p>
<p>修改成功时,返回 1 。 如果 NEW_KEY_NAME 已经存在,返回 0 。</p>
<h2 id="实例-13">实例</h2>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">#</span> <span class="n">newkey</span> <span class="err">不存在,改名成功</span>
<span class="n">redis</span><span class="o">></span> <span class="n">SET</span> <span class="n">player</span> <span class="s">"MPlyaer"</span>
<span class="n">OK</span>
<span class="n">redis</span><span class="o">></span> <span class="n">EXISTS</span> <span class="nf">best_player</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">0</span>
<span class="n">redis</span><span class="o">></span> <span class="n">RENAMENX</span> <span class="n">player</span> <span class="nf">best_player</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">1</span>
<span class="err">#</span> <span class="n">newkey</span><span class="err">存在时,失败</span>
<span class="n">redis</span><span class="o">></span> <span class="n">SET</span> <span class="n">animal</span> <span class="s">"bear"</span>
<span class="n">OK</span>
<span class="n">redis</span><span class="o">></span> <span class="n">SET</span> <span class="n">favorite_animal</span> <span class="s">"butterfly"</span>
<span class="n">OK</span>
<span class="n">redis</span><span class="o">></span> <span class="n">RENAMENX</span> <span class="n">animal</span> <span class="nf">favorite_animal</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">0</span>
<span class="n">redis</span><span class="o">></span> <span class="n">get</span> <span class="n">animal</span>
<span class="s">"bear"</span>
<span class="n">redis</span><span class="o">></span> <span class="n">get</span> <span class="n">favorite_animal</span>
<span class="s">"butterfly"</span>
</code></pre></div></div>
<hr />
<h1 id="redis-type-命令---返回-key-所储存的值的类型">Redis Type 命令 - 返回 key 所储存的值的类型。</h1>
<p>Redis Type 命令用于返回 key 所储存的值的类型。</p>
<h2 id="语法-14">语法</h2>
<p>redis Renamenx 命令基本语法如下:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">TYPE</span> <span class="n">KEY_NAME</span>
</code></pre></div></div>
<p><strong>可用版本</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">>=</span> <span class="mf">1.0</span><span class="o">.</span><span class="mi">0</span>
</code></pre></div></div>
<p><strong>返回值</strong></p>
<p>返回 key 的数据类型,数据类型有:</p>
<p>none (key不存在)</p>
<p>string (字符串)</p>
<p>list (列表)</p>
<p>set (集合)</p>
<p>zset (有序集)</p>
<p>hash (哈希表)</p>
<h2 id="实例-14">实例</h2>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">#</span> <span class="err">字符串</span>
<span class="n">redis</span><span class="o">></span> <span class="n">SET</span> <span class="n">weather</span> <span class="s">"sunny"</span>
<span class="n">OK</span>
<span class="n">redis</span><span class="o">></span> <span class="n">TYPE</span> <span class="n">weather</span>
<span class="n">string</span>
<span class="err">#</span> <span class="err">列表</span>
<span class="n">redis</span><span class="o">></span> <span class="n">LPUSH</span> <span class="n">book_list</span> <span class="s">"programming in scala"</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">1</span>
<span class="n">redis</span><span class="o">></span> <span class="n">TYPE</span> <span class="n">book_list</span>
<span class="n">list</span>
<span class="err">#</span> <span class="err">集合</span>
<span class="n">redis</span><span class="o">></span> <span class="n">SADD</span> <span class="n">pat</span> <span class="s">"dog"</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">1</span>
<span class="n">redis</span><span class="o">></span> <span class="n">TYPE</span> <span class="n">pat</span>
<span class="n">set</span>
</code></pre></div></div>ShineDeRedis DEL 命令 - 该命令用于在 key 存在是删除 key。 Redis DEL 命令用于删除已存在的键。不存在的 key 会被忽略。 语法 redis DEL 命令基本语法如下: redis 127.0.0.1:6379> DEL KEY_NAMERedis数据类型2016-12-21T00:00:00+08:002016-12-21T00:00:00+08:00https://shinede.github.io//2016/12/21/Redis-data-type-1<h1 id="redis-数据类型">Redis 数据类型</h1>
<p>Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。</p>
<!--more-->
<h2 id="string字符串">String(字符串)</h2>
<p>string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。</p>
<p>string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。</p>
<p>string类型是Redis最基本的数据类型,一个键最大能存储512MB。</p>
<h3 id="实例">实例</h3>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">SET</span> <span class="n">name</span> <span class="s">"redis.net.cn"</span>
<span class="n">OK</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">GET</span> <span class="n">name</span>
<span class="s">"redis.net.cn"</span>
</code></pre></div></div>
<p>在以上实例中我们使用了 Redis 的 SET 和 GET 命令。键为 name,对应的值为redis.net.cn。</p>
<p><strong>注意:一个键最大能存储512MB。</strong></p>
<h2 id="hash哈希">Hash(哈希)</h2>
<p>Redis hash 是一个键值对集合。</p>
<p>Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。</p>
<h3 id="实例-1">实例</h3>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">HMSET</span> <span class="nl">user:</span><span class="mi">1</span> <span class="n">username</span> <span class="n">redis</span><span class="o">.</span><span class="na">net</span><span class="o">.</span><span class="na">cn</span> <span class="n">password</span> <span class="n">redis</span><span class="o">.</span><span class="na">net</span><span class="o">.</span><span class="na">cn</span> <span class="n">points</span> <span class="mi">200</span>
<span class="n">OK</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">HGETALL</span> <span class="nl">user:</span><span class="mi">1</span>
<span class="mi">1</span><span class="o">)</span> <span class="s">"username"</span>
<span class="mi">2</span><span class="o">)</span> <span class="s">"redis.net.cn"</span>
<span class="mi">3</span><span class="o">)</span> <span class="s">"password"</span>
<span class="mi">4</span><span class="o">)</span> <span class="s">"redis.net.cn"</span>
<span class="mi">5</span><span class="o">)</span> <span class="s">"points"</span>
<span class="mi">6</span><span class="o">)</span> <span class="s">"200"</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span>
</code></pre></div></div>
<p>以上实例中 hash 数据类型存储了包含用户脚本信息的用户对象。 实例中我们使用了 Redis HMSET, HEGTALL 命令,user:1 为键值。</p>
<p>每个 hash 可以存储 232 - 1 键值对(40多亿)。</p>
<h2 id="list列表">List(列表)</h2>
<p>Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。</p>
<h3 id="实例-2">实例</h3>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">lpush</span> <span class="n">redis</span><span class="o">.</span><span class="na">net</span><span class="o">.</span><span class="na">cn</span> <span class="nf">redis</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">1</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">lpush</span> <span class="n">redis</span><span class="o">.</span><span class="na">net</span><span class="o">.</span><span class="na">cn</span> <span class="nf">mongodb</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">2</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">lpush</span> <span class="n">redis</span><span class="o">.</span><span class="na">net</span><span class="o">.</span><span class="na">cn</span> <span class="nf">rabitmq</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">3</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">lrange</span> <span class="n">redis</span><span class="o">.</span><span class="na">net</span><span class="o">.</span><span class="na">cn</span> <span class="mi">0</span> <span class="mi">10</span>
<span class="mi">1</span><span class="o">)</span> <span class="s">"rabitmq"</span>
<span class="mi">2</span><span class="o">)</span> <span class="s">"mongodb"</span>
<span class="mi">3</span><span class="o">)</span> <span class="s">"redis"</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span>
</code></pre></div></div>
<p>列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。</p>
<h2 id="set集合">Set(集合)</h2>
<p>Redis的Set是string类型的无序集合。</p>
<p>集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。</p>
<p>sadd 命令</p>
<p>添加一个string元素到,key对应的set集合中,成功返回1,如果元素以及在集合中返回0,key对应的set不存在返回错误。</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">sadd</span> <span class="n">key</span> <span class="n">member</span>
</code></pre></div></div>
<h3 id="实例-3">实例</h3>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">sadd</span> <span class="n">redis</span><span class="o">.</span><span class="na">net</span><span class="o">.</span><span class="na">cn</span> <span class="nf">redis</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">1</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">sadd</span> <span class="n">redis</span><span class="o">.</span><span class="na">net</span><span class="o">.</span><span class="na">cn</span> <span class="nf">mongodb</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">1</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">sadd</span> <span class="n">redis</span><span class="o">.</span><span class="na">net</span><span class="o">.</span><span class="na">cn</span> <span class="nf">rabitmq</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">1</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">sadd</span> <span class="n">redis</span><span class="o">.</span><span class="na">net</span><span class="o">.</span><span class="na">cn</span> <span class="nf">rabitmq</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">0</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">smembers</span> <span class="n">redis</span><span class="o">.</span><span class="na">net</span><span class="o">.</span><span class="na">cn</span>
<span class="mi">1</span><span class="o">)</span> <span class="s">"rabitmq"</span>
<span class="mi">2</span><span class="o">)</span> <span class="s">"mongodb"</span>
<span class="mi">3</span><span class="o">)</span> <span class="s">"redis"</span>
</code></pre></div></div>
<p>注意:以上实例中 rabitmq 添加了两次,但根据集合内元素的唯一性,第二次插入的元素将被忽略。</p>
<p>集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。</p>
<h2 id="zsetsorted-set有序集合">zset(sorted set:有序集合)</h2>
<p>Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。</p>
<p>不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。</p>
<p>zset的成员是唯一的,但分数(score)却可以重复。</p>
<p><strong>zadd 命令</strong></p>
<p>添加元素到集合,元素在集合中存在则更新对应score</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">zadd</span> <span class="n">key</span> <span class="n">score</span> <span class="n">member</span>
</code></pre></div></div>
<h3 id="实例-4">实例</h3>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">zadd</span> <span class="n">redis</span><span class="o">.</span><span class="na">net</span><span class="o">.</span><span class="na">cn</span> <span class="mi">0</span> <span class="n">redis</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">1</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">zadd</span> <span class="n">redis</span><span class="o">.</span><span class="na">net</span><span class="o">.</span><span class="na">cn</span> <span class="mi">0</span> <span class="n">mongodb</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">1</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">zadd</span> <span class="n">redis</span><span class="o">.</span><span class="na">net</span><span class="o">.</span><span class="na">cn</span> <span class="mi">0</span> <span class="n">rabitmq</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">1</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">zadd</span> <span class="n">redis</span><span class="o">.</span><span class="na">net</span><span class="o">.</span><span class="na">cn</span> <span class="mi">0</span> <span class="n">rabitmq</span>
<span class="o">(</span><span class="n">integer</span><span class="o">)</span> <span class="mi">0</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">ZRANGEBYSCORE</span> <span class="n">redis</span><span class="o">.</span><span class="na">net</span><span class="o">.</span><span class="na">cn</span> <span class="mi">0</span> <span class="mi">1000</span>
<span class="mi">1</span><span class="o">)</span> <span class="s">"redis"</span>
<span class="mi">2</span><span class="o">)</span> <span class="s">"mongodb"</span>
<span class="mi">3</span><span class="o">)</span> <span class="s">"rabitmq"</span>
</code></pre></div></div>ShineDeRedis 数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。Redis 配置详解2016-12-21T00:00:00+08:002016-12-21T00:00:00+08:00https://shinede.github.io//2016/12/21/Redis-config-1<p>上一篇文章我们介绍了怎么安装Redis,那么在安装完成后我们应该怎么使用呢?这就需要我们来配置Redis 才能使用。
<!--more--></p>
<h2 id="redis-配置">Redis 配置</h2>
<p>Redis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf。</p>
<p>你可以通过 CONFIG 命令查看或设置配置项。</p>
<h3 id="语法">语法</h3>
<p>Redis CONFIG 命令格式如下:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">CONFIG</span> <span class="n">GET</span> <span class="n">CONFIG_SETTING_NAME</span>
</code></pre></div></div>
<h3 id="实例">实例</h3>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">CONFIG</span> <span class="n">GET</span> <span class="n">loglevel</span>
<span class="mi">1</span><span class="o">)</span> <span class="s">"loglevel"</span>
<span class="mi">2</span><span class="o">)</span> <span class="s">"notice"</span>
</code></pre></div></div>
<p>使用 * 号获取所有配置项:</p>
<p><strong>实例</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">CONFIG</span> <span class="n">GET</span> <span class="o">*</span>
<span class="mi">1</span><span class="o">)</span> <span class="s">"dbfilename"</span>
<span class="mi">2</span><span class="o">)</span> <span class="s">"dump.rdb"</span>
<span class="mi">3</span><span class="o">)</span> <span class="s">"requirepass"</span>
<span class="mi">4</span><span class="o">)</span> <span class="s">""</span>
<span class="mi">5</span><span class="o">)</span> <span class="s">"masterauth"</span>
<span class="mi">6</span><span class="o">)</span> <span class="s">""</span>
<span class="mi">7</span><span class="o">)</span> <span class="s">"unixsocket"</span>
<span class="mi">8</span><span class="o">)</span> <span class="s">""</span>
<span class="mi">9</span><span class="o">)</span> <span class="s">"logfile"</span>
<span class="mi">10</span><span class="o">)</span> <span class="s">""</span>
<span class="mi">11</span><span class="o">)</span> <span class="s">"pidfile"</span>
<span class="mi">12</span><span class="o">)</span> <span class="s">"/var/run/redis.pid"</span>
<span class="mi">13</span><span class="o">)</span> <span class="s">"maxmemory"</span>
<span class="mi">14</span><span class="o">)</span> <span class="s">"0"</span>
<span class="mi">15</span><span class="o">)</span> <span class="s">"maxmemory-samples"</span>
<span class="mi">16</span><span class="o">)</span> <span class="s">"3"</span>
<span class="mi">17</span><span class="o">)</span> <span class="s">"timeout"</span>
<span class="mi">18</span><span class="o">)</span> <span class="s">"0"</span>
<span class="mi">19</span><span class="o">)</span> <span class="s">"tcp-keepalive"</span>
<span class="mi">20</span><span class="o">)</span> <span class="s">"0"</span>
<span class="mi">21</span><span class="o">)</span> <span class="s">"auto-aof-rewrite-percentage"</span>
<span class="mi">22</span><span class="o">)</span> <span class="s">"100"</span>
<span class="mi">23</span><span class="o">)</span> <span class="s">"auto-aof-rewrite-min-size"</span>
<span class="mi">24</span><span class="o">)</span> <span class="s">"67108864"</span>
<span class="mi">25</span><span class="o">)</span> <span class="s">"hash-max-ziplist-entries"</span>
<span class="mi">26</span><span class="o">)</span> <span class="s">"512"</span>
<span class="mi">27</span><span class="o">)</span> <span class="s">"hash-max-ziplist-value"</span>
<span class="mi">28</span><span class="o">)</span> <span class="s">"64"</span>
<span class="mi">29</span><span class="o">)</span> <span class="s">"list-max-ziplist-entries"</span>
<span class="mi">30</span><span class="o">)</span> <span class="s">"512"</span>
<span class="mi">31</span><span class="o">)</span> <span class="s">"list-max-ziplist-value"</span>
<span class="mi">32</span><span class="o">)</span> <span class="s">"64"</span>
<span class="mi">33</span><span class="o">)</span> <span class="s">"set-max-intset-entries"</span>
<span class="mi">34</span><span class="o">)</span> <span class="s">"512"</span>
<span class="mi">35</span><span class="o">)</span> <span class="s">"zset-max-ziplist-entries"</span>
<span class="mi">36</span><span class="o">)</span> <span class="s">"128"</span>
<span class="mi">37</span><span class="o">)</span> <span class="s">"zset-max-ziplist-value"</span>
<span class="mi">38</span><span class="o">)</span> <span class="s">"64"</span>
<span class="mi">39</span><span class="o">)</span> <span class="s">"hll-sparse-max-bytes"</span>
<span class="mi">40</span><span class="o">)</span> <span class="s">"3000"</span>
<span class="mi">41</span><span class="o">)</span> <span class="s">"lua-time-limit"</span>
<span class="mi">42</span><span class="o">)</span> <span class="s">"5000"</span>
<span class="mi">43</span><span class="o">)</span> <span class="s">"slowlog-log-slower-than"</span>
<span class="mi">44</span><span class="o">)</span> <span class="s">"10000"</span>
<span class="mi">45</span><span class="o">)</span> <span class="s">"latency-monitor-threshold"</span>
<span class="mi">46</span><span class="o">)</span> <span class="s">"0"</span>
<span class="mi">47</span><span class="o">)</span> <span class="s">"slowlog-max-len"</span>
<span class="mi">48</span><span class="o">)</span> <span class="s">"128"</span>
<span class="mi">49</span><span class="o">)</span> <span class="s">"port"</span>
<span class="mi">50</span><span class="o">)</span> <span class="s">"6379"</span>
<span class="mi">51</span><span class="o">)</span> <span class="s">"tcp-backlog"</span>
<span class="mi">52</span><span class="o">)</span> <span class="s">"511"</span>
<span class="mi">53</span><span class="o">)</span> <span class="s">"databases"</span>
<span class="mi">54</span><span class="o">)</span> <span class="s">"16"</span>
<span class="mi">55</span><span class="o">)</span> <span class="s">"repl-ping-slave-period"</span>
<span class="mi">56</span><span class="o">)</span> <span class="s">"10"</span>
<span class="mi">57</span><span class="o">)</span> <span class="s">"repl-timeout"</span>
<span class="mi">58</span><span class="o">)</span> <span class="s">"60"</span>
<span class="mi">59</span><span class="o">)</span> <span class="s">"repl-backlog-size"</span>
<span class="mi">60</span><span class="o">)</span> <span class="s">"1048576"</span>
<span class="mi">61</span><span class="o">)</span> <span class="s">"repl-backlog-ttl"</span>
<span class="mi">62</span><span class="o">)</span> <span class="s">"3600"</span>
<span class="mi">63</span><span class="o">)</span> <span class="s">"maxclients"</span>
<span class="mi">64</span><span class="o">)</span> <span class="s">"4064"</span>
<span class="mi">65</span><span class="o">)</span> <span class="s">"watchdog-period"</span>
<span class="mi">66</span><span class="o">)</span> <span class="s">"0"</span>
<span class="mi">67</span><span class="o">)</span> <span class="s">"slave-priority"</span>
<span class="mi">68</span><span class="o">)</span> <span class="s">"100"</span>
<span class="mi">69</span><span class="o">)</span> <span class="s">"min-slaves-to-write"</span>
<span class="mi">70</span><span class="o">)</span> <span class="s">"0"</span>
<span class="mi">71</span><span class="o">)</span> <span class="s">"min-slaves-max-lag"</span>
<span class="mi">72</span><span class="o">)</span> <span class="s">"10"</span>
<span class="mi">73</span><span class="o">)</span> <span class="s">"hz"</span>
<span class="mi">74</span><span class="o">)</span> <span class="s">"10"</span>
<span class="mi">75</span><span class="o">)</span> <span class="s">"no-appendfsync-on-rewrite"</span>
<span class="mi">76</span><span class="o">)</span> <span class="s">"no"</span>
<span class="mi">77</span><span class="o">)</span> <span class="s">"slave-serve-stale-data"</span>
<span class="mi">78</span><span class="o">)</span> <span class="s">"yes"</span>
<span class="mi">79</span><span class="o">)</span> <span class="s">"slave-read-only"</span>
<span class="mi">80</span><span class="o">)</span> <span class="s">"yes"</span>
<span class="mi">81</span><span class="o">)</span> <span class="s">"stop-writes-on-bgsave-error"</span>
<span class="mi">82</span><span class="o">)</span> <span class="s">"yes"</span>
<span class="mi">83</span><span class="o">)</span> <span class="s">"daemonize"</span>
<span class="mi">84</span><span class="o">)</span> <span class="s">"no"</span>
<span class="mi">85</span><span class="o">)</span> <span class="s">"rdbcompression"</span>
<span class="mi">86</span><span class="o">)</span> <span class="s">"yes"</span>
<span class="mi">87</span><span class="o">)</span> <span class="s">"rdbchecksum"</span>
<span class="mi">88</span><span class="o">)</span> <span class="s">"yes"</span>
<span class="mi">89</span><span class="o">)</span> <span class="s">"activerehashing"</span>
<span class="mi">90</span><span class="o">)</span> <span class="s">"yes"</span>
<span class="mi">91</span><span class="o">)</span> <span class="s">"repl-disable-tcp-nodelay"</span>
<span class="mi">92</span><span class="o">)</span> <span class="s">"no"</span>
<span class="mi">93</span><span class="o">)</span> <span class="s">"aof-rewrite-incremental-fsync"</span>
<span class="mi">94</span><span class="o">)</span> <span class="s">"yes"</span>
<span class="mi">95</span><span class="o">)</span> <span class="s">"appendonly"</span>
<span class="mi">96</span><span class="o">)</span> <span class="s">"no"</span>
<span class="mi">97</span><span class="o">)</span> <span class="s">"dir"</span>
<span class="mi">98</span><span class="o">)</span> <span class="s">"/home/deepak/Downloads/redis-2.8.13/src"</span>
<span class="mi">99</span><span class="o">)</span> <span class="s">"maxmemory-policy"</span>
<span class="mi">100</span><span class="o">)</span> <span class="s">"volatile-lru"</span>
<span class="mi">101</span><span class="o">)</span> <span class="s">"appendfsync"</span>
<span class="mi">102</span><span class="o">)</span> <span class="s">"everysec"</span>
<span class="mi">103</span><span class="o">)</span> <span class="s">"save"</span>
<span class="mi">104</span><span class="o">)</span> <span class="s">"3600 1 300 100 60 10000"</span>
<span class="mi">105</span><span class="o">)</span> <span class="s">"loglevel"</span>
<span class="mi">106</span><span class="o">)</span> <span class="s">"notice"</span>
<span class="mi">107</span><span class="o">)</span> <span class="s">"client-output-buffer-limit"</span>
<span class="mi">108</span><span class="o">)</span> <span class="s">"normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60"</span>
<span class="mi">109</span><span class="o">)</span> <span class="s">"unixsocketperm"</span>
<span class="mi">110</span><span class="o">)</span> <span class="s">"0"</span>
<span class="mi">111</span><span class="o">)</span> <span class="s">"slaveof"</span>
<span class="mi">112</span><span class="o">)</span> <span class="s">""</span>
<span class="mi">113</span><span class="o">)</span> <span class="s">"notify-keyspace-events"</span>
<span class="mi">114</span><span class="o">)</span> <span class="s">""</span>
<span class="mi">115</span><span class="o">)</span> <span class="s">"bind"</span>
<span class="mi">116</span><span class="o">)</span> <span class="s">""</span>
</code></pre></div></div>
<h2 id="编辑配置">编辑配置</h2>
<p>你可以通过修改 redis.conf 文件或使用 CONFIG set 命令来修改配置。</p>
<h3 id="语法-1">语法</h3>
<p>CONFIG SET 命令基本语法:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">CONFIG</span> <span class="n">SET</span> <span class="n">CONFIG_SETTING_NAME</span> <span class="n">NEW_CONFIG_VALUE</span>
</code></pre></div></div>
<h3 id="实例-1">实例</h3>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">CONFIG</span> <span class="n">SET</span> <span class="n">loglevel</span> <span class="s">"notice"</span>
<span class="n">OK</span>
<span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="o">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">CONFIG</span> <span class="n">GET</span> <span class="n">loglevel</span>
<span class="mi">1</span><span class="o">)</span> <span class="s">"loglevel"</span>
<span class="mi">2</span><span class="o">)</span> <span class="s">"notice"</span>
</code></pre></div></div>
<h3 id="参数说明">参数说明</h3>
<p><strong>redis.conf 配置项说明如下:</strong></p>
<p>1、Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">daemonize</span> <span class="n">no</span>
</code></pre></div></div>
<p>2、 当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">pidfile</span> <span class="o">/</span><span class="n">var</span><span class="o">/</span><span class="n">run</span><span class="o">/</span><span class="n">redis</span><span class="o">.</span><span class="na">pid</span>
</code></pre></div></div>
<p>3、指定Redis监听端口,默认端口为6379,作者在自己的一篇博文中解释了为什么选用6379作为默认端口,因为6379在手机按键上MERZ对应的号码,而MERZ取自意大利歌女Alessia Merz的名字</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">port</span> <span class="mi">6379</span>
</code></pre></div></div>
<p>4、 绑定的主机地址</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">bind</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span>
</code></pre></div></div>
<p>5、 当 客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">timeout</span> <span class="mi">300</span>
</code></pre></div></div>
<p>6、 指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">loglevel</span> <span class="n">verbose</span>
</code></pre></div></div>
<p>7、日志记录方式,默认为标准输出,如果配置Redis为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/null</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">logfile</span> <span class="n">stdout</span>
</code></pre></div></div>
<p>8、 设置数据库的数量,默认数据库为0,可以使用SELECT <dbid>命令在连接上指定数据库id</dbid></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">databases</span> <span class="mi">16</span>
</code></pre></div></div>
<p>9、 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">save</span> <span class="o"><</span><span class="n">seconds</span><span class="o">></span> <span class="o"><</span><span class="n">changes</span><span class="o">></span>
</code></pre></div></div>
<p><strong>Redis默认配置文件中提供了三个条件:</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">save</span> <span class="mi">900</span> <span class="mi">1</span>
<span class="n">save</span> <span class="mi">300</span> <span class="mi">10</span>
<span class="n">save</span> <span class="mi">60</span> <span class="mi">10000</span>
</code></pre></div></div>
<p>分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改。</p>
<p>10、 指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">rdbcompression</span> <span class="n">yes</span>
</code></pre></div></div>
<p>11、 指定本地数据库文件名,默认值为dump.rdb</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">dbfilename</span> <span class="n">dump</span><span class="o">.</span><span class="na">rdb</span>
</code></pre></div></div>
<p>12、 指定本地数据库存放目录</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">dir</span> <span class="o">./</span>
</code></pre></div></div>
<p>13、 设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">slaveof</span> <span class="o"><</span><span class="n">masterip</span><span class="o">></span> <span class="o"><</span><span class="n">masterport</span><span class="o">></span>
</code></pre></div></div>
<p>14、 当master服务设置了密码保护时,slav服务连接master的密码</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">masterauth</span> <span class="o"><</span><span class="n">master</span><span class="o">-</span><span class="n">password</span><span class="o">></span>
</code></pre></div></div>
<p>15、设置Redis连接密码,如果配置了连接密码,客户端在连接Redis时需要通过AUTH <password>命令提供密码,默认关闭</password></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">requirepass</span> <span class="n">foobared</span>
</code></pre></div></div>
<p>16、设置同一时间最大客户端连接数,默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">maxclients</span> <span class="mi">128</span>
</code></pre></div></div>
<p>17、指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">maxmemory</span> <span class="o"><</span><span class="n">bytes</span><span class="o">></span>
</code></pre></div></div>
<p>18、 指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">appendonly</span> <span class="n">no</span>
</code></pre></div></div>
<p>19、指定更新日志文件名,默认为appendonly.aof</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">appendfilename</span> <span class="n">appendonly</span><span class="o">.</span><span class="na">aof</span>
</code></pre></div></div>
<p>20、 指定更新日志条件,共有3个可选值: no:表示等操作系统进行数据缓存同步到磁盘(快) always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全) everysec:表示每秒同步一次(折衷,默认值)</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">appendfsync</span> <span class="n">everysec</span>
</code></pre></div></div>
<p>21、 指定是否启用虚拟内存机制,默认值为no,简单的介绍一下,VM机制将数据分页存放,由Redis将访问量较少的页即冷数据swap到磁盘上,访问多的页面由磁盘自动换出到内存中(在后面的文章我会仔细分析Redis的VM机制)</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">vm</span><span class="o">-</span><span class="n">enabled</span> <span class="n">no</span>
</code></pre></div></div>
<p>22、 虚拟内存文件路径,默认值为/tmp/redis.swap,不可多个Redis实例共享</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">vm</span><span class="o">-</span><span class="n">swap</span><span class="o">-</span><span class="n">file</span> <span class="o">/</span><span class="n">tmp</span><span class="o">/</span><span class="n">redis</span><span class="o">.</span><span class="na">swap</span>
</code></pre></div></div>
<p>23、 将所有大于vm-max-memory的数据存入虚拟内存,无论vm-max-memory设置多小,所有索引数据都是内存存储的(Redis的索引数据 就是keys),也就是说,当vm-max-memory设置为0的时候,其实是所有value都存在于磁盘。默认值为0</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">vm</span><span class="o">-</span><span class="n">max</span><span class="o">-</span><span class="n">memory</span> <span class="mi">0</span>
</code></pre></div></div>
<p>24、 Redis swap文件分成了很多的page,一个对象可以保存在多个page上面,但一个page上不能被多个对象共享,vm-page-size是要根据存储的 数据大小来设定的,作者建议如果存储很多小对象,page大小最好设置为32或者64bytes;如果存储很大大对象,则可以使用更大的page,如果不 确定,就使用默认值</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">vm</span><span class="o">-</span><span class="n">page</span><span class="o">-</span><span class="n">size</span> <span class="mi">32</span>
</code></pre></div></div>
<p>25、 设置swap文件中的page数量,由于页表(一种表示页面空闲或使用的bitmap)是在放在内存中的,,在磁盘上每8个pages将消耗1byte的内存。</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">vm</span><span class="o">-</span><span class="n">pages</span> <span class="mi">134217728</span>
</code></pre></div></div>
<p>26、 设置访问swap文件的线程数,最好不要超过机器的核数,如果设置为0,那么所有对swap文件的操作都是串行的,可能会造成比较长时间的延迟。默认值为4</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">vm</span><span class="o">-</span><span class="n">max</span><span class="o">-</span><span class="n">threads</span> <span class="mi">4</span>
</code></pre></div></div>
<p>27、 设置在向客户端应答时,是否把较小的包合并为一个包发送,默认为开启</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">glueoutputbuf</span> <span class="n">yes</span>
</code></pre></div></div>
<p>28、指定在超过一定的数量或者最大的元素超过某一临界值时,采用一种特殊的哈希算法</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">hash</span><span class="o">-</span><span class="n">max</span><span class="o">-</span><span class="n">zipmap</span><span class="o">-</span><span class="n">entries</span> <span class="mi">64</span>
<span class="n">hash</span><span class="o">-</span><span class="n">max</span><span class="o">-</span><span class="n">zipmap</span><span class="o">-</span><span class="n">value</span> <span class="mi">512</span>
</code></pre></div></div>
<p>29、 指定是否激活重置哈希,默认为开启(后面在介绍Redis的哈希算法时具体介绍)</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">activerehashing</span> <span class="n">yes</span>
</code></pre></div></div>
<p>30、指定包含其它的配置文件,可以在同一主机上多个Redis实例之间使用同一份配置文件,而同时各个实例又拥有自己的特定配置文件</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">include</span> <span class="o">/</span><span class="n">path</span><span class="o">/</span><span class="n">to</span><span class="o">/</span><span class="n">local</span><span class="o">.</span><span class="na">conf</span>
</code></pre></div></div>ShineDe上一篇文章我们介绍了怎么安装Redis,那么在安装完成后我们应该怎么使用呢?这就需要我们来配置Redis 才能使用。Redis 安装2016-12-20T00:00:00+08:002016-12-20T00:00:00+08:00https://shinede.github.io//2016/12/20/Redis-install-all<p>Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
<!--more--></p>
<h2 id="redis-安装">Redis 安装</h2>
<h3 id="window-下安装">Window 下安装</h3>
<p><strong>下载地址:</strong> <a href="https://github.com/dmajkic/redis/downloads">https://github.com/dmajkic/redis/downloads</a></p>
<p>下载到的Redis支持32bit和64bit。根据自己实际情况选择,将64bit的内容cp到自定义盘符安装目录取名redis。 如 C:\reids
打开一个cmd窗口 使用cd命令切换目录到 C:\redis 运行 redis-server.exe redis.conf 。</p>
<p>如果想方便的话,可以把redis的路径加到系统的环境变量里,这样就省得再输路径了,后面的那个redis.conf可以省略,如果省略,会启用默认的。输入之后,会显示如下界面:</p>
<p><img src="http://7xsod9.com1.z0.glb.clouddn.com/redis-win.jpg" alt="###Redis安装" /></p>
<p>这时候另启一个cmd窗口,原来的不要关闭,不然就无法访问服务端了。</p>
<p>切换到redis目录下运行 <strong>redis-cli.exe -h 127.0.0.1 -p 6379 。</strong></p>
<p>设置键值对 <strong>set myKey abc</strong></p>
<p>取出键值对 <strong>get myKey</strong></p>
<p><img src="http://7xsod9.com1.z0.glb.clouddn.com/redis-win2.jpg" alt="###Redis安装" /></p>
<h3 id="linux-下安装">Linux 下安装</h3>
<p><strong>下载地址:</strong> <a href="http://www.redis.net.cn/download/">http://www.redis.net.cn/download/</a>,下载最新文档版本。</p>
<p>本教程使用的最新文档版本为 2.8.17,下载并安装:</p>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">$</span> <span class="n">wget</span> <span class="n">http</span><span class="p">:</span><span class="o">//</span><span class="n">download</span><span class="o">.</span><span class="n">redis</span><span class="o">.</span><span class="n">io</span><span class="o">/</span><span class="n">releases</span><span class="o">/</span><span class="n">redis</span><span class="o">-</span><span class="mf">2.8</span><span class="o">.</span><span class="mf">17.</span><span class="n">tar</span><span class="o">.</span><span class="n">gz</span>
<span class="err">$</span> <span class="n">tar</span> <span class="n">xzf</span> <span class="n">redis</span><span class="o">-</span><span class="mf">2.8</span><span class="o">.</span><span class="mf">17.</span><span class="n">tar</span><span class="o">.</span><span class="n">gz</span>
<span class="err">$</span> <span class="n">cd</span> <span class="n">redis</span><span class="o">-</span><span class="mf">2.8</span><span class="o">.</span><span class="mi">17</span>
<span class="err">$</span> <span class="n">make</span>
</code></pre></div></div>
<p>make完后 redis-2.8.17目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli</p>
<p>下面启动redis服务.</p>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">$</span> <span class="o">./</span><span class="n">redis</span><span class="o">-</span><span class="n">server</span>
</code></pre></div></div>
<p>注意这种方式启动redis 使用的是默认配置。也可以通过启动参数告诉redis使用指定配置文件使用下面命令启动。</p>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">$</span> <span class="o">./</span><span class="n">redis</span><span class="o">-</span><span class="n">server</span> <span class="n">redis</span><span class="o">.</span><span class="n">conf</span>
</code></pre></div></div>
<p>redis.conf是一个默认的配置文件。我们可以根据需要使用自己的配置文件。</p>
<p>启动redis服务进程后,就可以使用测试客户端程序redis-cli和redis服务交互了。 比如:</p>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">$</span> <span class="o">./</span><span class="n">redis</span><span class="o">-</span><span class="n">cli</span>
<span class="n">redis</span><span class="o">></span> <span class="nb">set</span> <span class="n">foo</span> <span class="n">bar</span>
<span class="n">OK</span>
<span class="n">redis</span><span class="o">></span> <span class="n">get</span> <span class="n">foo</span>
<span class="s">"bar"</span>
</code></pre></div></div>
<h3 id="ubuntu-下安装">Ubuntu 下安装</h3>
<p>在 Ubuntu 系统安装 Redi 可以使用以下命令:</p>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">$</span><span class="n">sudo</span> <span class="n">apt</span><span class="o">-</span><span class="n">get</span> <span class="n">update</span>
<span class="err">$</span><span class="n">sudo</span> <span class="n">apt</span><span class="o">-</span><span class="n">get</span> <span class="n">install</span> <span class="n">redis</span><span class="o">-</span><span class="n">server</span>
</code></pre></div></div>
<h3 id="启动-redis">启动 Redis</h3>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">$</span><span class="n">redis</span><span class="o">-</span><span class="n">server</span>
</code></pre></div></div>
<h3 id="查看-redis-是否启动">查看 redis 是否启动?</h3>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">$</span><span class="n">redis</span><span class="o">-</span><span class="n">cli</span>
</code></pre></div></div>
<p>以上命令将打开以下终端:</p>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="p">:</span><span class="mi">6379</span><span class="o">></span>
</code></pre></div></div>
<p>127.0.0.1 是本机 IP ,6379 是 redis 服务端口。现在我们输入 PING 命令。</p>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">redis</span> <span class="mf">127.0</span><span class="o">.</span><span class="mf">0.1</span><span class="p">:</span><span class="mi">6379</span><span class="o">></span> <span class="n">ping</span>
<span class="n">PONG</span>
</code></pre></div></div>
<p>以上说明我们已经成功安装了redis。</p>ShineDeRedis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。vim-markdown-toc 发布 v1.0 版2016-10-22T00:00:00+08:002016-10-22T00:00:00+08:00https://shinede.github.io//2016/10/22/vim-markdown-toc-release<p>前几天,第一款由我独立开发的 Vim 插件 vim-markdown-toc 升级了功能,发布了 v1.0 版本。</p>
<p>它的主要功能是为 Markdown 文件生成 toc(Table of Contents)、更新已经存在的 toc 和在保存时自动更新 toc。</p>
<p>说它是当前使用 Vim 编辑 Markdown 文件时维护 Table of Contents 的最佳解决方案应该不为过。
<!--more--></p>
<h2 id="下载地址">下载地址</h2>
<ul>
<li><a href="https://github.com/mzlogin/vim-markdown-toc">vim-markdown-toc</a></li>
</ul>
<h2 id="主要更新">主要更新</h2>
<ol>
<li>
<p>支持使用 <code class="highlighter-rouge">:UpdateToc</code> 命令更新已经存在的 toc。</p>
</li>
<li>
<p>支持保存时自动更新 toc。</p>
</li>
</ol>
<h2 id="功能演示">功能演示</h2>
<p><img src="https://raw.githubusercontent.com/mzlogin/vim-markdown-toc/master/screenshots/english.gif" alt="vim-markdown-toc-screenshot" /></p>
<h2 id="一些体会">一些体会</h2>
<ol>
<li>
<p>相比于 <a href="https://github.com/mzlogin/awesome-adb">awesome-adb</a> 的一千多个 Star,<a href="https://github.com/mzlogin/vim-markdown-toc">vim-markdown-toc</a> 的三十多个 Star 在我心目中含金量更高。</p>
</li>
<li>
<p>做能挣钱的东西,或者对自己有用的东西。</p>
<p>有天和我们组去年来的小朋友聊天,他说了一个观点我觉得很有道理:做能给自己产生经济效益的东西,你才有动力持续下去。虽然听起来功利,但不无道理。</p>
<p>这么一个插件显然不能挣钱,它属于第二种。本次更新的功能其实在半年前就有网友提过需求,见 <a href="https://github.com/mzlogin/vim-markdown-toc/issues/6">#6</a>,但我却迟迟没有动手。半年后的某个夜里,突然就决定要把这些做出来,并且花了几个小时就做完了。究其原因,还是因为自己现在有了需求,我现在要维护几份比较长的 Markdown 文档,如果每次手动去删除已有 toc 然后再次生成,虽然比纯手工写 toc 要不知道方便和准确到哪里去了,但归根结底还是不够完美。果然最后用着自己做的功能替自己省下不少重复劳动时,那种感觉也是很爽的。</p>
</li>
<li>
<p>酒香也怕巷子深。</p>
<p>发布了个人的项目后,适当地在相关的社区进行推广,让更多的人享受到你的劳动成果,帮助验证和反馈,也能给自己带来更多的成就感和关注度。</p>
</li>
</ol>ShineDe前几天,第一款由我独立开发的 Vim 插件 vim-markdown-toc 升级了功能,发布了 v1.0 版本。 它的主要功能是为 Markdown 文件生成 toc(Table of Contents)、更新已经存在的 toc 和在保存时自动更新 toc。 说它是当前使用 Vim 编辑 Markdown 文件时维护 Table of Contents 的最佳解决方案应该不为过。一道在知乎很火的 Java 题——如何输出 ab2016-09-20T00:00:00+08:002016-09-20T00:00:00+08:00https://shinede.github.io//2016/09/20/java-output-ab<p>这是一个源自知乎的话题,原贴链接:<a href="https://www.zhihu.com/question/50801791">一道百度的面试题,有大神会嘛?</a></p>
<p>虽然我不是大神,但我也点进去看了一下,思考了一会之后有了一些思路,然后去看其它人的答案的时候果然全都已经被各路大神们先想到并贴出来了,所以我就不去凑热闹写重复答案了,整理一下网友们的智慧在这里自娱自乐好了。
<!--more--></p>
<h2 id="题目">题目</h2>
<p><img src="/images/posts/java/output-ab.jpg" alt="java-output-ab" /></p>
<h2 id="思路一">思路一</h2>
<p>作为一个多年前也见过不少笔试题的少年,看到这个题目的第一想法是脑筋急转弯——注入一段逻辑直接改变原 if 结构。</p>
<h3 id="解法一">解法一</h3>
<p>填入内容 <code class="highlighter-rouge">true){System.out.print("a");}if(false</code>。</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">public</span> <span class="kt">void</span> <span class="nf">print</span><span class="o">()</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(</span><span class="kc">true</span><span class="o">)</span> <span class="o">{</span>
<span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">print</span><span class="o">(</span><span class="s">"a"</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">if</span> <span class="o">(</span><span class="kc">false</span><span class="o">)</span> <span class="o">{</span>
<span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">print</span><span class="o">(</span><span class="s">"a"</span><span class="o">);</span>
<span class="o">}</span> <span class="k">else</span> <span class="o">{</span>
<span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">print</span><span class="o">(</span><span class="s">"b"</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
</code></pre></div></div>
<p>类似地也可以填入 <code class="highlighter-rouge">true){System.out.print("ab");return;}if(false</code> 等。</p>
<p>当初大学时单纯的少年可是很难想出这样的套路的,时间改变了我们啊。</p>
<h2 id="思路二">思路二</h2>
<p>如果正经遵从题目的原代码结构,那就得想办法构造一段代码,既能输出 <code class="highlighter-rouge">a</code>,又能返回 <code class="highlighter-rouge">false</code>。</p>
<h3 id="解法二">解法二</h3>
<p>我也想到能否使用 <code class="highlighter-rouge">System.out.print</code> 的返回值来做文章,但奈何并不记得它返回什么,首先让我们复习一下 <code class="highlighter-rouge">PrintStream</code> 的 <code class="highlighter-rouge">print</code>、<code class="highlighter-rouge">println</code> 和 <code class="highlighter-rouge">printf</code> 方法的区别:</p>
<table>
<thead>
<tr>
<th>方法</th>
<th>功能</th>
<th>返回值</th>
</tr>
</thead>
<tbody>
<tr>
<td>print</td>
<td>打印一个值或者对象</td>
<td>void</td>
</tr>
<tr>
<td>println</td>
<td>打印并换行</td>
<td>void</td>
</tr>
<tr>
<td>printf</td>
<td>格式化打印</td>
<td>PrintStream</td>
</tr>
</tbody>
</table>
<p>所以适用的是 <code class="highlighter-rouge">printf</code>,它的返回值是 <code class="highlighter-rouge">PrintStream</code> 类型的 <code class="highlighter-rouge">System.out</code>,判它是否为空即可。</p>
<p>填入内容 <code class="highlighter-rouge">System.out.printf("a") == null</code>。</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">public</span> <span class="kt">void</span> <span class="nf">print</span><span class="o">()</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(</span><span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">printf</span><span class="o">(</span><span class="s">"a"</span><span class="o">)</span> <span class="o">==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
<span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">print</span><span class="o">(</span><span class="s">"a"</span><span class="o">);</span>
<span class="o">}</span> <span class="k">else</span> <span class="o">{</span>
<span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">print</span><span class="o">(</span><span class="s">"b"</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
</code></pre></div></div>
<p>经测试填入 <code class="highlighter-rouge">System.out.append("a") == null</code> 也是可以达到效果的。</p>
<h3 id="解法三">解法三</h3>
<p>仍然是思路二,但从匿名内部类来作文章。</p>
<p>实现代码:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">public</span> <span class="kt">void</span> <span class="nf">print</span><span class="o">()</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(</span><span class="k">new</span> <span class="n">Object</span><span class="o">()</span> <span class="o">{</span>
<span class="kt">boolean</span> <span class="nf">print</span><span class="o">()</span> <span class="o">{</span>
<span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">print</span><span class="o">(</span><span class="s">"a"</span><span class="o">);</span>
<span class="k">return</span> <span class="kc">false</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}.</span><span class="na">print</span><span class="o">())</span> <span class="o">{</span>
<span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">print</span><span class="o">(</span><span class="s">"a"</span><span class="o">);</span>
<span class="o">}</span> <span class="k">else</span> <span class="o">{</span>
<span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">print</span><span class="o">(</span><span class="s">"b"</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
</code></pre></div></div>
<p>这里利用的知识点是匿名内部类可以声明基类没有的新方法并且马上调用。</p>
<h3 id="解法四">解法四</h3>
<p>使用 Java 8 里的 lambda 来实现思路二。</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">public</span> <span class="kt">void</span> <span class="nf">print</span><span class="o">()</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(((</span><span class="n">BooleanSupplier</span><span class="o">)(()</span> <span class="o">-></span> <span class="o">{</span><span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">print</span><span class="o">(</span><span class="s">"a"</span><span class="o">);</span><span class="k">return</span> <span class="kc">false</span><span class="o">;})).</span><span class="na">getAsBoolean</span><span class="o">())</span> <span class="o">{</span>
<span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">print</span><span class="o">(</span><span class="s">"a"</span><span class="o">);</span>
<span class="o">}</span> <span class="k">else</span> <span class="o">{</span>
<span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">print</span><span class="o">(</span><span class="s">"b"</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
</code></pre></div></div>
<p>严格来讲这个不一定能算作正确答案,因为要增加 <code class="highlighter-rouge">import java.util.function.BooleanSupplier;</code>。</p>
<h2 id="脑洞大开">脑洞大开</h2>
<p>讲完严肃的解法,来看看网友 <a href="https://www.zhihu.com/people/qiong-xiao-zi-158">穷小子</a> 开脑洞的思路:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">public</span> <span class="kt">void</span> <span class="nf">print</span><span class="o">()</span> <span class="o">{</span>
<span class="c1">// if ( ) {</span>
<span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">print</span><span class="o">(</span><span class="s">"a"</span><span class="o">);</span>
<span class="c1">// } else {</span>
<span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">print</span><span class="o">(</span><span class="s">"b"</span><span class="o">);</span>
<span class="c1">// }</span>
<span class="o">}</span>
</code></pre></div></div>
<p>如果没有特意说明只能在括号里加东西,倒真是个妙计!</p>
<p>同样看得我一愣一愣的还有 <a href="https://www.zhihu.com/people/caiwei710">caiwei</a> 同学的答案,他和朋友们发现题目里少写了个大括号(真的),于是我们看到他的朋友老方的解决方案:</p>
<p><img src="/images/posts/java/add-brace.jpg" alt="add-brace" /></p>
<p>真是防不胜防啊~不过我喜欢!:+1:</p>
<h2 id="参考">参考</h2>
<ul>
<li><a href="https://www.zhihu.com/question/50801791/answer/122781965">RednaxelaFX 的回答</a></li>
<li><a href="https://www.zhihu.com/question/50801791/answer/122773831">仓鼠君 的回答</a></li>
<li><a href="https://www.zhihu.com/question/50801791/answer/122769426">放开那女孩 的回答</a></li>
<li><a href="https://www.zhihu.com/question/50801791/answer/122863062">穷小子 的回答</a></li>
<li><a href="https://www.zhihu.com/question/50801791/answer/122795854">caiwei 的回答</a></li>
</ul>ShineDe这是一个源自知乎的话题,原贴链接:一道百度的面试题,有大神会嘛? 虽然我不是大神,但我也点进去看了一下,思考了一会之后有了一些思路,然后去看其它人的答案的时候果然全都已经被各路大神们先想到并贴出来了,所以我就不去凑热闹写重复答案了,整理一下网友们的智慧在这里自娱自乐好了。