| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> Redis简介 -> 正文阅读 |
|
[大数据]Redis简介 |
1.1Redis是什么(1)Redis是一个开源的key-value存储系统。 (2)它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set)和hash(哈希类型)。 (3)Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件 (4)支持高可用和集群模式。 1.2 Redis的应用场景1.2.1 配合关系型数据库做高速缓存(1)高频次,热门访问的数据,降低数据库IO (2)经典的Cache Aside Pattern(旁路缓存模式) 1.2.2 大数据场景1)缓存数据 (1)需要高频次访问 (2)持久化数据访问较慢 2)临时数据 (1)高频次 (2)读写时效性高 (3)总数据量不大 (4)临时性 (5)用key查询 3)计算结果 (1)高频次写入 (2)高频次查询 (3)总数据量不大 1.2.3 利用其多样的数据结构存储特定的数据(1)最新N个数据通过List实现按自然事件排序的数据 (2)排行榜,TopN利用zset(有序集合) (3)时效性的数据,比如手机验证码Expire过期 (4)计数器,秒杀,原子性,自增方法INCR、DECR (5)去除大量数据中的重复数据,利用set集合 (6)构建队列利用list集合 (7)发布订阅消息系统 pub/sub模式 2 NoSQL数据库
第三章 Redis官网(1)Redis官方网站 ?http://Redis.io (2)Redis中文官方网站 ?http://www.Redis.net.cn (3)帮助手册Redis 命令参考 — Redis 命令参考 第4章 Redis的五大数据类型4.1String特点 第5章 Redis的相关配置1)计量单位说明,大小写不敏感 # 1k => 1000 bytes # 1kb => 1024 bytes # 1m => 1000000 bytes # 1mb => 1024*1024 bytes # 1g => 1000000000 bytes # 1gb => 1024*1024*1024 bytes # # units are case insensitive so 1GB 1Gb 1gB are all the same. 2)bind 默认情况bind=127.0.0.1只能接受本机的访问请求。 不写的情况下,无限制接受任何ip地址的访问,生产环境肯定要写你应用服务器的地址。 如果开启了protected-mode,那么在没有设定bind ip且没有设密码的情况下,Redis只允许接受本机的请求。 #bind 127.0.0.1 Bind hadoop102 protected-mode no 3)port 服务端口号 port 6379 4)daemonize 是否为后台进程。 daemonize yes 5)pidfile 存放pid文件的位置,每个实例会产生一个不同的pid文件。 pidfile /var/run/redis_6379.pid 6)log file 日志文件存储位置。 logfile "/home/atguigu/myredis/redis.log" 7)database 设定库的数量 默认16。 databases 16 8)requirepass 设置密码。 requirepass 123456 127.0.0.1:6379> set k1 v1 (error) NOAUTH Authentication required. 127.0.0.1:6379> auth "123456" OK 127.0.0.1:6379> set k1 v1 OK 127.0.0.1:6379> get k1 "v1" 9)maxmemory 设置Redis可以使用的内存量。一 旦到达内存使用上限,Redis将会试图移除内部数据,移除规则可以通过maxmemory-policy来指定。如果Redis无法根据移除规则来移除内存中的数据,或者设置了“不允许移除”。 那么Redis则会针对那些需要申请内存的指令返回错误信息,比如SET、LPUSH等。 # maxmemory <bytes> 10)maxmemory-policy 移除策略 # maxmemory-policy noeviction #volatile-lru:使用LRU算法移除key,只对设置了过期时间的键 #allkeys-lru:使用LRU算法移除key #volatile-lfu :使用LFU策略移除key,只对设置了过期时间的键. #allkeys-lfu? :使用LFU策略移除key #volatile-random:在过期集合中移除随机的key,只对设置了过期时间的键 #allkeys-random:移除随机的key #volatile-ttl:移除那些TTL值最小的key,即那些最近要过期的key #noeviction:不进行移除。针对写操作,只是返回错误信息 11)Maxmemory-samples 设置样本数量,LRU算法和最小TTL算法都并非是精确的算法,而是估算值,所以你可以设置样本的大小。一般设置3到7的数字,数值越小样本越不准确,但是性能消耗也越小。 # maxmemory-samples 5 第6章 JedisJedis是Redis的Java客户端,可以通过Java代码的方式操作Redis。 6.1 环境准备1)添加依赖 <dependency> ??? <groupId>redis.clients</groupId> ??? <artifactId>jedis</artifactId> ??? <version>3.3.0</version> </dependency> 6.2 基本测试1)测试连通 public class JedisTest { ??? public static void main(String[] args) { ??????? Jedis jedis = new Jedis("hadoop102",6379); ??????? String ping = jedis.ping(); ??????? System.out.println(ping); ?????? ?jedis.close(); ??? } } 2)连接池 ?连接池主要用来节省每次连接redis服务带来的连接消耗,将连接好的实例反复利用。 public static JedisPool pool =? null ; public static Jedis getJedis(){ ??? if(pool == null ){ ??????? //主要配置 ??????? JedisPoolConfig jedisPoolConfig =new JedisPoolConfig(); ??????? jedisPoolConfig.setMaxTotal(10); //最大可用连接数 ??????? jedisPoolConfig.setMaxIdle(5); //最大闲置连接数 ??????? jedisPoolConfig.setMinIdle(5); //最小闲置连接数 ??????? jedisPoolConfig.setBlockWhenExhausted(true); //连接耗尽是否等待 ??????? jedisPoolConfig.setMaxWaitMillis(2000); //等待时间 ??????? jedisPoolConfig.setTestOnBorrow(true); //取连接的时候进行一下测试 ping pong ??????? pool = new JedisPool(jedisPoolConfig,"hadoop102",6379) ; ??? } ??? return pool.getResource(); }?? public static void main(String[] args) { ??????? //Jedis jedis = new Jedis("hadoop202",6379); ??????? Jedis jedis = getJedis(); ??????? String ping = jedis.ping(); ??????? System.out.println(ping); } 第7章 Redis 持久化7.1 两种方式Redis提供了2个不同形式的持久化方式 RDB 和 AOF。 (1)RDB为快照备份,会在备份时将内存中的所有数据持久化到磁盘的一个文件中。 (2)AOF为日志备份,会将所有写操作命令记录在一个日志文件中。 7.2 RDB(Redis Database)7.2.1 是什么在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里。 7.2.2 如何执行持久化Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺点是最后一次持久化后的数据可能丢失。 7.2.3 RDB文件1)RDB保存的文件 在redis.conf中配置文件名称,默认为dump.rdb。 ?dbfilename dump.rdb 2)RDB文件的保存路径 默认为Redis启动时命令行所在的目录下,也可以修改。 dir /home/atguigu/myredis 7.2.4 RDB保存策略#?? save <seconds> <changes> #?? Will save the DB if both the given number of seconds and the given #?? number of write operations against the DB occurred. # #?? In the example below the behaviour will be to save: #?? after 900 sec (15 min) if at least 1 key changed #?? after 300 sec (5 min) if at least 10 keys changed #?? after 60 sec if at least 10000 keys changed #?? Note: you can disable saving completely by commenting out all "save" lines. save 900 1 save 300 10 save 60 10000 7.2.5 手动保存(1)save:只管保存,其它不管,全部阻塞。 (2)bgsave:按照保存策略自动保存。 (3)shutdown:时服务会立刻执行备份后再关闭。 (4)flushall:时会将清空后的数据备份。 7.2.6 RDB备份恢复1)备份 将dump.rdb文件拷贝到要备份的位置。 2)恢复 关闭Redis,把备份的文件拷贝到工作目录下,启动redis,备份数据会直接加载。 7.2.7 RDB其他配置1)进行rdb保存时,将文件压缩 rdbcompression yes 2)文件校验 在存储快照后,还可以让Redis使用CRC64算法来进行数据校验,可以校验RDB持久化文件是否损坏,但是这样做会增加大约10%的性能消耗,如果希望获取到最大的性能提升,可以关闭此功能。 rdbchecksum yes 7.2.8 RDB优缺点1)优点: 节省磁盘空间,恢复速度快。 2)缺点: 虽然Redis在fork时使用了写时拷贝技术,但是如果数据庞大时还是比较消耗性能。在备份周期在一定间隔时间做一次备份,所以如果Redis意外down掉的话,就会丢失最后一次快照后的所有修改。 7.3 AOF(Append Only File)7.3.1 是什么以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,Redis启动之初会读取该文件重新构建数据,换言之,Redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。 7.3.2 开启AOF1)AOF默认不开启,需要手动在配置文件中配置 appendonly yes 2)AOF文件 appendfilename "appendonly.aof" 3)AOF文件保存的位置,与RDB的路径一致 dir /home/atguigu/myredis 7.3.3 AOF同步频率# no: don't fsync, just let the OS flush the data when it wants. Faster. # always: fsync after every write to the append only log. Slow, Safest. # everysec: fsync only one time every second. Compromise. 7.3.4 AOF文件损坏恢复redis-check-aof? --fix? appendonly.aof? 7.3.5 AOF备份AOF的备份机制和性能虽然和RDB不同, 但是备份和恢复的操作同RDB一样,都是拷贝备份文件,需要恢复时再拷贝到Redis工作目录下,启动系统即加载。 7.3.6 RewriteAOF采用文件追加方式,文件会越来越大为避免出现此种情况,新增了重写机制,当AOF文件的大小超过所设定的阈值时,Redis就会启动AOF文件的重写,只保留可以恢复数据的最小指令集。可以使用命令bgrewriteaof手动开始重写。 重写虽然可以节约大量磁盘空间,减少恢复时间。但是每次重写还是有一定的负担的,因此设定Redis要满足一定条件才会进行重写。 系统载入时或者上次重写完毕时,Redis会记录此时AOF大小,设为base_size,如果Redis的AOF当前大小>= base_size + base_size*100% (默认)且当前大小>=64mb(默认)的情况下,Redis会对AOF进行重写。 auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb 7.3.7 AOF的优缺点1)优点: (1)备份机制更稳健,丢失数据概率更低。 (2)可读的日志文本,通过操作AOF文件,可以处理误操作。 2)缺点: (1)比起RDB占用更多的磁盘空间。 (2)恢复备份速度要慢。 (3)每次写都同步的话,有一定的性能压力。 (4)存在个别bug,造成恢复不了。 7.4 持久化的优先级AOF的优先级大于RDB,如果同时开启了AOF和RDB,Redis服务启动时恢复数据以AOF为准。 7.5 RDB和AOF用哪个好(1)官方推荐两个都启用。 (2)如果对数据不敏感,可以选单独用RDB。 (3)不建议单独用 AOF,因为可能会出现Bug。 (4)如果只是做纯内存缓存,可以都不用。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 13:36:20- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |