redis 图片2进制保存_Redis基础

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 20:59   4767   0

3c7cb6c9a6b648c3f74f6be9769274f4.png

Redis特点

  1. 高性能:所有数据存储在内存中,所以它的读写性能非常高,官方数据10万/s
  2. 可靠性:redis将内存中的数据利用快照和日志的形式保存在内存中,避免发生断电或则机器故障,内存数据丢失的问题
  3. 丰富的数据类型

redis的value有哪些数据类型?以及其应用场景

  1. String
    1. 除了普通的字符串,还可以包含JSON,xml,数字,甚至二进制(图片),大小限制在512MB
    2. 常用命令:get、set、incr、decr、mget
    3. 应用场景:短信验证码、论坛点赞
  2. Hash
    1. value本身又是一个键值对结构
    2. 常用命令:hget,hset,hgetall
    3. 应用场景:适合保存一个对象
  3. List
    1. 存储多个有序的字符串,可重复,底层实现为双向链表,列表最多可存储2的32次方-1
    2. 常用命令:lpush(左添加)、rpush、lpop(左移除)、rpop
    3. 应用场景:用作栈或则队列
  4. Set
    1. 集合,存放一堆不重复的值,有交集,并集,差集的特性;去重原理:value为空的Hashmap,通过计算hash的方式来快速排重
    2. 常用命令:sadd,spop,smembers,sunion
    3. 使用场景:共同关注,共同喜好
  5. ZSet
    1. 用过一个设置一个额外的score来为成员排序、即自动排序。数据插入时,就已经进行天然排序。
    2. 常用命令:zadd、zrange、zrem、zcard
    3. 应用场景:排行榜、带权重的消息队列

发布订阅、事务

发布订阅:redis 127.0.0.1:6379> SUBSCRIBE redisChat 订阅频道

PUBLISH redisChat "Redis is a great caching technique"另一个客户端在此频道发布消息

事务:事务中的所有命令都会被序列化,按顺序执行,具有原子性,MULTI /'mlt/ 开始一个事务, 然后将多个命令入队到事务中, 最后由EXEC/g'zek; eg-/命令触发事务

如何对Redis中的key做有效期管理

  1. del的方式,直接删除指定的key
  2. 设置key的超时时间
    1. expire key seconds 设置超时时间,单位为秒
    2. ttl key 产看超时时间 -1表示没有超时时间,-2表示已经超时
    3. persist key持久化key,取消超时时间
    4. expireat key timestamp 设置超时时间点

当Key超时了,会被回收吗?

答案:Redis的key超时了,不会被自动回收,只是标识哪些键值对超时了,避免自动频繁回收造成系统卡顿,和出现太多的内存碎片

Redis何时进行回收

  1. 方式一:Redis内置的定时回收,每隔一段时间回收过期的键值对
  2. 方式二:惰性回收:一个超时的key,被再次用get命令访问时,将触发Redis将其从内存中清空。

Redis的回收策略

当达到预先设置的内存容量时,可以采用以下策略进行内存管理:

maxmemory-policy noeviction

  • Volatile-lru:采用最近最少使用的淘汰策略,回收那些超时的键值对(采样)
  • Allkeys-lru:对所有的键值对,采用最近最少使用的策略进行淘汰
  • Volatile-random:对超时的键值对,采用随机淘汰的策略
  • Allkeys-random:对所有的键值对,采用随即淘汰的策略
  • Volatile-ttl:采用删除存活时间最短的键值对策略
  • Noeviction /'vkn/:不淘汰,内存满的时候,只能读,不能写

Redis持久化机制-RDB和AOF

RDB:

Redis 将数据库快照保存在名字为 dump.rdb的二进制文件中。Redis重启时。RDB程序通过载入RDB文件来还原数据库的状态。

三种触发机制:

  1. save命令,同步命令,会找用Redis主进程,当Redis数据非常多时,save命令执行速度会非常慢,阻塞所有客户端的请求。所以不能在生产环境直接使用
  2. bgsave命令,异步保存,通过linux的fock()生成一个子进程将数据保存到磁盘上。
  3. 自动生成RDB,可以通过配置,redis自动生成rdb。它在满足“N秒内数据集至少有M个改动”这一条件满足时,自动进行数据集保存操作。

注意:每一次保存都是完整的保存,不是追加,在Redis意外宕机,可能会丢失几分钟的数据

AOF:

快照功能(RDB)并不是非常耐久(durable/'drbl/): 如果 Redis 因为某些原因而造成故障停机, 那么服务器将丢失最近写入、且仍未保存到快照中的那些数据。redis 1.1增加了一种完全耐久的持久话方式:AOF

在配置文件中开启AOF: appendonly yes

开启后,每当redis执行一条改变数据集的命令时(如set),这个命令就会被追加到AOF文件的末尾。当redis重启时,程序通过重新执行AOF文件的命令来达到重建数据库的目的。

AOF持久化的三种策略

b266c03778f858795b417d8a79b4e9ac.png

04db3b81334b0d0e94886bbaa8b0fec6.png

4a7c84837b951c5386dab58b74f11019.png

最后一种是有操作系统来决定什么时候同步数据,更快,但是也更不安全的选择。

AOF重写的实现方式,bgrewriteaof命令,重写会创建一个当前AOF文件的体积优化版本。

为什么要使用分布式缓存?

集群部署,单机版的缓存,这个缓存的数据无法共享

缓存就是内存,所以会消耗本服务器的内存资源,也会影响到服务器的性能

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP