0%

Geospatial(地理空间)

Geospatial 底层的实现原理其实就是 Zset。我们可以使用 Zset 命令来操作 Geospatial。

1
2
3
4
5
6
7
geoadd 键 经度1 纬度1 元素名1 [经度2 纬度2 元素名2 ...]        #添加一个或多个地理位置元素到键中
geopos 键 元素名1 [元素名2 ...] #获取一个或多个元素的坐标值
geodist 键 元素名1 元素名2 [m/km/mi/ft] #获取两个元素之前的距离,默认使用米做单位(米/千米/英里/英尺)

georadius 键 经度 纬度 数值 m/km/mi/ft [withdist] [withcoord] [count 数值] #以给定的经纬度为中心,找出指定数值半径内的其它元素。(withdist:中心距离 withcoord:其它元素定位信息 count:筛选出指定的数量)
georadiusbymember 键 元素名 数值 m/km/mi/ft [withdist] [withcoord] [count 数值] #以给定的元素位置为中心,找出指定数值半径内的所有元素(包括中心元素)
geohash 键 元素名1 [元素名2 ...] #将会返回11个字符的 geohash 字符串。如果两个字符串越像,则距离越近。

阅读全文 »

Key-Value(键值对)

1
2
3
4
5
6
7
8
set 键 值        #设置键值对(能够直接覆盖存在键的值)
get#获取键相应的值
keys * #查看所有键
exists 键 #判断键是否存在
move 数据库 #移动键到别的数据库
expire 键 秒数 #设置键的过期时间
ttl 键 #查看键剩余时间
type 键 #查看键类型

String(字符串)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
append 键 字符串  #追加字符串,如果当前 key 不存在,就相当于设置键值对。
strlen 键 #获取字符串长度
incr 键 #值加一
decr 键 #值减一
incrby 键 步长 #指定值增量
decrby 键 步长 #指定值减量

getrange 键 数值1 数值2 #闭区间截取字符串。当数值2为-1时,表示从数值1的下标开始截取到最后一个值。
setrange 键 数值 字符串 #替换为指定位置开始的字符串
setex 键 秒数 值 #设置键值对,并会在指定秒数后过期。(set with expire)
setnx 键 值 #如果键不存在就创建(分布式锁中经常使用)(set if not exist)

mset 键1 值1 [键2 值2 ...] #设置一个或多个键值对(能够直接覆盖存在键的值)
mget 键1 键2 [键3 ...] #获取一个或多个键相应的值
msetnx 键1 值1 [键2 值2 ...] #如果不存在就创建键值对。但是其具有原子性,就是其中一个键存在,其它键就都不会被创建。
getset 键 值 #先获取键相应的值,再设置键相应的值。

#对象创建的两种方式
set user:1 {name:guest997,age:18} #设置键为 user:1,值为 json 字符。
mset user:1:name guest997 user:1:age 18 #设置两个键分别为 user:1:name 和 user:1:age,值分别为 guest997 和 18。
阅读全文 »

Redis(Remote Dictionary Server)

Redis 是一个开源的使用 C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库。它可以用作数据库、缓存和消息中间件。

  • 内存存储、持久化
  • 高速缓存
  • 发布订阅系统
  • 地图信息分析
  • 计时器、计数器

安装并运行测试 Redis

下载并上传 Redis 压缩包到 Linux 服务器下的 /opt 目录下。(程序一般都放在这)

阅读全文 »

主从复制 + 读写分离

在使用读写分离之前应该考虑使用缓存能不能解决问题。读写分离主要应对的是数据库读并发。

读写分离主要是为了将对数据库的读写操作分散到不同的数据库节点上。一般情况下,我们都会选择一主多从,也就是一台主数据库负责写,其它的从数据库负责读。主库和从库之间会进行数据同步,以保证从库中数据的准确性。这样的架构实现起来比较简单,并且也符合系统的写少读多的特点。

分库分表

解决数据库存储压力的答案之一就是分库分表。

阅读全文 »

说明:

使用插件迁移的话,图片会使用 wordpress 的链接,这显然是不符合我们的需求的,有些人可能会使用 cdn,这些倒是没有啥问题,但是如果是把图片存在服务器上的,服务器在的话还好,如果不在了,那这些图片就都全部失效了。所以这里我就讲下图片通过脚本迁移到本地并将文章中的外链进行更换。

正文:

在运行下面的脚本前,需要保证所需依赖都安装完成了。具体缺少什么依赖,运行时都会有提示。为了保证能够正常访问到 wordpress 的博客,脚本中设置了本地代理,当然如果能直接正常访问是不需要设置代理的,注释掉即可。

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
import mimetypes
import os
import regex
import requests

os.environ["http_proxy"] = "http://127.0.0.1:1081"
os.environ["https_proxy"] = "http://127.0.0.1:1081"

if __name__ == '__main__':
p = input("输入 hexo 的 source 目录")
# 去尾
if p.endswith("\\"):
p = p[:len(p) - 1]
image_p = p + "\\images"
post_p = p + "\\_posts"
# 查看博文目录是否存在
if not os.path.exists(post_p):
print("路径下没_posts路径,请重新输入")
exit(1)
else:
os.chmod(p, 777)
# 查看图片目录是否存在
if not os.path.exists(image_p):
os.makedirs(p + "\\images")
else:
os.chmod(p, 777)
# 循环目录下每一个.md 文件
for filename in os.listdir(post_p):
if filename.endswith(".md"):
print(filename)
path = post_p + "\\" + filename
# 以utf8编码读取
f = open(path, "r", encoding='utf8', errors='ignore')
i = 0
content = f.read()
f.close()
# 匹配 markdown 中的图片 即 ![tag](url)
for text in regex.findall(r"\!\[[^\s]*\]\([a-zA-z]+://[^\s]*\)", content):
print(text)
# 提取 tag 内容
tag = regex.findall(r"\!\[[^\s]*\](?=\([a-zA-z]+://[^\s]*\))", text)[0]
# 提取 url 内容
urldata = regex.findall(r"(?<=\!\[[^\s]*\])\([a-zA-z]+://[^\s]*\)", text)[0]
# 去掉括号
u = urldata[1:len(urldata) - 1]
# 提取当前文章的名字加上编号即为图片名字
name = filename + "-" + str(i)
# 获取图片
response = requests.get(u)
# 取请求头 content-type 属性获取扩展名如.png/.jpg
content_type = response.headers['content-type']
extension = mimetypes.guess_extension(content_type)
# 请求返回内容
img = response.content
# 写入图片文件
with open(image_p + "\\" + name + extension, 'wb') as f:
f.write(img)
f.close()
# 新引用地址
new_u = "/images/" + name + extension
# 替换原文
content = content.replace(text, tag + "(" + new_u + ")")
i += 1
# 写入文章文件
f = open(path, "w", encoding="utf8")
f.write(content)
f.close()
阅读全文 »

说明:

hexo 以及 next 主题的安装过程就不赘述了,注意:next 主题的7和8版本是分开来的,7版本:https://github.com/theme-next/hexo-theme-next,8版本:https://github.com/next-theme/hexo-theme-next。至于为什么分开来,貌似团队内部的矛盾,而想要安装什么版本,就看你们自己了。(我安装的是8版本)

正文:

  • hexo 目录下运行下面的命令安装迁移插件:
1
npm install hexo-migrator-wordpress --save
阅读全文 »