Redis 中数据类型及场景处理相关

Redis 键(key)

Redis 键命令用于管理 redis 的键。
set 就是普通的已key-value 方式存储数据,set 存储单个大文本非结构化数据。
$redis->set($key, $field);
$redis->get($key);
$redis->del($key,);
场景:单个特殊标识,如在 redis 中创建一个 key 并设置值。

Redis 哈希(Hash)

hset 则存储结构化数据,一个 hash 存储一条数据,一个 filed 则存储 一条数据中的一个属性,value 则是属性对应的值。

Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
$redis->hset($key, $field, $value);
$redis->hget($key, $field, $value);
$redis->hdel($key, $field, $value);
场景:整表缓存到 redis 中则使用 hash ,一条数据一个hash,一个hash 里则包含多个filed(表的字段属性)。

第一种类型:String Key-Value
第二种类型:Hash:key-filed-value
第三种类型:List
  List 有顺序可重复
  lpush list 1 2 3 4 从左添加元素 
 rpush list 1 2 3 4 从右添加元素
 lrange list 0 -1 (从0 到-1 元素查看:也就表示查看所有)
 lpop list (从左边取,删除)
 rpop list (从右边取,删除)
第四种类型 :Set
  Set 无顺序,不能重复
第五种类型:SortedSet(zset)
  有顺序,不能重复
  适合做排行榜 排序需要一个分数属性

什么是Redis持久化?Redis有哪几种持久化方式?优缺点是什么?
持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。
Redis 提供了两种持久化方式:RDB(默认) 和AOF
RDB:
rdb是Redis DataBase缩写
功能核心函数rdbSave(生成RDB文件)和rdbLoad(从文件加载内存)两个函数。

AOF:
Aof是Append-only file缩写
每当执行服务器(定时)任务或者函数时flushAppendOnlyFile 函数都会被调用, 这个函数执行以下两个工作。

aof写入保存:
WRITE:根据条件,将 aof_buf 中的缓存写入到 AOF 文件
SAVE:根据条件,调用 fsync 或 fdatasync 函数,将 AOF 文件保存到磁盘中。
存储结构:
内容是redis通讯协议(RESP )格式的命令文本存储。

比较
1、aof文件比rdb更新频率高,优先使用aof还原数据。
2、aof比rdb更安全也更大
3、rdb性能比aof好
4、如果两个都配了优先加载AOF

什么是缓存穿透?如何避免?什么是缓存雪崩?何如避免?
缓存穿透:
一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就应该去后端系统查找(比如DB)。一些恶意的请求会故意查询不存在的key,请求量很大,就会对后端系统造成很大的压力。这就叫做缓存穿透。
如何避免?
1:对查询结果为空的情况也进行缓存,缓存时间设置短一点,或者该key对应的数据insert了之后清理缓存。
2:对一定不存在的key进行过滤。可以把所有的可能存在的key放到一个大的Bitmap中,查询时通过该bitmap过滤。

缓存雪崩:
当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,会给后端系统带来很大压力。导致系统崩溃。
如何避免?
1:在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。
2:做二级缓存,A1为原始缓存,A2为拷贝缓存,A1失效时,可以访问A2,A1缓存失效时间设置为短期,A2设置为长期
3:不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀。

Redis**过期策略都有哪些?**
定期删除:指的是redis默认是每隔100ms就随机抽取一些设置了过期时间的key,检查其是否过期,如果过期就删除。
惰性删除:在你获取某个key的时候,redis会检查一下 ,这个key如果设置了过期时间那么是否过期了,如果过期了此时就会删除,不会给你返回任何东西。

Docker创建Redis服务容器

镜像(等于操作系统)用来创建容器,docker(像简易的一个Linux环境)是基于容器来运行的,docker仓库用来保存镜像。目前公开仓库是Docker Hub,供使用者去下载。

redis主(写)从(读)复制
面临问题:
1.机器故障
2.容量瓶颈(扩容)
Redis主从解决,节点的单一使用问题,可把多个数据复制副本部署到其它节点上进行,实现数据的高可用。
主服务器做的操作,从服务器1秒内同步,数据的复制是单向的。只能主到从,一个主节点可有多个从节点,一个从节点可有多个主节点,从节点可以有从节点。

哨兵和集群做到数据的高可用性。

Redis的配置文件:
etc/redis.conf
端口的监听 bind 0.0.0.0
保护模式 protected-mode no(不允许本地127.0.0.1 来链接)

检测是否有安装Redis
[root@localhost bin]# whereis redis-cli
redis-cli: /usr/bin/redis-cli
[root@localhost bin]# whereis redis-server
redis-server: /usr/bin/redis-server

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 1

写的非常好!!

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!