我眼中的 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》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

PHP和MySQL Web开发(原书第4版)

PHP和MySQL Web开发(原书第4版)

Luke Welling、Laura Thomson / 武欣 / 机械工业出版社 / 2009 / 95.00元

本书将PHP开发与MySQL应用相结合,分别对PHP和MySQL做了深入浅出的分析,不仅介绍PHP和MySQL的一般概念,而且对PHP和MySQL的Web应用做了较全面的阐述,并包括几个经典且实用的例子。. 本书是第4版,经过了全面的更新、重写和扩展,包括PHP 5.3最新改进的特性(例如,更好的错误和异常处理),MySQL的存储过程和存储引擎,Ajax技术与Web 2.0以及Web应用需要......一起来看看 《PHP和MySQL Web开发(原书第4版)》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换