0%

版本:Solr 8

简介

现实生活中我们都知道大多数网站或应用都必须具有某种搜索功能,问题是搜索功能往往是巨大的资源消耗并且它们由于沉重的数据库加载而拖垮你的应用的性能。在项目开发过程中为了提高查询效率和降低数据库的压力,因此就将查询量大的数据放到Solr中。

  • Solr是一个高性能,采用Java开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。
  • Solr可以和Hadoop一起使用。由于Hadoop处理大量数据,Solr帮助我们从这么大的源中找到所需的信息。不仅限于搜索,Solr也可以用于存储目的。像其他NoSQL数据库一样,它是一种非关系数据存储和处理技术。
  • Solr本身也可以看成数据库,(NoSql类型),但它比数据库搜索速度更快,所以在项目中我们一般把搜索的部分交给Solr。
  • 数据库本身不能实现分词效果,而只能使用模糊查询,但是模糊查询非常低效,查询速度比较慢,由于在实际生活中,一般搜索是用的比较多的,这样数据库压力自然就很大,所以我们就让供专业的solr来做搜索功能
阅读全文 »

Redis缓存雪崩/穿透/击穿

当一个系统为 Server => Redis => DB 的架构,请求先在Redis中查找数据,查找失败则在数据库中查找,在高并发场景下,以下几种情形容易造成系统宕机。

缓存雪崩

统一时间大量的缓存key失效,造成数据库响应不即时。

解决方案:

  • 不设置key失效
  • 将key平均分布在不同节点上
  • 设置缓存刷新的定时任务
阅读全文 »

懒汉模式(lazy)

一般我们所熟知的单例(Singleton)懒汉模式是如下写法:

public class Singleton {

private static Singleton instance = null;

private Singleton() {}

public static Singleton getInstance() {
if(instance == null) {
instance = new Singleton();
}
return instance;
}
}

但是这种写法在多线程情况下,有可能一个线程已经执行到了if(instance == null)然后判断为true,此时线程切换,另一个线程也执行到这一步,同样判定为true。接下来两个线程都会分别创建一个实例,这就打破了单例的原则。为了解决这一问题,可以给getInstance()方法添加同步锁。
阅读全文 »

实验楼练习地址:Redis基础教程,本文拷贝自实验楼

Redis简介

Redis 是什么

REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统。Redis 提供了一些丰富的数据结构,包括 lists、sets、ordered sets 以及 hashes ,当然还有和 Memcached 一样的 strings 结构。Redis 当然还包括了对这些数据结构的丰富操作。

Redis 常被称作是一款数据结构服务器(data structure server)。Redis 的键值可以包括字符串(strings)类型,同时它还包括哈希(hashes)、列表(lists)、集合(sets)和 有序集合(sorted sets)等数据类型。

对于这些数据类型,你可以执行原子操作。例如:对字符串进行附加操作(append);递增哈希中的值;向列表中增加元素;计算集合的交集、并集与差集等。

阅读全文 »

同学写了个上传文件的网站:share 用于解决linux下QQ传文件的问题。我突发奇想,做一命令行下的share客户端。完整代码见share-terminal

需要用到:

  • zsh
  • xmllint
  • curl
  • wget

首先网站地址是:https://share.whoisnian.com,准备从服务器上拉取文件列表,存在本地/tmp/share.list,下载的时候可以快速补全文件名,创建一个名为share的bash脚本:

阅读全文 »