Redisearch在Redis上面实现了一个搜索引擎,但与其他Redis搜索库不同,它不使用内部数据结构,如排序集。
这也可以实现更高级的功能,如文本查询的完全词组匹配和数字过滤,这对传统的redis搜索几乎是不可能或高效的。
本机 Mac
服务器 CentOS 7.3
1、安装 Redis, 最新版本 ->
2、配置 Redis,编辑 redis.conf,修改三处
3、安装 Redisearch,在 redis-4.0.1 同级目录下执行, 官网 ->
4、启动 Redis
1、使用 Maven 安装最新的 Jedis,方便依赖
2、使用 Maven 安装最新的 JRedisearch,方便依赖
1、在 IDEA 中新建 Maven 工程,添加如下依赖
2、编写测试程序 Application.java
3、执行结果
速度快,但是对中文搜索支持不好,如上所示,搜索“视频”时,field4中有“视频项目”却没有出现在结果中,需要将“视频项目”隔开成“视频 项目”才行。
Gorm是Go语言开发用的比较多的一个ORM。它的功能比较全:
但是这篇文章中并不会直接看Gorm的源码,我们会先从database/sql分析。原因是Gorm也是基于这个包来封装的一些功能。所以只有先了解了database/sql包才能更加好的理解Gorm源码。
database/sql 其实也是一个对于mysql驱动的上层封装。”github.com/go-sql-driver/mysql”就是一个对于mysql的驱动,database/sql 就是在这个基础上做的基本封装包含连接池的使用
下面这个是最基本的增删改查 *** 作
*** 作分下面几个步骤:
因为Gorm的连接池就是使用database/sql包中的连接池,所以这里我们需要学习一下包里的连接池的源码实现。其实所有连接池最重要的就是连接池对象、获取函数、释放函数下面来看一下database/sql中的连接池。
DB对象
获取方法
释放连接方法
连接池的实现有很多方法,在database/sql包中使用的是chan阻塞 使用map记录等待列表,等到有连接释放的时候再把连接传入等待列表中的chan 不在阻塞返回连接。
之前我们看到的Redigo是使用一个chan 来阻塞,然后释放的时候放入空闲列表,在往这一个chan中传入struct{}{},让程序继续 获取的时候再从空闲列表中获取。并且使用的是链表的结构来存储空闲列表。
database/sql 是对于mysql驱动的封装,然而Gorm则是对于database/sql的再次封装。让我们可以更加简单的实现对于mysql数据库的 *** 作。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)