初识redis(一)

前言

引用的是这本书的原话

Redis[1]是一种基于键值对(key-value)的NoSQL数据库,与很多键值对数据库不同的是,Redis中的值可以是由string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、HyperLogLog、GEO(地理信息定位)等多种数据结构和算法组成,因此Redis可以满足很多的应用场景,而且因为Redis会将所有数据都存放在内存中,所以它的读写性能非常惊人。不仅如此,Redis还可以将内存的数据利用快照和日志的形式保存到硬盘上,这样在发生类似断电或者机器故障的时候,内存中的数据不会"丢失"。除了上述功能以外,Redis还提供了键过期、发布订阅、事务、流水线、Lua脚本等附加功能。总之,如果在合适的场景使用好Redis,它就会像一把瑞士军刀一样所向披靡。2008年,Redis的作者Salvatore Sanfilippo在开发一个叫LLOOGG的网站时,需要实现一个高性能的队列功能,最开始是使用MySQL来实现的,但后来发无论怎么优化SQL语句都不能使网站的性能提高上去,再加上自己囊中羞涩,于是他决定己做一个专属于LLOOGG的数据库,这个就是Redis的前身。后来,Salvatore Sanfilippo将Redis1.0的源码开放到GitHub上,可能连他自己都没想到,Redis后来如此受欢迎。

假如现在有人问Redis的作者都有谁在使用Redis,我想他可以开句玩笑的回答:还有谁使用Redis,当然这只是开玩笑,但是从Redis的官方公司统计来看,有很多重量级的公司都在使用Redis,如国外的Twitter、Instagram、Stack Overflow、GitHub等,国内就更多了,如果单单从体量来统计,新浪微博可以说是全球最大的Redis使用者,除了新浪微博,还有像阿里巴巴、腾讯、百度、搜狐、优酷土豆、美团、小米、唯品会等公司都是

Redis的使用者。除此之外,许多开源技术像ELK等已经把Redis作为它们组件中的重要一环,而且Redis会在未来的版本中提供模块系统让第三方人员实现功能扩展,让Redis发挥出更大的威力。所以,可以这么说,熟练使用和运维Redis已经成为开发运维人员的一个必备技能。

Redis的特性

  1. 在内存中存储数据
  2. 针对Redis的操作可以直接通过交互式命令
  3. 可扩展性,可以在redis原有的基础功能上扩展。
  4. 持久化,Redis是把数据储存到内存上的,通常看,将数据放在内存中是不安全的,一旦发生断电或者机器故障,重要的数据可能就会丢失,因此Redis提供了两种持久化方式:RDB和AOF,即可以用两种策略将内存的数据保存到硬盘中.
  5. redis作为一个中间键是支持集群的,Redis提供了复制功能,实现了多个相同数据的Redis副本.复制功能是分布式Redis的基础。
  6. 支持高可用。Redis从2.8版本正式提供了高可用实现Redis Sentinel,它能够保证Redis
    节点的故障发现和故障自动转移。Redis从3.0版本正式提供了分布式实现Redis Cluster,它是Redis真正的分布式实现,提供了高可用、读写和容量的扩展性。

Redis的使用场景

大概翻译过来,就是以下:

1.实时数据库存储

大多数情况及,考虑到存储数据库优先考虑数据库大,但有时候,还是会考虑到数据库快。Redis 数据库中的所有数据都存储在内存中。由于内存的读写速度远快于硬盘,因此

Redis 在性能上对比其他基于硬盘存储的数据库有非常明显的优势,在一台普通的笔记本电

脑上,Redis 可以在一秒内读写超过 10 万个键值。将数据存储在内存中也有问题,比如程序退出后内存中的数据会丢失。不过 Redis 提供了对持久化的支持,即可以将内存中的数据异步写入到硬盘中,同时不影响继续提供服务。

2.Session 存储

以往的登录注册是要Cookie和Session配合使用的,一般我们会把Session存在应用服务器上,后来我们可以把身份标识存在Redis数据库里。

3.消息队列

消息队列系统可以说是一个大型网站的必备基础组件,因为其具有业务解耦、非实时业务削峰等特性。Redis提供了发布订阅功能和阻塞队列的功能,虽然和专业的消息队列比还不够足够强大,但是对于一般的消息队列功能基本可以满足。

Redis不能做的事情

实际上和任何一门技术一样,每个技术都有自己的应用场景和边界,也就是说Redis并不是万金油,有很多适合它解决的问题,但是也有很多不合适它解决的问题。我们可以站在数据规模和数据冷热的角度来进行分析。站在数据规模的角度看,数据可以分为大规模数据和小规模数据,我们知道Redis的数据是存放在内存中的 ,虽然现在内存已经足够便宜,但是如果数据量非常大,例如每天有几亿的用户行为数据,使用Redis来存储的话,基本上是个无底洞,经济成本相当的高。站在数据冷热的角度看,数据分为热数据和冷数据,热数据通常是指需要频繁操作的数据,反之为冷数据,例如对于视频网站来说,视频基本信息基本上在各个业务线都是经常要操作的数据,而用户的观看记录不一定是经常需要访问的数据,这里暂且不讨论两者数据规模的差异,单纯站在数据冷热的角度上看,视频信息属于热数据,用户观看记录属于冷数据。如果将这些冷数据放在Redis中,基本上是对于内存的一种浪费,但是对于一些热数据可以放在Redis中加速读写,也可以减轻后端存储的负载,可以说是事半功倍。所以,Redis并不是万金油,相信随着我们对Redis的逐步学习,能够清楚Redis真正的使用场景。

相关推荐
Leon-Ning Liu31 分钟前
Oracle数据库常用视图:dba_datapump_jobs
数据库·oracle·dba
数据库生产实战1 小时前
Oracle 19C RAC下TRUNCATE TABLE的REUSE STORAGE选项作用和风险浅析!
数据库·oracle
小白银子1 小时前
零基础从头教学Linux(Day 60)
linux·数据库·mysql·oracle
瀚高PG实验室2 小时前
数据库安全配置指导
服务器·数据库·瀚高数据库
憋问我,我也不会2 小时前
MYSQL 命令
数据库·mysql
24K老游3 小时前
postgres15 flink cdc同步测试
数据库
无泡汽水3 小时前
MySQL入门练习50题
数据库·mysql
JIngJaneIL3 小时前
助农惠农服务平台|助农服务系统|基于SprinBoot+vue的助农服务系统(源码+数据库+文档)
java·前端·数据库·vue.js·论文·毕设·助农惠农服务平台
云外天ノ☼4 小时前
待办事项全栈实现:Vue3 + Node.js (Koa) + MySQL深度整合,构建生产级任务管理系统的技术实践
前端·数据库·vue.js·mysql·vue3·koa·jwt认证
小光学长4 小时前
基于Vue的智慧楼宇报修平台设计与实现066z15wb(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
前端·数据库·vue.js