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

目 录CONTENT

文章目录

redis

Dettan
2021-04-10 / 0 评论 / 0 点赞 / 123 阅读 / 17,461 字
温馨提示:
本文最后更新于 2021-07-11,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
过期的键值对不会立即删除,因为没有线程一只扫描过期时间.

简介
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 支持 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

评论区