内容简介:打开其实我对
引言
打开 Microsoft To-Do
,发现 Redis
的学习计划还躺在那里。
其实我对 Redis
的理解,仅仅停留在我认识这个单词的层面上。
学习
简介
本来对这个 Redis
没什么兴趣的,不就是一个缓存的数据库而已吗?直到上次配置 spring-redis
的时候,发现这个东西没有用户名。
spring: redis: host: 127.0.0.1 port: 6379 password:
配置如上所示,只有主机、端口和密码,和普通的 MySQL
或其他数据库不同。
Redis
是一个使用 ANSI C
编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库。
我们熟知的就是 Redis
的缓存, Redis
采用 C
编写,运行异常的快。是有磁盘存储支持的内存数据库!
适用于数据变化快且数据库大小可遇见(适合内存容量)的应用程序。
使用场景:股票价格、数据分析、实时数据搜集、实时通讯。
NoSQL
Redis
属于 NoSQL
, NoSQL = Not Only SQL
。
如今数据量越来越大,传统的关系型数据库已经无法应付如此大数据的需求了。
举个例子:假设我们使用关系型数据库存储朋友圈,那一天会产生多少数据?再查询的时候数据库不就死了吗?
这让我想起了我之前关注的一个帖子:腾讯微信的后台数据库到底是怎么设计的?无知的人相谈甚欢,最后好像是官方的哥们是在看不下去了,回复:谁告诉你们微信用的是关系型数据库?
普通关系型数据库,如果只查询的话效率很高?如果算上读写的话?那可能传统的数据库都承受不住高并发。
重要的是关系型数据库没法扩展,大家想一想,因为数据之间是有关系的,所以数据库扩展绝对不像扩展后台服务规模一样再拎个服务器出来那么简单。
由此可见,在数据量日渐增长的今天,为了解决大数据量与高并发的难题, NoSQL
应运而生。
NoSQL
产品主要有四类:
类型 | 特点 | 代表 | 适用场景 |
---|---|---|---|
键值对存储 | 能实现快速查询,但存储的数据缺少结构化 | Redis |
内容缓存,主要用于处理大数据的高访问负载 |
列存储数据库 | 查找速度快,可扩展性强,更容易进行分布式扩展,但功能相对局限 | HBase |
分布式的文件系统 |
文档数据库 | 数据结构要求不严格,查询性能不高,而且缺乏统一的查询语法 | MongoDB |
Web 应用(相较于普通的 Key-Value ,其 Value 是结构化的) |
图形数据库 | 利用图结构相关算法,但需要对整个图做计算才能得出结果,不容易分布式 | Neo4j |
社交网络,推荐系统,专注于构建关系图谱 |
这些数据库的名称大家或多或少应该听说过吧?今天才真正知道它们的作用,各有其特长,我们需根据业务场景动态选择。 Facebook
的消息存储采用的就是 HBase
数据库,支持大数据进行随机、实时访问。
NoSQL
因为数据之间都是没有关系的,所以易扩展,同时具有很高的读写性能,很适合高并发场景。
历史
2008
年,意大利的一家创业公司 Merzia
推出了一款基于 MySQL
的网站实时统计系统 LLOOGG
。
没过多久,创始人 Salvatore Sanfilippo
对 MySQL
的性能大失所望,于是他决定自己写一个数据库。牛人就是牛人,我们就算质疑 MySQL
的性能,想写也写不出来啊?!
2009
年, Salvatore Sanfilippo
完成了数据库的编写,这就是 Redis
。
Salvatore Sanfilippo
将 Redis
开源,并一直进行着 Redis
的开发,直到今天。我们熟知的 Github
、 StackOverflow
、新浪微博等公司都是 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版)
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版)》 这本书的介绍吧!