我眼中的 Redis

栏目: 数据库 · 发布时间: 5年前

内容简介:打开其实我对

引言

打开 Microsoft To-Do ,发现 Redis 的学习计划还躺在那里。

我眼中的 Redis

其实我对 Redis 的理解,仅仅停留在我认识这个单词的层面上。

学习

简介

本来对这个 Redis 没什么兴趣的,不就是一个缓存的数据库而已吗?直到上次配置 spring-redis 的时候,发现这个东西没有用户名。

spring:
  redis:
    host: 127.0.0.1
    port: 6379
    password:

配置如上所示,只有主机、端口和密码,和普通的 MySQL 或其他数据库不同。

我眼中的 Redis

Redis 是一个使用 ANSI C 编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库。

我们熟知的就是 Redis 的缓存, Redis 采用 C 编写,运行异常的快。是有磁盘存储支持的内存数据库!

适用于数据变化快且数据库大小可遇见(适合内存容量)的应用程序。

使用场景:股票价格、数据分析、实时数据搜集、实时通讯。

NoSQL

Redis 属于 NoSQLNoSQL = Not Only SQL

如今数据量越来越大,传统的关系型数据库已经无法应付如此大数据的需求了。

举个例子:假设我们使用关系型数据库存储朋友圈,那一天会产生多少数据?再查询的时候数据库不就死了吗?

我眼中的 Redis

这让我想起了我之前关注的一个帖子:腾讯微信的后台数据库到底是怎么设计的?无知的人相谈甚欢,最后好像是官方的哥们是在看不下去了,回复:谁告诉你们微信用的是关系型数据库?

普通关系型数据库,如果只查询的话效率很高?如果算上读写的话?那可能传统的数据库都承受不住高并发。

重要的是关系型数据库没法扩展,大家想一想,因为数据之间是有关系的,所以数据库扩展绝对不像扩展后台服务规模一样再拎个服务器出来那么简单。

我眼中的 Redis

由此可见,在数据量日渐增长的今天,为了解决大数据量与高并发的难题, NoSQL 应运而生。

NoSQL 产品主要有四类:

类型 特点 代表 适用场景
键值对存储 能实现快速查询,但存储的数据缺少结构化 Redis 内容缓存,主要用于处理大数据的高访问负载
列存储数据库 查找速度快,可扩展性强,更容易进行分布式扩展,但功能相对局限 HBase 分布式的文件系统
文档数据库 数据结构要求不严格,查询性能不高,而且缺乏统一的查询语法 MongoDB Web 应用(相较于普通的 Key-Value ,其 Value 是结构化的)
图形数据库 利用图结构相关算法,但需要对整个图做计算才能得出结果,不容易分布式 Neo4j 社交网络,推荐系统,专注于构建关系图谱

我眼中的 Redis

这些数据库的名称大家或多或少应该听说过吧?今天才真正知道它们的作用,各有其特长,我们需根据业务场景动态选择。 Facebook 的消息存储采用的就是 HBase 数据库,支持大数据进行随机、实时访问。

NoSQL 因为数据之间都是没有关系的,所以易扩展,同时具有很高的读写性能,很适合高并发场景。

历史

2008 年,意大利的一家创业公司 Merzia 推出了一款基于 MySQL 的网站实时统计系统 LLOOGG

没过多久,创始人 Salvatore SanfilippoMySQL 的性能大失所望,于是他决定自己写一个数据库。牛人就是牛人,我们就算质疑 MySQL 的性能,想写也写不出来啊?!

2009 年, Salvatore Sanfilippo 完成了数据库的编写,这就是 Redis

我眼中的 Redis

Salvatore SanfilippoRedis 开源,并一直进行着 Redis 的开发,直到今天。我们熟知的 GithubStackOverflow 、新浪微博等公司都是 Redis 的用户。

缓存

传统的缓存代码需要这样写,很冗长,都是重复的代码。

ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();

logger.info("判断 Redis 中是否有Key");
if (redisTemplate.hasKey(url)) {
    logger.info("Redis命中,从Redis中获取");
    return valueOperations.get(url);
}

logger.info("发起Get请求");
ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);

logger.info("存入缓存");
valueOperations.set(url, response.getBody(), TIME_OUT, TimeUnit.MINUTES);

感谢 Spring AOP ,我们可以使用注解实现缓存功能。

@Cacheable("cacheName")
public List<Student> findAll() {
    return studentRepository.findAll();
}

使用注解实现缓存很简单,同时 @Cacheable 还有许多的高级用法,以后与大家详述。

操作

Redis 有三种动作:

GET :根据键查找值。

SET :给定键存储值。

DEL :删除键中的值。

然后就是 Redis 的数据结构,这个觉得暂时还不需要知道,毕竟现在使用的是现成的 @Cacheable 注解,还不需要我们手动去操作 Redis

一如代码深似海,软件之路很广很远。生命有限的我们不能把所有东西都精通,我们要在学习成本与能力提升之间进行权衡。

总结

故不积跬步,无以至千里;不积小流,无以成江海。骐骥一跃,不能十步,驽马十驾,功在不舍。


以上所述就是小编给大家介绍的《我眼中的 Redis》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

智能革命

智能革命

李彦宏 等 / 中信出版集团 / 2017-5-1 / 68.00元

人类历史上的历次技术革命,都带来了人类感知和认知能力的不断提升,从而使人类知道更多,做到更多,体验更多。以此为标准,李彦宏在本书中将人工智能定义为堪比任何一次技术革命的伟大变革,并且明确提出,在技术与人的关系上,智能革命不同于前几次技术革命,不是人去适应机器,而是机器主动来学习和适应人类,并同人类一起学习和创新这个世界。“人工智能”正式写入2017年政府工作报告,折射出未来人工智能产业在我国经济发......一起来看看 《智能革命》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

随机密码生成器
随机密码生成器

多种字符组合密码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具