redis介绍

介绍

Redis,全称:REmote DIctionary Server,即远程字典服务

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

官方网址:
https://redis.io/

中文网站:
http://www.redis.cn/

Redis 命令参考:
https://redisdoc.com/

菜鸟教程:
https://www.runoob.com/redis/redis-tutorial.html

特点

速度快

将数据存储在内存中,所以保存、读取速度快

官方的性能测试:
测试完成了50个并发执行100000个请求。
设置和获取的值是一个256字节字符串。
Linux box是运行Linux 2.6,这是X3320 Xeon 2.5 ghz。

结果:读的速度是110000次/s,写的速度是81000次/s 。

与关系型数据库相比

关系型数据库的数据存储在硬盘,在高并发环境下I/O较高,并发能力弱

支持多种数据类型

值(value)可以是:

  • 字符串(String)
  • 哈希(Hash)
  • 列表(list)
  • 集合(set)
  • 有序集合(sorted sets)
与其他缓存数据库相比

一般的缓存数据库没有丰富的数据类型

单线程

Redis的性能瓶颈在于内存读写速度,而不是CPU,设计者将Redis设计成了单线程模式,其所有操作都是原子性的,避免了多线程带来的复杂性。

在java中,使用HashMap、HashTable时,要考虑线程是否安全

可持久化

可将数据保存到磁盘中

主从同步

实现了master-slave(主从)同步。

为什么使用redis

一般web应用都需要关系型数据库存储数据,即:一般都需要用到mysql、oracle等

redis的应用场景 与 mysql、oracle不同,性能够用时,不需要使用redis;当高并发,使用mysql、oracle已经达到性能瓶颈时,才需要考虑使用redis

应用场景

集群时实现session共享

spring session

热点数据的缓存

由于redis访问速度块、支持的数据类型比较丰富,所以redis很适合用来存储热点数据,另外结合expire,可以设置过期时间然后再进行缓存更新操作,这个功能最为常见

限时业务的运用

redis中可以使用expire命令设置一个键的生存时间,到时间后redis会删除它。利用这一特性可以运用在限时的优惠活动信息、手机验证码等业务场景。

计数器

redis由于 incrby 命令可以实现原子性的递增,所以可以用于高并发的微博、抖音的评论数、点赞数、分享数,收藏数,秒杀活动

还可以限制一个手机号发多少条短信、一个接口一分钟限制多少请求、一个接口一天限制调用多少次等等。

排行榜

在电商平台排行榜、微博热搜、抖音排行榜,需要频繁查询这些排行榜,可以通过redis的SortedSet进行热点数据的排序。

好友相互关系

Redis set类型类似java中的set,可以自动排重,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。

在微博、抖音这类社交应用中,每个用户关注的人存在一个集合中,就很容易实现求两个人的共同好友功能。

还可以判断用户之间是否点过赞,set存储用户之间的点赞关联的,在点赞前判断是否点赞(用sismember命令)

消息队列

由于redis有list push和list pop这样的命令,所以能够很方便的执行队列操作。

比如:双十一的支付操作

一般使用Kafka、NSQ、RabbitMQ等成熟的消息队列

分布式锁

这个主要利用redis的 setnx 命令进行,setnx:”set if not exists”就是如果不存在则成功设置缓存同时返回1,否则返回0

集群服务器时,定时任务可能在两台机器上都会运行,所以在定时任务中首先 通过 setnx 设置一个lock,如果成功设置则执行,如果没有成功设置,则表明该定时任务已执行。

感谢:
https://www.jianshu.com/p/40dbc78711c8


原文出处:/show_1EF5nYJjzD54.html