Redis 基础知识汇总

事物四大特性:

  • 原子性(Atomicity): 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
  • 隔离性(Isolation): 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;
  • 持久性(Durability): 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。
  • 一致性(Consistency): 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的;

Redis 是不支持 roll back 的,因而不满足原子性的(而且不满足持久性)。

Redis:数据存在内存中;应用场景:缓存,分布式锁,消息队列

Redis数据结构

string : 一般常用在需要计数的场景,比如用户的访问次数、热点文章的点赞转发数量等等。 

set key value #设置 key-value 类型的值

get key # 根据 key 获得对应的 value

exists key  # 判断某个 key 是否存在

strlen key # 返回 key 所储存的字符串值的长度

del key # 删除某个 key 对应的值

list : 双向链表,发布与订阅或者说消息队列、慢查询。

rpush myList value1 # 向 list 的头部(右边)添加元素

rpush myList value2 value3 # 向list的头部(最右边)添加多个元素

lpop myList # 将 list的尾部(最左边)元素取出

lrange myList 0 1 # 查看对应下标的list列表, 0 为 start,1为 end

lrange myList 0 -1 # 查看列表中的所有元素,-1表示倒数第一

hash  : 存储对象

hmset userInfoKey name "guide" description "dev" age "24"

hexists userInfoKey name # 查看 key 对应的 value中指定的字段是否存在

hget userInfoKey name # 获取存储在哈希表中指定字段的值

hgetall userInfoKey # 获取在哈希表中指定 key 的所有字段和值

hkeys userInfoKey # 获取 key 列表

hvals userInfoKey # 获取 value 列表

hset userInfoKey name "GuideGeGe" # 修改某个字段对应的值

set : 无序不重复集合

sadd mySet value1 value2 # 添加元素进去

smembers mySet # 查看 set 中所有的元素

scard mySet # 查看 set 的长度

sismember mySet value1 # 检查某个元素是否存在set 中,只能接收单个元素

sinterstore mySet3 mySet mySet2 # 获取 mySet 和 mySet2 的交集并存放在 mySet3 中

sorted set : 在set上增加了一个权重参数score,使元素能按权重排序

zadd myZset 3.0 value1 # 添加元素到 sorted set 中 3.0 为权重

zadd myZset 2.0 value2 1.0 value3 # 一次添加多个元素

zcard myZset # 查看 sorted set 中的元素数量

zscore myZset value1 # 查看某个 value 的权重

zrange  myZset 0 -1 # 顺序输出某个范围区间的元素,0 -1 表示输出所有元素

zrange  myZset 0 1 # 顺序输出某个范围区间的元素,0 为 start  1 为 stop

zrevrange  myZset 0 1 # 逆序输出某个范围区间的元素,0 为 start  1 为 stop

Redis 的性能瓶颈不在 CPU ,主要在内存和网络,Redis6.0 引入多线程主要是为了提高网络 IO 读写性能

Redis采用惰性删除 + 定期删除 策略处理过期数据:

惰性删除 :只会在取出 key 的时候才对数据进行过期检查。这样对 CPU 最友好,但是可能会造成太多过期 key 没有被删除。

定期删除 : 每隔一段时间抽取一批 key 执行删除过期 key 操作。并且,Redis 底层会通过限制删除操作执行的时长和频率来减少删除操作对 CPU 时间的影响

Redis 持久化机制:

快照持久化:通过创建快照来获得存储在内存里面的数据在某个时间点上的副本

例:save 60 10000        #在60秒(1分钟)之后,如果至少有10000个key发生变化,Redis就会自动触发BGSAVE命令创建快照。

AOF持久化:每执行一条会更改 Redis 中的数据的命令,Redis 就会将该命令写入硬盘中的 AOF 文件。主流

Redis 可以通过 MULTI,EXEC,DISCARD 和 WATCH 等命令来实现事务(transaction)功能

缓存穿透:大量请求的 key 根本不存在于缓存中,导致请求直接到了数据库上,根本没有经过缓存这一层。

缓存雪崩有一些被大量访问数据(热点缓存)在某一时刻大面积失效,导致对应的请求直接落到了数据库上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值