×

redis做二级缓存 red 数据

redis做二级缓存(php redis做mysql的缓存,怎么异步redis同步到mysql数据库)

admin admin 发表于2023-05-06 00:59:08 浏览39 评论0

抢沙发发表评论

本文目录

php redis做mysql的缓存,怎么异步redis同步到mysql数据库

redis是内存型数据库,mysql是硬盘型数据库,需要长久保存的就存mysql,不需要长期保存切频繁更新的就存redis,他们之间不需要同步!不然就是多此一举,性能反而更差!

redis作为数据库的缓存,但redis不支持sql查询如何解决

OnceDB是基于Redis实现的全文搜索数据库,可以像SQL数据库那样创建辅助索引,提高条件搜索的性能。

OnceDB并不改变Redis的数据存储结构,Redis数据库文件可以直接在OnceDB中操作,然后再返回Redis中使用。

# 索引搜索

## 搜索原理

全文搜索的性能比较差,可通过创建索引的办法提高性能,办法是为索引字段创建一个有序列表,然后在条件查询时,对这些有序列表做交集查询操作。

# 创建4条 Hash 数据

hmset article:001 poster dota visit 21 key js
hmset article:002 poster dota visit 11 key c
hmset article:003 poster like visit 34 key js
hmset article:004 poster like visit 44 key c

然后我们为上面的字段创建索引,权重分数设为: 202000201,一个关于时间的整数,值为article的ID值

# 维护索引

zadd *article.poster:dota 20200201 001 20200201 002
zadd *article.poster:like 20200201 003 20200201 004
zadd *article.key:js 20200201 001 20200201 003
zadd *article.key:c 20200201 002 20200201 004

# visit 的索引直接使用其值为权重分数

zadd *article.visit 21 001 11 002 34 003 44 004

```

## 按索引查询

求 *article.key:js 和 *article.poster:dota 两个索引的交集,并存放在 *tmp1 有序列表中:

```

zinterstore *tmp1 2 *article.key:js *article.poster:dota
》 1

```

然后 *tmp1 存放的就是 满足 key = js 和 poster = dota 条件的 ID集合:

```

zrange *tmp1 0 -1
》 001

```

可使用zrangehmget指令打印相应的HASH值:

```

zrangehmget *tmp1 0 -1 article: key poster
1) 001
2) 40400402
3) js
4) dota
5)
6)

```

其结果与直接全文搜索 key = js 和 poster = dota 的搜索结果相同

```

hsearch article:* key = js poster = dota
1) article:001
2) js
3) dota

```

## 搜索范围

比如要搜索 visit 数量在 20 到 30 之间,key = js 的数据,可通过控制权重的方法实现

创建临时索引,只取 *article.visit 的权重 和 key = js 的数据

```

zinterstore *tmp2 2 *article.key:js *article.visit weights 0 1
》 2

```

取 20 ~ 30 之间的数据

```

zrangebyscore *tmp2 20 30
》 001

```

可使用 zrangehmgetbyscore 打印出对应的hash数据:

```

zrangehmgetbyscore *tmp2 20 30 article: key visit
1) 001
2) 21
3) js
4) 21
5)
6)

```

其结果与使用全文搜索的结果一致:

```

hsearch article:* visit 》= 20 visit 《= 30 key = js
1) article:001
2) 21
3)
4) js

```

因为里面有两个相同的字段,visit 》= 20 visit 《= 30,搜索结果只会输出一个,第3行重复的字段会输出空。

OnceDB更多扩展指令可查看: [OnceDB 搜索、查询、计算、求和指令

```

remove article @ 001 key ? poster ? visit /

```

还可以自定义索引名称,权重分数,更多说明可查看:

OnceDB数据修改和查询帮助文档

https://oncedb.com/wiki/view/oncedb-server.zh-CN/data_modify_and_query