-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlocal-search.xml
170 lines (81 loc) · 44.3 KB
/
local-search.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title>CentOS7离线安装Python3环境</title>
<link href="/2024/08/09/CentOS7%E7%A6%BB%E7%BA%BF%E5%AE%89%E8%A3%85Python3%E7%8E%AF%E5%A2%83/"/>
<url>/2024/08/09/CentOS7%E7%A6%BB%E7%BA%BF%E5%AE%89%E8%A3%85Python3%E7%8E%AF%E5%A2%83/</url>
<content type="html"><![CDATA[<h2 id="1-安装环境准备"><a href="#1-安装环境准备" class="headerlink" title="1.安装环境准备"></a>1.安装环境准备</h2><p>python3环境依赖包:py3_lib.tar.gz</p><p>python3安装包:Python-3.9.9.tar.xz</p><p>百度网盘链接:<a href="https://pan.baidu.com/s/1ZVPsCw5UtHbWr2VpmidgVw?pwd=w5hi">https://pan.baidu.com/s/1ZVPsCw5UtHbWr2VpmidgVw?pwd=w5hi</a> </p><h2 id="2-上传python3环境依赖包和安装包,并解压"><a href="#2-上传python3环境依赖包和安装包,并解压" class="headerlink" title="2.上传python3环境依赖包和安装包,并解压"></a>2.上传python3环境依赖包和安装包,并解压</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><code class="hljs shell"><span class="hljs-meta prompt_"># </span><span class="language-bash">先创建文件夹</span><br>mkdir /usr/local/python3<br> <br>cd /usr/local/python3<br><span class="hljs-meta prompt_"># </span><span class="language-bash">上传python环境依赖包到此目录下,解压</span><br>tar -zxvf py3_lib.tar.gz<br><span class="hljs-meta prompt_">#</span><span class="language-bash">进入解压目录</span><br>cd py3<br><span class="hljs-meta prompt_">#</span><span class="language-bash">强制安装全部依赖</span><br>rpm -ivh *.rpm --force --nodeps<br> <br>cd /usr/local/python3<br><span class="hljs-meta prompt_"># </span><span class="language-bash">上传python3安装包到此目录下,解压</span><br>tar -xvJf Python-3.9.9.tar.xz<br><span class="hljs-meta prompt_">#</span><span class="language-bash">进入解压目录</span><br>cd Python-3.9.9<br><span class="hljs-meta prompt_">#</span><span class="language-bash">开始安装python3</span><br>./configure --prefix=/usr/local/python3<br><span class="hljs-meta prompt_">#</span><span class="language-bash">执行此命令需要gcc可先查看当前Linux是否安装gcc: gcc -v</span><br>make && make install<br></code></pre></td></tr></table></figure><p>执行成功会出现 <strong>Successfully</strong></p><img src="/2024/08/09/CentOS7%E7%A6%BB%E7%BA%BF%E5%AE%89%E8%A3%85Python3%E7%8E%AF%E5%A2%83/s2.jpg" class=""><h2 id="3-配置软连接,并检查是否安装成功"><a href="#3-配置软连接,并检查是否安装成功" class="headerlink" title="3.配置软连接,并检查是否安装成功"></a>3.配置软连接,并检查是否安装成功</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs shell"><span class="hljs-meta prompt_">#</span><span class="language-bash">创建软连接</span><br>ln -s /usr/local/python3/bin/python3 /usr/bin/python3<br>ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3<br><span class="hljs-meta prompt_">#</span><span class="language-bash">验证版本</span><br>python3<br><span class="hljs-meta prompt_"># </span><span class="language-bash">查看版本</span><br>python3 -V<br>pip3 -V<br></code></pre></td></tr></table></figure><h2 id="4-其他情况"><a href="#4-其他情况" class="headerlink" title="4.其他情况"></a>4.其他情况</h2><p>执行 :<code>./configure --prefix=/usr/local/python3 </code> 结束的数据会提示:</p><img src="/2024/08/09/CentOS7%E7%A6%BB%E7%BA%BF%E5%AE%89%E8%A3%85Python3%E7%8E%AF%E5%A2%83/s1.jpg" class=""><p>出现次状况不要去执行他给的命令,忽略就好,要不然最后的 <code>make && make install</code> 会执行失败</p>]]></content>
<categories>
<category>Python3</category>
</categories>
<tags>
<tag>Linux</tag>
</tags>
</entry>
<entry>
<title>CentOS安装RabbitMQ</title>
<link href="/2024/07/11/CentOS%E5%AE%89%E8%A3%85RabbitMQ/"/>
<url>/2024/07/11/CentOS%E5%AE%89%E8%A3%85RabbitMQ/</url>
<content type="html"><![CDATA[<h3 id="1、下载安装启动RabbitMQ"><a href="#1、下载安装启动RabbitMQ" class="headerlink" title="1、下载安装启动RabbitMQ"></a>1、下载安装启动RabbitMQ</h3><h4 id="1-1、下载RabbitMQ"><a href="#1-1、下载RabbitMQ" class="headerlink" title="1.1、下载RabbitMQ"></a>1.1、下载RabbitMQ</h4><p><strong>下载地址</strong>:<a href="https://github.com/rabbitmq/rabbitmq-server/releases?q=3.8.14&expanded=true">https://github.com/rabbitmq/rabbitmq-server/releases?q=3.8.14&expanded=true</a></p><img src="/2024/07/11/CentOS%E5%AE%89%E8%A3%85RabbitMQ/s1.jpg" class=""><h4 id="1-2、下载Erlang"><a href="#1-2、下载Erlang" class="headerlink" title="1.2、下载Erlang"></a>1.2、下载Erlang</h4><p><strong>下载地址</strong>:<a href="https://packagecloud.io/rabbitmq/erlang/packages/el/7/erlang-23.2.7-2.el7.x86_64.rpm">https://packagecloud.io/rabbitmq/erlang/packages/el/7/erlang-23.2.7-2.el7.x86_64.rpm</a></p><p>点击右上角的 <strong>Download</strong></p><img src="/2024/07/11/CentOS%E5%AE%89%E8%A3%85RabbitMQ/s2.jpg" class=""><h4 id="1-3、安装Erlang"><a href="#1-3、安装Erlang" class="headerlink" title="1.3、安装Erlang"></a>1.3、安装Erlang</h4><p>首先将下载好的文件上传到服务器,创建一个文件夹用来存放文件</p><img src="/2024/07/11/CentOS%E5%AE%89%E8%A3%85RabbitMQ/s3.jpg" class=""><p>开始解压安装 <strong>erlang</strong></p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs shell"><span class="hljs-meta prompt_"># </span><span class="language-bash">解压</span><br>rpm -Uvh erlang-23.2.7-2.el7.x86_64.rpm<br><span class="hljs-meta prompt_"></span><br><span class="hljs-meta prompt_"># </span><span class="language-bash">安装</span><br>yum install -y erlang<br></code></pre></td></tr></table></figure><img src="/2024/07/11/CentOS%E5%AE%89%E8%A3%85RabbitMQ/s4.jpg" class=""><p>安装完成后查看版本号</p><img src="/2024/07/11/CentOS%E5%AE%89%E8%A3%85RabbitMQ/s5.jpg" class=""><h4 id="1-4、安装Socat"><a href="#1-4、安装Socat" class="headerlink" title="1.4、安装Socat"></a>1.4、安装Socat</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm<br></code></pre></td></tr></table></figure><img src="/2024/07/11/CentOS%E5%AE%89%E8%A3%85RabbitMQ/s6.jpg" class=""><h4 id="1-5、安装RabbitMQ"><a href="#1-5、安装RabbitMQ" class="headerlink" title="1.5、安装RabbitMQ"></a>1.5、安装RabbitMQ</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs shell"><span class="hljs-meta prompt_"># </span><span class="language-bash">解压</span><br>rpm -Uvh rabbitmq-server-3.8.14-1.el7.noarch.rpm<br><span class="hljs-meta prompt_"></span><br><span class="hljs-meta prompt_"># </span><span class="language-bash">安装</span><br>yum install -y rabbitmq-server<br></code></pre></td></tr></table></figure><img src="/2024/07/11/CentOS%E5%AE%89%E8%A3%85RabbitMQ/s7.jpg" class=""><h4 id="1-6、启动RabbitMQ服务"><a href="#1-6、启动RabbitMQ服务" class="headerlink" title="1.6、启动RabbitMQ服务"></a>1.6、启动RabbitMQ服务</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs shell"><span class="hljs-meta prompt_"># </span><span class="language-bash">启动rabbitmq</span><br>systemctl start rabbitmq-server<br><span class="hljs-meta prompt_"></span><br><span class="hljs-meta prompt_"># </span><span class="language-bash">查看rabbitmq状态</span><br>systemctl status rabbitmq-server<br></code></pre></td></tr></table></figure><p>显示<code>active</code>则表示服务安装并启动成功</p><img src="/2024/07/11/CentOS%E5%AE%89%E8%A3%85RabbitMQ/s8.jpg" class=""><p><strong>其他命令:</strong></p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><code class="hljs shell"><span class="hljs-meta prompt_"># </span><span class="language-bash">设置rabbitmq服务开机自启动</span><br>systemctl enable rabbitmq-server<br><span class="hljs-meta prompt_"></span><br><span class="hljs-meta prompt_"># </span><span class="language-bash">关闭rabbitmq服务</span><br>systemctl stop rabbitmq-server<br><span class="hljs-meta prompt_"></span><br><span class="hljs-meta prompt_"># </span><span class="language-bash">重启rabbitmq服务</span><br>systemctl restart rabbitmq-server<br><span class="hljs-meta prompt_"></span><br><span class="hljs-meta prompt_"># </span><span class="language-bash">禁止开启启动</span><br>systemctl disable rabbitmq-server.service<br><span class="hljs-meta prompt_"></span><br><span class="hljs-meta prompt_"># </span><span class="language-bash">查看rabbitmq开机启动状态 enabled:开启, disabled:关闭</span><br>systemctl is-enabled rabbitmq-server.service<br></code></pre></td></tr></table></figure><h3 id="2、RabbitMQWeb管理界面及授权操作"><a href="#2、RabbitMQWeb管理界面及授权操作" class="headerlink" title="2、RabbitMQWeb管理界面及授权操作"></a>2、RabbitMQWeb管理界面及授权操作</h3><p>默认情况下,rabbitmq没有安装web端的客户端软件,需要安装才可以生效</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs shell"><span class="hljs-meta prompt_"># </span><span class="language-bash">查看插件列表</span><br>rabbitmq-plugins list<br><span class="hljs-meta prompt_"></span><br><span class="hljs-meta prompt_"># </span><span class="language-bash">打开RabbitMQWeb管理界面插件</span><br>rabbitmq-plugins enable rabbitmq_management<br></code></pre></td></tr></table></figure><img src="/2024/07/11/CentOS%E5%AE%89%E8%A3%85RabbitMQ/s9.jpg" class=""><p>然后我们打开浏览器,访问<code>服务器ip:15672</code>,就可以看到管理界面</p><img src="/2024/07/11/CentOS%E5%AE%89%E8%A3%85RabbitMQ/s10.jpg" class=""><p><code>rabbitmq</code>有一个默认的账号密码<code>guest</code>,但该情况仅限于本机localhost进行访问,所以需要添加一个远程登录的用户</p><h4 id="2-1、添加远程用户"><a href="#2-1、添加远程用户" class="headerlink" title="2.1、添加远程用户"></a>2.1、添加远程用户</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs shell"><span class="hljs-meta prompt_"># </span><span class="language-bash">添加用户</span><br>rabbitmqctl add_user 用户名 密码<br><span class="hljs-meta prompt_"></span><br><span class="hljs-meta prompt_"># </span><span class="language-bash">设置用户角色,分配操作权限</span><br>rabbitmqctl set_user_tags 用户名 角色<br><span class="hljs-meta prompt_"></span><br><span class="hljs-meta prompt_"># </span><span class="language-bash">为用户添加资源权限(授予访问虚拟机根节点的所有权限)</span><br>rabbitmqctl set_permissions -p / 用户名 ".*" ".*" ".*"<br></code></pre></td></tr></table></figure><p><strong>角色有四种</strong>:</p><ul><li><code>administrator</code>:可以登录控制台、查看所有信息、并对rabbitmq进行管理</li><li><code>monToring</code>:监控者;登录控制台,查看所有信息</li><li><code>policymaker</code>:策略制定者;登录控制台指定策略</li><li><code>managment</code>:普通管理员;登录控制</li></ul><p>这里创建用户<code>root,密码</code>200381<code>,设置</code>adminstator`角色,赋予所有权限</p><img src="/2024/07/11/CentOS%E5%AE%89%E8%A3%85RabbitMQ/s11.jpg" class=""><p>其他指令:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs shell"><span class="hljs-meta prompt_"># </span><span class="language-bash">修改密码</span><br>rabbitmqctl change_ password 用户名 新密码<br><span class="hljs-meta prompt_"></span><br><span class="hljs-meta prompt_"># </span><span class="language-bash">删除用户</span><br>rabbitmqctl delete_user 用户名<br><span class="hljs-meta prompt_"></span><br><span class="hljs-meta prompt_"># </span><span class="language-bash">查看用户清单</span><br>rabbitmqctl list_users<br></code></pre></td></tr></table></figure>]]></content>
<tags>
<tag>RabbitMQ</tag>
</tags>
</entry>
<entry>
<title>Neo4j基础命令</title>
<link href="/2024/02/26/Neo4j%E5%9F%BA%E7%A1%80%E5%91%BD%E4%BB%A4/"/>
<url>/2024/02/26/Neo4j%E5%9F%BA%E7%A1%80%E5%91%BD%E4%BB%A4/</url>
<content type="html"><![CDATA[<h3 id="1-创建一个简单的三国关系数据库"><a href="#1-创建一个简单的三国关系数据库" class="headerlink" title="1.创建一个简单的三国关系数据库"></a>1.创建一个简单的三国关系数据库</h3><p> <strong>使用下面的Cypher语句:</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs cypher">CREATE (n1:`人物` {name: '刘备'}) -[:`关系`{relationship:'兄长'}]-> (n2:`人物` {name: '关羽'}),<br>(n2) -[:`关系`{relationship:'兄长'}]-> (n3:`人物` {name: '张飞'}),<br>(n1) -[:`关系`{relationship:'兄长'}]-> (n3),<br>(n1) -[:`关系`{relationship:'主公'}]-> (n4:`人物` {name: '赵云'}),<br>(n1) -[:`关系`{relationship:'对手'}]-> (n5:`人物` {name: '曹操'});<br></code></pre></td></tr></table></figure><img src="/2024/02/26/Neo4j%E5%9F%BA%E7%A1%80%E5%91%BD%E4%BB%A4/s1.jpg" class=""><p><strong>说明:</strong></p><p> • 标签名和关系类型是非ASCII字符(例如中文)或者包含空格时,可以用反引号 (`)包含起来;</p><p> • 使用变量n1、n2… 来保存和引用创建了的节点; </p><p> • 可以在创建节点和关系的同时创建属性; </p><p> • 关系必须是有向的; • 这里使用通用的’关系’来代表人物之间的关系,仅作示例目的,并没有考虑实际建模的需要。</p><p><strong>在Cypher语句中:</strong> </p><p> • CREATE用来创建节点和属性 • 可以一次性创建多个节点和属性</p><p> • 可以使用变量保存创建的节点和属性</p><p> • 节点可以拥有一个或多个标签,也可以没有</p><p> • 关系必须指定关系类型</p><h3 id="2-查询图数据库"><a href="#2-查询图数据库" class="headerlink" title="2.查询图数据库"></a>2.查询图数据库</h3><p><strong>使用下面的Cypher语句:</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs cypher">match (n) return n;<br>或者<br>match path = () -- () return path;<br></code></pre></td></tr></table></figure><p>得到下面的数据</p><img src="/2024/02/26/Neo4j%E5%9F%BA%E7%A1%80%E5%91%BD%E4%BB%A4/s2.jpg" class=""><p><strong>二者的区别在于:</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs cypher">match (n) return n;<br>只返回所有的节点;Neo4j浏览器自动将节点之间的关系也从数据库中读取出来<br>match path = () -- () return path;<br>返回所有节点和关系<br></code></pre></td></tr></table></figure><p><strong>提示:</strong>可以取消这个选项让 Neo4j 浏览器不再自动读取结果节点中的关系</p><img src="/2024/02/26/Neo4j%E5%9F%BA%E7%A1%80%E5%91%BD%E4%BB%A4/s3.jpg" class=""><p><strong>下面演示更多的查询案例:</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><code class="hljs cypher">//寻找 刘备 的节点<br>match (n:人物{name:'刘备'}) retrurn n;<br>或者<br>match (n:人物) where n.name = '刘备' return n;<br><br>//查询 刘备 的兄弟<br>match (n:人物{name:'刘备'}) - [:关系{relationship:'兄长'}] -> (n1) return n1;<br><br>//寻找 刘备 的小弟(兄弟的兄弟)<br>match (n:人物{name:'刘备'}) - [:关系*2{relationship:'兄长'}] -> (n1) return n1;<br><br>//寻找 刘备 的所有社会关系,关系可以是双向<br>match (n:人物{name:'刘备'}) - [:关系] -> (n1) return n1;<br><br>如果说“兄弟的敌人是我的敌人”,试试看,能不能找到谁是张飞的敌人?<br>match (n:人物{name:'张飞'})-[:关系{relationship:'兄长'}]-(n1)-[:关系{relationship:'对手'}]-(n2) return n2;<br></code></pre></td></tr></table></figure><h3 id="3-更改和显示节点标签"><a href="#3-更改和显示节点标签" class="headerlink" title="3.更改和显示节点标签"></a>3.更改和显示节点标签</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><code class="hljs cypher">// 为 刘备 增加两个标签<br>match (n:人物{name:'刘备'}) set n:皇帝:好人;<br><br>// 显示 刘备 节点的标签和属性<br>match (n:人物{name:'刘备'}) return labels(n) AS nodeLabel ,keys(n) AS nodeProperties, n.name;<br><br>// 删除 刘备的 好人 标签<br>match (n:人物{name:'刘备'}) remove n:好人;<br><br>// 显示节点的标签和属性,以及关系的类型和属性,并以表状结构返回结果<br>match (n:人物{name:'刘备'}) -[r] -(n1) <br>return type(r) AS relationshipType, keys(r) AS relationshipProperties, labels(n1) AS nodeLabel,<br>Keys(n1) AS nodeProperties,n1.name;<br></code></pre></td></tr></table></figure><h3 id="4-更改属性"><a href="#4-更改属性" class="headerlink" title="4.更改属性"></a>4.更改属性</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs cypher">// 为 刘备 增加性别属性<br>match (n:人物{name:'刘备'}) set n.genre = '男';<br><br>// 删除 刘备 的性别标签,当属性值为空(null) 时s'j'k数据库会删除该属性<br>match (n:人物{name:'刘备'}) set n.genre = null;<br></code></pre></td></tr></table></figure><h3 id="5-删除节点和关系"><a href="#5-删除节点和关系" class="headerlink" title="5.删除节点和关系"></a>5.删除节点和关系</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><code class="hljs cypher">// 如果节点没有关系<br>match (n:人物{name:'刘备'}) delete n;<br> <br>// 然后节点有关系,使用 detach delete 会先删除连接到该节点的所有关系,然后再删除节点<br>match (n:人物{name:'刘备'}) detach delete n;<br> <br>// 删除所有节点,如果节点有关系,也删除节点<br>match (n) detach delete n;<br><br>// 仅删除关系,保留节点<br>match (n:人物{name:'刘备'}) -[r] -() delete r;<br></code></pre></td></tr></table></figure><p><strong>提示:</strong>删除全库也可以去删除 neo4j 安装目录下面的 <strong>data/databases/graph.db文件夹</strong>。</p><h3 id="6-关于-Id-的节点"><a href="#6-关于-Id-的节点" class="headerlink" title="6.关于 Id 的节点"></a>6.关于 Id 的节点</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs cypher">// 根据数据库中的节点 Id 寻找节点<br>match (n) where id(n) = 0 return n;<br></code></pre></td></tr></table></figure>]]></content>
<categories>
<category>Neo4j</category>
</categories>
<tags>
<tag>Neo4j命令</tag>
</tags>
</entry>
<entry>
<title>Redis实现自增ID</title>
<link href="/2024/02/08/Redis%E5%AE%9E%E7%8E%B0%E8%87%AA%E5%A2%9EID/"/>
<url>/2024/02/08/Redis%E5%AE%9E%E7%8E%B0%E8%87%AA%E5%A2%9EID/</url>
<content type="html"><![CDATA[<h3 id="全局唯一ID生成策略"><a href="#全局唯一ID生成策略" class="headerlink" title="全局唯一ID生成策略"></a>全局唯一ID生成策略</h3><p><strong>·UUID</strong></p><p><strong>·Redis自增</strong></p><p><strong>·snowflake算法</strong></p><p><strong>·数据库自增</strong></p><h3 id="Redis-自增-ID-策略"><a href="#Redis-自增-ID-策略" class="headerlink" title="Redis 自增 ID 策略"></a>Redis 自增 ID 策略</h3><p class="note note-success"> 1. 每天一个key,方便统计订单量</p><p class="note note-success"> 2. ID构造是 <b>时间戳</b> + <b>计数器</b></p><p>实现代码:</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><code class="hljs java"><span class="hljs-meta">@Component</span><br><span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> <span class="hljs-title class_">RedisIdWorker</span> {<br><br> <span class="hljs-meta">@Resource</span><br> <span class="hljs-keyword">private</span> StringRedisTemplate stringRedisTemplate;<br><br> <span class="hljs-comment">//开始时间戳</span><br> <span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">final</span> <span class="hljs-type">long</span> <span class="hljs-variable">BEGIN_TIMESTAMP</span> <span class="hljs-operator">=</span> <span class="hljs-number">1640995200L</span>;<br><br> <span class="hljs-comment">//序列号的位数</span><br> <span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">final</span> <span class="hljs-type">long</span> <span class="hljs-variable">COUNT_BITS</span> <span class="hljs-operator">=</span> <span class="hljs-number">32</span>;<br><br> <span class="hljs-keyword">public</span> <span class="hljs-type">long</span> <span class="hljs-title function_">nextId</span><span class="hljs-params">(String keyPrefix)</span> {<br> <span class="hljs-comment">// 1.生成时间戳</span><br> <span class="hljs-type">LocalDateTime</span> <span class="hljs-variable">now</span> <span class="hljs-operator">=</span> LocalDateTime.now();<br> <span class="hljs-type">long</span> <span class="hljs-variable">newSecond</span> <span class="hljs-operator">=</span> now.toEpochSecond(ZoneOffset.UTC);<br> <span class="hljs-type">long</span> <span class="hljs-variable">timestamp</span> <span class="hljs-operator">=</span> newSecond - BEGIN_TIMESTAMP;<br> <span class="hljs-comment">// 2.生成序列号</span><br> <span class="hljs-comment">// 2.1.获取当前日期,精确到天</span><br> <span class="hljs-type">String</span> <span class="hljs-variable">date</span> <span class="hljs-operator">=</span> now.format(DateTimeFormatter.ofPattern(<span class="hljs-string">"yyyy:MM:dd"</span>));<br> <span class="hljs-comment">// 2.2.自增长</span><br> <span class="hljs-type">long</span> <span class="hljs-variable">count</span> <span class="hljs-operator">=</span> stringRedisTemplate.opsForValue().increment(<span class="hljs-string">"icr:"</span> + keyPrefix + <span class="hljs-string">":"</span> + date);<br> <span class="hljs-comment">// 3.拼接并返回</span><br> <span class="hljs-keyword">return</span> timestamp << COUNT_BITS | count;<br> }<br>}<br></code></pre></td></tr></table></figure><p>创建一个500个线程池,然后创建一个任务,每一个任务来就执行100次,总共提交300次,测试代码:</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><code class="hljs java"><span class="hljs-meta">@Resource</span><br><span class="hljs-keyword">private</span> RedisIdWorker redisIdWorker;<br><br><span class="hljs-keyword">private</span> <span class="hljs-keyword">final</span> <span class="hljs-type">ExecutorService</span> <span class="hljs-variable">es</span> <span class="hljs-operator">=</span> Executors.newFixedThreadPool(<span class="hljs-number">500</span>);<br><br><span class="hljs-meta">@Test</span><br><span class="hljs-keyword">void</span> <span class="hljs-title function_">testIdWorker</span><span class="hljs-params">()</span> <span class="hljs-keyword">throws</span> InterruptedException {<br> <span class="hljs-type">CountDownLatch</span> <span class="hljs-variable">latch</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">CountDownLatch</span>(<span class="hljs-number">300</span>);<br> <span class="hljs-type">Runnable</span> <span class="hljs-variable">task</span> <span class="hljs-operator">=</span> () -> {<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> <span class="hljs-variable">i</span> <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i < <span class="hljs-number">100</span>; i++) {<br> <span class="hljs-type">long</span> <span class="hljs-variable">id</span> <span class="hljs-operator">=</span> redisIdWorker.nextId(<span class="hljs-string">"order"</span>);<br> System.out.println(<span class="hljs-string">"id = "</span> + id);<br> }<br> latch.countDown();<br> };<br> <span class="hljs-type">long</span> <span class="hljs-variable">begin</span> <span class="hljs-operator">=</span> System.currentTimeMillis();<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> <span class="hljs-variable">i</span> <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i < <span class="hljs-number">300</span>; i++) {<br> es.submit(task);<br> }<br> latch.await();<br> <span class="hljs-type">long</span> <span class="hljs-variable">end</span> <span class="hljs-operator">=</span> System.currentTimeMillis();<br><br> System.out.println(<span class="hljs-string">"time = "</span> + (end - begin));<br>}<br></code></pre></td></tr></table></figure><p>执行之后查看Redis,ID自增长到30000</p><img src="/2024/02/08/Redis%E5%AE%9E%E7%8E%B0%E8%87%AA%E5%A2%9EID/s1.jpg" class="">]]></content>
<categories>
<category>Redis</category>
</categories>
<tags>
<tag>唯一ID</tag>
</tags>
</entry>
<entry>
<title>Linux配置Neo4j</title>
<link href="/2024/02/07/Linux%E9%85%8D%E7%BD%AENeo4j/"/>
<url>/2024/02/07/Linux%E9%85%8D%E7%BD%AENeo4j/</url>
<content type="html"><![CDATA[<h3 id="1-Docker-镜像准备"><a href="#1-Docker-镜像准备" class="headerlink" title="1.Docker 镜像准备"></a>1.Docker 镜像准备</h3><p>我安装的是 <strong>3.5.5</strong>版本的,所以就是 :docker pull neo4j:3.5.5</p><figure class="highlight dockerfile"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs dockerfile">//寻找镜像<br>docker search neo4j<br><br>//拉取镜像<br>docker pull neo4j(:版本号) //缺省 “:版本号” 时默认安装latest版本的<br><br>//查看镜像<br>docker images<br></code></pre></td></tr></table></figure><h3 id="2、启动配置修改"><a href="#2、启动配置修改" class="headerlink" title="2、启动配置修改"></a>2、启动配置修改</h3><figure class="highlight dockerfile"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs dockerfile">docker <span class="hljs-keyword">run</span><span class="language-bash"> -d --name container_name \ //-d表示容器后台运行 --name指定容器名字</span><br> -p <span class="hljs-number">7474</span>:<span class="hljs-number">7474</span> -p <span class="hljs-number">7687</span>:<span class="hljs-number">7687</span> \ //映射容器的端口号到宿主机的端口号<br> -v /home/neo4j/data:/data \ //把容器内的数据目录挂载到宿主机的对应目录下<br> -v /home/neo4j/logs:/logs \ //挂载日志目录<br> -v /home/neo4j/conf:/var/lib/neo4j/conf //挂载配置目录<br> -v /home/neo4j/import:/var/lib/neo4j/import \ //挂载数据导入目录<br> --<span class="hljs-keyword">env</span> NEO4J_AUTH=neo4j/password \ //设定数据库的名字的访问密码<br> neo4j:<span class="hljs-number">4.2</span>.<span class="hljs-number">2</span> //指定使用的镜像 及版本号 默认laster<br></code></pre></td></tr></table></figure><p>我的运行命令是:NEO4J_AUTH是可以指定的</p><figure class="highlight kotlin"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs kotlin">docker run -d --name neo4j -p <span class="hljs-number">7474</span>:<span class="hljs-number">7474</span> -p <span class="hljs-number">7687</span>:<span class="hljs-number">7687</span> -v /opt/elastdocker-<span class="hljs-number">1.19</span><span class="hljs-number">.0</span>/elasticsearch/<span class="hljs-keyword">data</span>/neo4j/<span class="hljs-keyword">data</span>:/<span class="hljs-keyword">data</span> -v /opt/elastdocker-<span class="hljs-number">1.19</span><span class="hljs-number">.0</span>/elasticsearch/<span class="hljs-keyword">data</span>/neo4j/logs:/logs -v /opt/elastdocker-<span class="hljs-number">1.19</span><span class="hljs-number">.0</span>/elasticsearch/<span class="hljs-keyword">data</span>/neo4j/conf:/<span class="hljs-keyword">var</span>/lib/neo4j/conf -v /opt/elastdocker-<span class="hljs-number">1.19</span><span class="hljs-number">.0</span>/elasticsearch/<span class="hljs-keyword">data</span>/neo4j/<span class="hljs-keyword">import</span>:/<span class="hljs-keyword">var</span>/lib/neo4j/<span class="hljs-keyword">import</span> --env NEO4J_AUTH=neo4j/<span class="hljs-number">200381</span> neo4j<br></code></pre></td></tr></table></figure><h3 id="3-查看是否成功运行"><a href="#3-查看是否成功运行" class="headerlink" title="3.查看是否成功运行"></a>3.查看是否成功运行</h3><p><strong>输入:</strong>docker ps 查看以运行的容器</p><img src="/2024/02/07/Linux%E9%85%8D%E7%BD%AENeo4j/s1.jpg" class=""><h3 id="4-浏览器查看"><a href="#4-浏览器查看" class="headerlink" title="4.浏览器查看"></a>4.浏览器查看</h3><p><a href="http://ip:7474/browser/">http://IP:7474/browser/</a></p><img src="/2024/02/07/Linux%E9%85%8D%E7%BD%AENeo4j/s2.jpg" class="">]]></content>
<categories>
<category>Docker</category>
</categories>
<tags>
<tag>Neo4j</tag>
</tags>
</entry>
<entry>
<title>黑马点评</title>
<link href="/2024/02/03/%E9%BB%91%E9%A9%AC%E7%82%B9%E8%AF%84/"/>
<url>/2024/02/03/%E9%BB%91%E9%A9%AC%E7%82%B9%E8%AF%84/</url>
<content type="html"><![CDATA[<p>在学习黑马的 Reids 时,P37 留了一个课后作业,不过应该写在 service 层里面而不是写在 controller 层里面。</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br></pre></td><td class="code"><pre><code class="hljs java"><span class="hljs-meta">@RestController</span><br><span class="hljs-meta">@RequestMapping("/shop-type")</span><br><span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> <span class="hljs-title class_">ShopTypeController</span> {<br> <span class="hljs-meta">@Resource</span><br> <span class="hljs-keyword">private</span> IShopTypeService typeService;<br> <span class="hljs-meta">@Resource</span><br> <span class="hljs-keyword">private</span> StringRedisTemplate stringRedisTemplate;<br><br> <span class="hljs-meta">@GetMapping("list")</span><br> <span class="hljs-keyword">public</span> Result <span class="hljs-title function_">queryTypeList</span><span class="hljs-params">()</span> {<br><br> <span class="hljs-type">String</span> <span class="hljs-variable">key</span> <span class="hljs-operator">=</span> CACHE_SHOP_TYPE_KEY;<br> <span class="hljs-comment">// 1.查询redis缓存</span><br> List<String> typeJson = stringRedisTemplate.opsForList().range(key, <span class="hljs-number">0</span>, -<span class="hljs-number">1</span>);<br> <span class="hljs-comment">// 2.判断是否命中</span><br> <span class="hljs-keyword">if</span> (CollectionUtil.isNotEmpty(typeJson)) {<br> <span class="hljs-comment">// 2.0 如果为空对象(防止缓存穿透时存入的空对象)</span><br> <span class="hljs-keyword">if</span> (StrUtil.isBlank(typeJson.get(<span class="hljs-number">0</span>))) {<br> <span class="hljs-keyword">return</span> Result.fail(<span class="hljs-string">"商品分类信息为空!"</span>);<br> }<br> <span class="hljs-comment">// 2.1 命中则转换List<String> -> List<ShopType> 并返回、</span><br> List<ShopType> typeList = <span class="hljs-keyword">new</span> <span class="hljs-title class_">ArrayList</span><>();<br> <span class="hljs-keyword">for</span> (String jsonString : typeJson) {<br> <span class="hljs-type">ShopType</span> <span class="hljs-variable">shopType</span> <span class="hljs-operator">=</span> JSONUtil.toBean(jsonString, ShopType.class);<br> typeList.add(shopType);<br> }<br> <span class="hljs-keyword">return</span> Result.ok(typeList);<br> }<br> <span class="hljs-comment">// 3. 未命中,查询数据库</span><br> List<ShopType> typeList = typeService.query().orderByAsc(<span class="hljs-string">"sort"</span>).list();<br> <span class="hljs-comment">// 3.1 数据库中不存在</span><br> <span class="hljs-keyword">if</span> (CollectionUtil.isEmpty(typeList)) {<br> <span class="hljs-comment">// 添加空对象到redis,解决缓存穿透</span><br> stringRedisTemplate.opsForList().rightPushAll(key, CollectionUtil.newArrayList(<span class="hljs-string">""</span>));<br> stringRedisTemplate.expire(key, CACHE_NULL_TTL, TimeUnit.MINUTES);<br> <span class="hljs-comment">// 返回错误</span><br> <span class="hljs-keyword">return</span> Result.fail(<span class="hljs-string">"商品分类信息为空!"</span>);<br> }<br> <span class="hljs-comment">// 3.2 数据库中存在,转换List<ShopType> -> List<String> 类型</span><br> List<String> shopTypeList = <span class="hljs-keyword">new</span> <span class="hljs-title class_">ArrayList</span><>();<br> <span class="hljs-keyword">for</span> (ShopType shopType : typeList) {<br> <span class="hljs-type">String</span> <span class="hljs-variable">jsonStr</span> <span class="hljs-operator">=</span> JSONUtil.toJsonStr(shopType);<br> shopTypeList.add(jsonStr);<br> }<br> <span class="hljs-comment">// 4.写入redis缓存, 有顺序只能RPUSH</span><br> stringRedisTemplate.opsForList().rightPushAll(key, shopTypeList);<br> <span class="hljs-comment">// 5. 返回</span><br> <span class="hljs-keyword">return</span> Result.ok(typeList);<br><br><span class="hljs-comment">// List<ShopType> typeList = typeService</span><br><span class="hljs-comment">// .query().orderByAsc("sort").list();</span><br><span class="hljs-comment">// return Result.ok(typeList);</span><br> }<br></code></pre></td></tr></table></figure>]]></content>
<categories>
<category>Redis</category>
</categories>
<tags>
<tag>黑马点评</tag>
</tags>
</entry>
<entry>
<title>测试</title>
<link href="/2024/01/29/Boot%E6%95%B4%E5%90%88Redis%E6%90%AD%E5%BB%BA/"/>
<url>/2024/01/29/Boot%E6%95%B4%E5%90%88Redis%E6%90%AD%E5%BB%BA/</url>
<content type="html"><![CDATA[<p></p>]]></content>
<categories>
<category>测试</category>
</categories>
</entry>
</search>