侧边栏壁纸
  • 累计撰写 793 篇文章
  • 累计创建 1 个标签
  • 累计收到 1 条评论
标签搜索

目 录CONTENT

文章目录

Redis

Dettan
2022-01-09 / 0 评论 / 0 点赞 / 82 阅读 / 3,825 字
温馨提示:
本文最后更新于 2022-07-23,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
/ DATA / NOSQL / Redis

简述Redis的数据淘汰机制
volatile-lru 从已设置过期时间的数据集中挑选最近最少使用的数据淘汰volatile-ttl 从已设置过期时间的数据集中挑选将要过期的数据淘汰volatile-random从已设置过期时间的数据集中任意选择数据淘汰allkeys-lru从所有数据集中挑选最近最少使用的数据淘汰allkeys-random从所有数据集中任意选择数据进行淘汰noeviction禁止驱逐数据

讲一讲缓存穿透,缓存雪崩以及缓存击穿吧
缓存穿透:就是客户持续向服务器发起对不存在服务器中数据的请求。客户先在Redis中查询,查询不到后去数据库中查询。 缓存击穿:就是一个很热门的数据,突然失效,大量请求到服务器数据库中 缓存雪崩:就是大量数据同一时间失效。 打个比方,你是个很有钱的人,开满了百度云,腾讯视频各种杂七杂八的会员,但是你就是没有netflix的会员,然后你把这些账号和密码发布到一个你自己做的网站上,然后你有一个朋友每过十秒钟就查询你的网站,发现你的网站没有Netflix的会员后打电话向你要。你就相当于是个数据库,网站就是Redis。这就是缓存穿透。 大家都喜欢看腾讯视频上的《水果传》,但是你的会员突然到期了,大家在你的网站上看不到腾讯视频的账号,纷纷打电话向你询问,这就是缓存击穿 你的各种会员突然同一时间都失效了,那这就是缓存雪崩了。 放心,肯定有办法解决的。 缓存穿透: 1.接口层增加校验,对传参进行个校验,比如说我们的id是从1开始的,那么id<=0的直接拦截; 2.缓存中取不到的数据,在数据库中也没有取到,这时可以将key-value对写为key-null,这样可以防止攻击用户反复用同一个id暴力攻击 缓存击穿: 最好的办法就是设置热点数据永不过期,拿到刚才的比方里,那就是你买腾讯一个永久会员 缓存雪崩: 1.缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。 2.如果缓存数据库是分布式部署,将热点数据均匀分布在不同搞得缓存数据库中。
安全
6 之前不分默认用户,设置一个密码就能访问, 6之后就默认分用户分权限.
所以之前验证用户只需要输入密码就行了,之后要输入用户名和密码
版本
6.* 支持多线程, 密码要用用户名, 老的springBoot不支持


$ wget http://download.redis.io/releases/redis-5.0.9.tar.gz
$ tar xzf redis-5.0.9.tar.gz
$ cd redis-5.0.9
$ make
make完后 redis-2.8.17目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli,两个程序位于安装目录 src 目录下:
下面启动redis服务.
$ cd src
$ ./redis-server
注意这种方式启动redis 使用的是默认配置。也可以通过启动参数告诉redis使用指定配置文件使用下面命令启动。
$ cd src
$ ./redis-server ../redis.conf

启动
进入redis src目录
./redis-server ../redis.conf
关闭
redis-cli shutdown





Redis 教程
REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。 Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。 开始学习 Redis 。 本教程是为专业的程序开发人员,通过本教程你可以一步一步了解 Redis 的应用。 阅读本教程前,你需要了解基本的数据结构,例如以下几种: 在阅读本教程前,你需要了解基本的数据结构。 Redis 官网: https://redis.io/ Redis 在线测试: http://try.redis.io/
https://www.runoob.com/redis/redis-tutorial.html
过期的键值对不会立即删除,因为没有线程一只扫描过期时间.

简介
Remote Dictionary Server
一个开源的高性能的Key-Value 存储系统,
独立的进程服务,
它使用字典结构存储数据,并允许其他应用 通过TCP协议读写字典中的内容。
单 个value 的 最 大 限 制 是1GB

优缺点

优点:
a) 性能极高 – Redis 能支持超过 100K+ 每秒的读写频率。
b) 丰富的数据类型 – Redis 支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
c) 原子 – Redis 的所有操作都是原子性的,同时 Redis 还支持对几个操作全并后的原子性执行。
attention 原子性定义:例如, A 想要从自己的帐户中转 1000 块钱到 B 的帐户里。那个从 A 开始转帐,到转帐结束的这一个过程,称之为一个事务。如果在 A 的帐户已经减去了 1000 块钱的时候,忽然发生了意外,比如停电什么的,导致转帐事务意外终止了,而此时 B 的帐户里还没有增加 1000 块钱。那么,我们称这个操作失败了,要进行回滚。回滚就是回到事务开始之前的状态,也就是回到 A 的帐户还没减 1000 块的状态, B 的帐户的原来的状态。此时A 的帐户仍然有 3000 块, B 的帐户仍然有 2000 块。我们把这种要么一起成功(A 帐户成功减少 1000,同时 B 帐户成功增加 1000),要么一起失败(A 帐户回到原来状态, B 帐户也回到原来状态)的操作叫原子性操作。如果把一个事务可看作是一个程序,它要么完整的被执行,要么完全不执行,这种特性就叫原子性。·
d)丰富的特性 – Redis 还支持 publish/subscribe, 通知, key 过期等等特性。
缺点:
a) 内存大小限制。虽然 redis 本身有 key 过期策略,但是还是需要提前预估和节约内存。如果内存增长过快,需要定期删除数据。
b). 如果进行完整重同步,由于需要生成 rdb 文件,并进行传输,会占用主机的 CPU,并会消耗现网的带宽。不过 redis2.8 版本,已经有部分重同步的功能,但是还是有可能有完整重同步的。比如,新上线的备机。
c). 修改配置文件,带数据重启慢
密码
只有master需要访问密码

分库
默认 16个数据库,0-15,不支持重命名. 集群没有数据库的概念.
select 1 选择数据库.
优点
速度快 持久化 多种数据结构 支持多种编程语言 功能丰富 源码简单 c语言,3w+行 主从复制 高可用分布式

官方测试:
在50个并发的情况下请求10万次,写的速度是8.1W次/s,读的速度是11W次/s 测试环境: 1、LINUX2.6内核 Xeon X3320 2.5GHz服务器 2、读和写大小为256bytes的字符串


问题
企业大规模使用REDIS过程中会受限于多个方面: 1、单机内存有限 2、带宽压力 3、单点问题 4、动态扩容
(1)、Master写内存快照,save命令调度rdbSave函数,会阻塞主线程的工作,当快照比较大时对性能影响是 非常大的,会间断性暂停服务,所以Master最好不要写内存快照。 (2)、Master AOF持久化,如果不重写AOF文件,这个持久化方式对性能的影响是最小的,但是AOF文件会不断增大,AOF文件过大会影响Master重启的恢复速度。Master最好不要做任何持久化工作,包括内存快照和AOF日志文件,特别是不要启用内存快照做持久化,如果数据比较关键,某个Slave开启AOF备份数据,策略为每秒同步一次。 (3)、Master调用BGREWRITEAOF重写AOF文件,AOF在重写的时候会占大量的CPU和内存资源,导致服务load 过高,出现短暂服务暂停现象。 (4)、Redis主从复制的性能问题,为了主从复制的速度和连接的稳定性,Slave和Master最好在同一个局域网内

Redis最适合的场景有哪些?(2017-11-25-wzz)
(1)、会话缓存(Session Cache) (2)、全页缓存(FPC) (3)、队列 (4)、排行榜/计数器 (5)、发布/订阅


下载地址:https://github.com/MSOpenTech/redis/releases

JAVA常用的是Jedis (http://redis.io/clients)

Redis 教程
REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。 Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。 开始学习 Redis 。 本教程是为专业的程序开发人员,通过本教程你可以一步一步了解 Redis 的应用。 阅读本教程前,你需要了解基本的数据结构,例如以下几种: 在阅读本教程前,你需要了解基本的数据结构。 Redis 官网: https://redis.io/ Redis 在线测试: http://try.redis.io/
https://www.runoob.com/redis/redis-tutorial.html
Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择,这里我们下载 Redis-x64-xxx.zip压缩包到 C 盘,解压后,将文件夹重新命名为 redis。
/usr/local

打开一个 cmd 窗口 使用 cd 命令切换目录到 C:\redis 运行:
redis-server.exe redis.windows.conf
如果想方便的话,可以把 redis 的路径加到系统的环境变量里,这样就省得再输路径了,后面的那个 redis.windows.conf 可以省略,如果省略,会启用默认的。输入之后,会显示如下界面:


这时候另启一个 cmd 窗口,原来的不要关闭,不然就无法访问服务端了。
切换到 redis 目录下运行:
redis-cli.exe -h 127.0.0.1 -p 6379
设置键值对:
set myKey abc
取出键值对:
get myKey





1) "dictCache::sex"
 2) "departCache_idmodel::org.jeecg.modules.system.service.impl.SysDepartService
Implorg.jeecg.modules.system.service.impl.SysDepartServiceImpl"
 3) "dictCache::org.jeecg.modules.system.service.impl.SysDictServiceImplorg.jeec
g.modules.system.service.impl.SysDictServiceImplsex1"
 4) "dictCache::cgform_table_type"
 5) "dictCache::org.jeecg.modules.system.service.impl.SysDictServiceImpl$$Enhanc
erBySpringCGLIB$$a101343dorg.jeecg.modules.system.service.impl.SysDictServiceImp
lsex1"
 6) "PREFIX_USER_TOKEN_eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NzA4NDky
MTAsInVzZXJuYW1lIjoiYWRtaW4ifQ.Son05GdFM37nQSegEOkBi2OjkFVXCwSXzfwZcmLOWqk"
 7) "dictCache::org.jeecg.modules.system.service.impl.SysDictServiceImpl$$Enhanc
erBySpringCGLIB$$a101343dorg.jeecg.modules.system.service.impl.SysDictServiceImp
luser_status1"
 8) "dictCache::org.jeecg.modules.system.service.impl.SysDictServiceImpl$$Enhanc
erBySpringCGLIB$$a101343dorg.jeecg.modules.system.service.impl.SysDictServiceImp
ldict_item_status1"
 9) "dictCache::org.jeecg.modules.system.service.impl.SysDictServiceImpl$$Enhanc
erBySpringCGLIB$$a101343dorg.jeecg.modules.system.service.impl.SysDictServiceImp
lmsgType3"
10) "departCache_info::org.jeecg.modules.system.service.impl.SysDepartServiceImp
lorg.jeecg.modules.system.service.impl.SysDepartServiceImpl"
11) "dictCache::org.jeecg.modules.system.service.impl.SysDictServiceImplorg.jeec
g.modules.system.service.impl.SysDictServiceImplmsgType2"
12) "dictCache::org.jeecg.modules.system.service.impl.SysDictServiceImplorg.jeec
g.modules.system.service.impl.SysDictServiceImpllog_type1"
13) "dictCache::org.jeecg.modules.system.service.impl.SysDictServiceImpl$$Enhanc
erBySpringCGLIB$$a101343dorg.jeecg.modules.system.service.impl.SysDictServiceImp
lmsg_typeALL"
14) "dictCache::org.jeecg.modules.system.service.impl.SysDictServiceImplorg.jeec
g.modules.system.service.impl.SysDictServiceImpluser_status1"
15) "dictCache::org.jeecg.modules.system.service.impl.SysDictServiceImpl$$Enhanc
erBySpringCGLIB$$a101343dorg.jeecg.modules.system.service.impl.SysDictServiceImp
lmsg_category2"
16) "departCache_info::org.jeecg.modules.system.service.impl.SysDepartServiceImp
l$$EnhancerBySpringCGLIB$$ddd7503org.jeecg.modules.system.service.impl.SysDepart
ServiceImpl"
17) "departCache_idmodel::org.jeecg.modules.system.service.impl.SysDepartService
Impl$$EnhancerBySpringCGLIB$$ddd7503org.jeecg.modules.system.service.impl.SysDep
artServiceImpl"
18) "dictCache::org.jeecg.modules.system.service.impl.SysDictServiceImplorg.jeec
g.modules.system.service.impl.SysDictServiceImplmsgType3"
19) "dictCache::org.jeecg.modules.system.service.impl.SysDictServiceImplorg.jeec
g.modules.system.service.impl.SysDictServiceImpldict_item_status1"
20) "dictCache::org.jeecg.modules.system.service.impl.SysDictServiceImpl$$Enhanc
erBySpringCGLIB$$a101343dorg.jeecg.modules.system.service.impl.SysDictServiceImp
lpriorityM"
21) "dictCache::org.jeecg.modules.system.service.impl.SysDictServiceImplorg.jeec
g.modules.system.service.impl.SysDictServiceImplmsgSendStatus2"
22) "myKey"
23) "dictCache::org.jeecg.modules.system.service.impl.SysDictServiceImpl$$Enhanc
erBySpringCGLIB$$a101343dorg.jeecg.modules.system.service.impl.SysDictServiceImp
llog_type1"
24) "dictCache::org.jeecg.modules.system.service.impl.SysDictServiceImplorg.jeec
g.modules.system.service.impl.SysDictServiceImplsend_status1"
25) "dictCache::org.jeecg.modules.system.service.impl.SysDictServiceImpl$$Enhanc
erBySpringCGLIB$$a101343dorg.jeecg.modules.system.service.impl.SysDictServiceImp
lsend_status1"
26) "dictCache::org.jeecg.modules.system.service.impl.SysDictServiceImpl$$Enhanc
erBySpringCGLIB$$a101343dorg.jeecg.modules.system.service.impl.SysDictServiceImp
lsex2"
27) "dictCache::org.jeecg.modules.system.service.impl.SysDictServiceImplorg.jeec
g.modules.system.service.impl.SysDictServiceImplsex2"
28) "dictCache::org.jeecg.modules.system.service.impl.SysDictServiceImplorg.jeec
g.modules.system.service.impl.SysDictServiceImplmsg_category2"
29) "dictCache::org.jeecg.modules.system.service.impl.SysDictServiceImplorg.jeec
g.modules.system.service.impl.SysDictServiceImplmsgSendStatus3"
30) "dictCache::org.jeecg.modules.system.service.impl.SysDictServiceImpl$$Enhanc
erBySpringCGLIB$$a101343dorg.jeecg.modules.system.service.impl.SysDictServiceImp
lmsgSendStatus3"
31) "dictCache::org.jeecg.modules.system.service.impl.SysDictServiceImplorg.jeec
g.modules.system.service.impl.SysDictServiceImplpriorityM"
32) "dictCache::org.jeecg.modules.system.service.impl.SysDictServiceImpl$$Enhanc
erBySpringCGLIB$$a101343dorg.jeecg.modules.system.service.impl.SysDictServiceImp
lmsgType2"
33) "dictCache::org.jeecg.modules.system.service.impl.SysDictServiceImpl$$Enhanc
erBySpringCGLIB$$a101343dorg.jeecg.modules.system.service.impl.SysDictServiceImp
lmsgSendStatus2"
34) "dictCache::org.jeecg.modules.system.service.impl.SysDictServiceImplorg.jeec
g.modules.system.service.impl.SysDictServiceImplmsg_typeALL"
35) "dictCache::activiti_sync"
127.0.0.1:6379>
0

评论区