Redis教程(1)

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 你好看官,里面请!今天笔者讲的是Redis教程(1)。不懂或者觉得我写的有问题可以在评论区留言,我看到会及时回复。 注意:本文仅用于学习参考,不可用于商业用途,如需转载请跟我联系。

Redis教程(1)

 如果觉得写的还可以,点个赞支持一下笔者呗!你的点赞和关注会让我更快更新哦。笔者会持续更新关于Java和大数据有关的文章。目前集中精力在更新java框架的内容。

1. 简介

Redis(全称:Remote Dictionary Server 远程字典服务)是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的、Key-Value 数据库,并提供多种语言的 API。主要提供了 5 种数据结构: 字符串、 哈希、 列表、 集合、 有序集合, 同时在字符串的基础之上演变出了位图(Bitmaps)和 HyperLogLog 两种神奇的 “数据结构”, 并且随着 LBS( Location Based Service, 基于位置服务) 的不断发展, Redis3.2 版本中加入有关 GEO( 地理信息定位) 的功能,

2. Redis 特性

没有无缘无故的爱,Redis 之所以集万千宠爱于一身,必然有它的原因所在。Redis 身上具有很多特性了,而这些特性恰好可以解决互联网应用中的一些非常棘手的难题。这些特性使它脱颖而出,成了架构师的心头好。说了这么多,Redis 究竟有什么本事呢?且听我慢慢道来~

2.1 高性能

天下武功无坚不破,唯快不破。Redis 是出了名的快呀,官方给出的数字是读写性能可以达到 10 万 / 秒。让 Redis 有如此性能的关键因素是因为 Redis 是基于内存的数据库。下表是各种计算机硬件处理数据的时间对比:

硬件及操作 所需时间
L1 cache reference 一级缓存引用 0.5 ns
Branch mispredict 分支错误预测 5 ns
L2 cache reference 二级缓存引用 7 ns
Mutex lock/unlock 互斥锁定 / 解锁 25 ns
Main memory reference 主存引用 100 ns
Compress 1K bytes with Zippy 用 Zippy 压缩 1K 数据 3,000 ns
Send 2K bytes over 1 Gbps network 通过 1Gbps 带宽网络发送 2K 数据 20,000 ns
Read 1 MB sequentially from memory 从内存顺序读取 1M 数据 250,000 ns
Round trip within same datacenter 同一数据中心往返一次,ping 一下 500,000 ns
Disk seek 磁盘寻道 10,000,000 ns
Read 1 MB sequentially from disk 从磁盘顺序读取 1MB 数据 20,000,000 ns
Send packet CA->Netherlands->CA 在 CA 向荷兰发包再返回 150,000,000 ns

从上表可知,计算机里除了 CPU 以外,就属内存快了。另外,Redis 是用 C 语言实现的,C 语言在我们的印象里,除了难学以外,另一个特点就是执行效率高了,这也是 Redis 具有高性能的因素之一。最后因为 Redis 使用了单线程架构(咦?不都说多线程快吗?怎么 Redis 单线程也这么快?留给你来寻找答案)。

2.2 丰富的数据结构

  • String
  • Hash
  • List
  • Set
  • Sorted Set
  • Bitmap
  • Hyperloglog

2.3 强大的功能

  • 键过期,缓存的基础之一;
  • 发布订阅,可以用来实现消息系统;
  • 支持 Lua 脚本,可以扩展 Redis 功能;
  • 简单的事务功能, 能在一定程度上保证事务特性;
  • 流水线( Pipeline),可以批量提交,减少网络开销;
  • 持久化,保证数据安全不丢失,提高容灾能力;
  • 主从复制,为分布式高可用打下基础;
  • 分布式,使 Redis 高可用、易扩展。

2.4 简单可靠

Redis 的代码量很少,早期版本只有两万行左右,即便是添加了集群特性以后,代码也不过五万行。作为一个 NoSQL 数据库来说,代码量已经相当的少了。这也使得作为非专攻 Redis 的技术人员可以将 Redis 研究透彻。再加上其作者的编码风格极其优雅,通过研究 Redis 的源码也可以很好的提高自己的编码水平。另外,基于单线程的实现方式,也使得客户端开发变得简单。

2.5 支持多种语言

使用简单的 TCP 协议就可以与 Redis 进行通信,众多编程语言都可以轻松的接入到 Redis。由于 Redis 以上的众多优点,使得它颇受开源社区以及公司认可,所以支持 Redis 的语言也越来越多,几乎涵盖了所有主流编程语言,真是有容乃大呀(有容是谁?)。强者愈强,马太效应在 Redis 身上表现得淋漓尽致。以下是来自 Redis 官网的编程语言支持列表:

网络异常,图片无法展示
|

3. Redis 可以做什么

通过上面的内容我们知道,Redis 拥有很多优点与强大的功能。蜘蛛侠的叔叔曾经告诉我们:With great power comes great responsibility。所以 Redis 一定也肩负着重任,那么我们就来看看人们通常会用 Redis 来做什么吧。

3.1 缓存

用于做缓存可是 Redis 的看家本领,也是 Redis 最广泛的用途没有之一。强大的性能加上优秀的缓存设计不但可以提升系统的访问速度,还能大大滴缓解数据库的压力。对于一些查询频率很高但很少修改的数据来说,使用 Redis 来缓存在合适不过了。 Redis 提供了键值过期时间设置,并且也提供了灵活控制最大内存和内存溢出后的淘汰策略。 一个合理的缓存设计能够为一个网站的稳定保驾护航。

3.2 排行榜

很多网站都有排行榜应用的,比如吃瓜群众每天都会关注的微博热搜,还有程序员关注的 GitHub 热度排行等。Redis 提供的有序集合(sorted set)能实现各种复杂的排行榜应用。

3.3 计数器

计数器在我们日常生活中也很常见,比如微博的点赞数、转发量,微信文章的阅读量、在看人数,视频网站的播放量等。这种累加的功能使用 Redis 的 incr 命令来实现非常合适。不但性能好,而且还能从容应对高并发的请求。

3.4 社交网络

微博的关注与粉丝、共同关注,传统关系型数据库不擅长处理这种数据。而 Redis 可以很好的实现并且有非常好的性能。例如,点赞列表、收藏列表、关注列表、粉丝列表等,使用 Hash 类型数据结构是个不错的选择。

3.5 消息队列系统

消息队列是大型网站必用中间件,如 ActiveMQ、RabbitMQ、Kafka 等流行的消息队列中间件,主要用于业务解耦、流量削峰及异步处理实时性低的业务。Redis 虽然和专业的消息队列比还不够足够强大, 但是对于一般的消息队列功能基本可以满足。

3.6 分布式锁

目前几乎所有互联网公司都用到了分布式技术,我们在享受新技术的同时也会面对一些新的问题。分布式系统在应对同一资源并发修改的时候,不管是 synchronized 还是 ReentrantLock 都显得力不存心了。而直接利用数据库的锁在高并发下容易将数据库服务器拖垮。这时候 Redis 又一次站了出来,利用其高性能以及具有原子性的命令 setnx 或者借助 Lua 脚本可以实现分布式锁的功能。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
6月前
|
存储 缓存 NoSQL
熟练使用 Redis 的五大数据结构:Java 实战教程
熟练使用 Redis 的五大数据结构:Java 实战教程
108 0
|
7月前
|
NoSQL Go 数据库
2023最新版 Navicat 16.2+系列安装和试用教程详解:轻松掌握最新版本的数据库管理工具连接Redis
2023最新版 Navicat 16.2+系列安装和试用教程详解:轻松掌握最新版本的数据库管理工具连接Redis
305 0
|
3天前
|
NoSQL Linux 网络安全
Linux安装Redis(详细教程)
Linux安装Redis(详细教程)
22 2
|
3天前
|
NoSQL Linux Redis
【redis】安装和使用教程
【redis】安装和使用教程
21 1
|
3天前
|
NoSQL 前端开发 Redis
Windows 下安装和配置 Redis (图文教程)
Windows 下安装和配置 Redis (图文教程)
|
6月前
|
缓存 NoSQL Java
分布式系列教程(19) -基于Redis实现分布式锁
分布式系列教程(19) -基于Redis实现分布式锁
79 0
|
6月前
|
缓存 NoSQL 安全
分布式系列教程(05) -分布式Redis缓存 (持久化)
分布式系列教程(05) -分布式Redis缓存 (持久化)
113 0
|
6月前
|
缓存 NoSQL Java
分布式系列教程(03) -分布式Redis缓存(SpringBoot整合Redis)
分布式系列教程(03) -分布式Redis缓存(SpringBoot整合Redis)
106 0
|
7月前
|
NoSQL Linux 网络安全
linux安装redis超级详细教程
linux安装redis超级详细教程
|
5月前
|
存储 NoSQL Unix
Redis安装教程(保姆级教程)
Redis安装教程(保姆级教程)