我眼中的 Redis

更新日期: 2019-04-21 阅读: 3.4k 标签: redis

简介

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

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

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

clipboard.png

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

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

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

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


NoSQL

Redis属于NoSQL,NoSQL = Not Only SQL。

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

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

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

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

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

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

NoSQL产品主要有四类:

类型特点代表适用场景
键值对存储能实现快速查询,但存储的数据缺少结构化Redis内容缓存,主要用于处理大数据的高访问负载
列存储数据库查找速度快,可扩展性强,更容易进行分布式扩展,但功能相对局限HBase分布式的文件系统
文档数据库数据结构要求不严格,查询性能不高,而且缺乏统一的查询语法MongoDBWeb应用(相较于普通的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。

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


来自:https://segmentfault.com/a/1190000018930546


本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/2965

相关推荐

Redis可视化管理工具有哪些?

redis 是当前非常流行的缓存数据库,得益于其简单的 key-value 模式的数据存储和丰富的数据类型与事件机制使得 redis 成为当前后端开发中不可或缺的利器。下面推荐一些好用的 redis 的管理工具

使用 Redis 构建先进先出队列解决秒杀问题

先进先出队列(first in first out queue)是一种非常常见的数据结构, 一般都会包含入队(enqueue)和出队(dequeue)这两个操作, 其中入队操作会将一个元素放入到队列中, 而出队操作则会从队列中移除最先被入队的元素

在使用redis-cluster之前你需要知道这些事

前段时间基础架构组、DBA还有云盘团队一起推广了phpredis的RedisCluster的线上使用,目前线上业务已经稳定,单业务的规模水平是:Qps平均15W,数据量在700G左右。现对这段时间的工作和所遇到的一些常见问题进行简单总结

基于redis实现定时任务

业务中碰到的需求(抽象描述一下):针对不同的用户能够实现不同时间的间隔循环任务。比如在用户注册成功24小时后给用户推送相关短信等类似需求。使用crontab?太重,且基本不现实,不可能给每一个用户在服务器上生成一个定时任务。

docker搭建redis集群

从docker库获取ruby镜像;创建虚拟网卡;查看网卡信息;查看redis-net虚拟网卡网关ip;创建需要挂载的目录以及文件;在/docker/redis目录下创建一个sh脚本文件;执行脚本创建挂载目录以及配置文件

redis用在哪里?redis 应用场景

Redis是一个由Salvatore Sanfilippo写的key-value存储系统。Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

Redis的基本数据结构及基本命令详解

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)

Redis中设置了过期时间的Key,那么你还要知道些什么?

熟悉Redis的同学应该知道,Redis的每个Key都可以设置一个过期时间,当达到过期时间的时候,这个key就会被自动删除。这就是Redis的过期策略。在为key设置过期时间需要注意的事项

Redis 的各项功能解决了哪些问题?

官方简介解释到:Redis是一个基于BSD开源的项目,是一个把结构化的数据放在内存中的一个存储系统,你可以把它作为数据库,缓存和消息中间件来使用。同时支持strings,lists,hashes,sets,sorted sets

Redis分布式锁

redis:Redis是开源,内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理.采用单进程单线程模型,并发能力强大,主流的分布式缓存工具。加锁通过setnx向特定的key值写入一个随机值,并且同时设置失效时间,写值成功即加锁成功.

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!