Redis基础

Redis基础学习

介绍

Redis是一个非关系型内存数据库,Remote Dictionary Server,翻译过来是远程字典服务,通过名字就知道是一款key-value数据库。

Redis是运行在内存中的,但同时也支持数据的持久化。由于运行在内存中的原因,Redis的存取是非常高效的,但使用Redis缓存数据时我们要注意数据量的大小和内存大小。

Redis的单个操作具有原子性,多个操作也支持事务,但这里的事务并不能保证原子性。单个操作之所以是原子性是因为Redis是单线程的,一条命令执行完之后才会执行下一条命令,而并发情况下即使多个操作开启事务也无法保证原子性,若其中一条指令运行时异常,那么事务不会进行回滚(编译时异常会回滚)。


常用操作

  • 添加:set 例如:set test nihao
  • 查询:get 例如:get test
  • 判断是否存在:exists 例如:EXISTS test
  • 设置过期时间:setex是在创建时设置过期时间,expire是对已存在的key设置时间
    • setex 例如:setex test 15 nihao 设置test=你好,15秒后过期。过期将删除key。
    • expire 例如:expire test 15
  • 不存在设置:setnx 例如:setnx test nihao 当不存在时才执行,存在时不执行。
  • 批量设置:mset 例如:mset k1 v1 k2 v2
  • 批量获取:mget 例如:mget k1 k2 k3

数据类型

Redis有五大基本数据类型:String,hashes,lists,sets,sorted sets。这里的数据类型指的都是value的类型。

  • string: 是我们最常用的一个数据类型,注意Redis中没有int,double等类型,都使用string类型来代替。
  • hashes: 散列,其实就类似于hashmap。
  • lists:列表,支持左插入和右插入。
  • sets:去重集合,set中的元素都不重复,可以随机取集合中的元素,多个set之间可以求交集,并集,差集。
  • sorted sets:去重有序集合,区别于sets,sorted sets有一个权重参数score,用于排序。

过期策略

过期策略指的是:如何判断一个key是否过期,通常有一下三种策略:

  • 惰性过期(被动策略):只有当访问一个key时才会去判断是否过期。但这可能导致堆积大量的过期key。
  • 定时过期:为每个key创建一个定时器,这样就能保证到达过期时间时就可以立即清除。但这很明显带来了一定的性能问题。
  • 定期过期(主动策略):每隔一段时间就进行扫描并清除过期key。

Redis中默认采用的是定期过期+惰性过期这两种方案


Redis事务与锁

我们知道事务的四个性质:ACID:原子性、一致性、隔离性、持久性。但要注意的是,Redis只保证单条命令的原子性而不保证事务的原子性。也就是说不保证同时成功或同时失败。

Redis中也具有乐观锁,一般和事务在一起使用。当更新数据的时候会判断数据是否被修改了,如果修改了则事务执行失败,若没修改则事务执行成功。

举个例子:

set test nihao
set num 1
watch num	#给num添加乐观锁
multi	#开启事务
set test world
incr num
#先不执行
exec	#执行失败,因为在执行事务期间,num的值发生了改变
#在exec之前执行
incr num

Redis的持久化

Redis是基于内存的,一旦发生了宕机或重启,就会导致数据全部丢失。所以数据持久化对于Redis来说十分重要。Redis中有两种持久化的方式,RDB和AOF,RDB是Redis中默认的持久化方式,两者各有优劣,也可同时使用。

RDB

redis.conf中进行配置save 900 1,表示在900秒内有1次增、删、改操作就写入rdb中进行持久化。这个过程是自动的,只要满足该条件就会触发。会在/user/local/bin目录下生成一个dump.rdb文件。

如何使用这个rdb文件呢?只需要在/user/local/bin目录下有dump.rdb文件就会自动读取。若没有自动读取,使用config get dir命令查看一下目录。

说一下优缺点

  • 优点
    • 适合大规模的数据恢复
    • 对完整性要求不高
  • 缺点
    • 持久化之间存在时间间隔,若意外宕机会导致无法触发最后一次的持久化
    • 创建一个单独的子进程进行持久化,先将数据写入到一个临时文件中,最后用临时文件替换之前的rdb文件。因为对主进程没有影响所以非常高效,但会占用一定空间。
AOF

默认是关闭的,在redis.conf中修改appendonly noappendonly true,然后重启服务器即可。会发现目录下多了一个appendonly.aof文件。这个文件会记录所有的增、删、改命令。这里记录的是命令,这一点是明显区别于RDB的。

AOF默认的是无限追加,但这必然会导致文件越来越大,可以在redis.conf中配置。

优缺点

  • 优点
    • 有两种同步模式:每秒同步一次,实时同步。实时同步数据完整性必然更好,每秒同步也最多只丢失1s的数据
  • 缺点
    • 效率低于RDB
    • 文件大小远大于RDB
总结

我们一般两个都会开启,在同时开启的情况下,Redis会默认加载AOF文件,因为AOF文件的数据更完整。而RDB虽然数据完整性差一些,但是效率高,并且不会像AOF一样有潜在的风险(文件内容被修改),所以我们还是需要RDB作为备份。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值