redis基础学习

一、redis简介

       redis是一个远程内存数据库,和关系型数据库不同,作为内存数据库(非关系型数据库)的redis具有更快的查询响应速度。redis可以存储键(key)和五种数据类型的值(value)之间的映射,可以将存储在内存中的键值对持久化到硬盘上,可以通过主从复制的特性来进行redis扩展,还有使用客户端分片来提升读写性能。

      reids可以作为一级存储(主存储)使用,也可以作为二级(辅助存储)使用,一些对性能要求高、费用方面也不做过多考虑、数据量也不是非常巨大的系统完全可以将redis作为主数据来使用,使用redis作为主存储查询性能可能是使用关系型数据的几十倍乃至上百倍,例如对于一个具有几十万数据量的系统而言,在一次复杂的查询中使用关系型数据库,查询可能会达到十几秒,而且还可能要面对事务锁的耗时,而对于redis而言可能就是几十毫秒。当然对于一些数据量十分巨大,而且对于费用有一定要求的系统而言那么使用redis来作为辅助存储也是一个不错的选择,redis也常被用来作为大型系统的缓存加载机制来使用。

 二、redis特性

        1、键值对内存存储:

              redis支持五种数据结构类型存储:STRING(字符串)、LIST(列表)、SET(集合)、ZSET(有序集合)、

HASH(散列)。

             STRING:可以是字符串、整型或者浮点型。(GET、SET、DEL)

             LIST: 链表,每个节点上都包含一个字符串。(LPUSH、RPUSH、LPOP、RPOP、LINDEX)

             SET:无序集合,且包含元素不重复。(SADD、SREM、SMEMBERS)

             ZSET:有序集合,元素的顺序由元素的分值来决定。(SADD、SREM、SMEMBERS)

             HASH:散列,包含键值对的无序散列对,类似于map。(HSET、HGET、HDEL)

        2、持久化机制:

               redis支持两种持久化机制:快照(RDB)和只追加文件(AOF),在redis.conf中可以自行配置

               a、快照:redis可以通过创建快照来获取存储在内存里面的数据在某一个时间点上的副本,创建快照可以手动命令

                    BGSAVE、SAVE。也可以通过配置文件配置如:save 60 1000 ,表示在60秒内有1000次写入,redis自动触发BGSAVE命令,可以配置多个save 配置,如果发生系统崩溃,那么将会丢失最近一次生成快照后生成的数据。

              b、AOF:AOF持久化会将执行的写命令写到AOF文件的末尾,appendfsync配置决定了AOF同步频率,always(每个redis写命令都会同步到AOF文件中)、everysec(每过一秒执行一次同步,推荐使用)、no(由操作系统来决定何时进行同步)。由于同步频率很高,所以系统发生崩溃时,丢失的数据也会相对较少,但是也会带来一个问题就是AOF文件过大,这个时候就需要对AOF文件进行重写和压缩。

         3、复制:

               尽管redis性能很优秀,但是涉及的元素结构很复杂且数据量很大时,这时候单个redis实例就会显得很慢,redis可以采用主从复制的特性来进行横向扩容,使用一个主服务器向多个从服务器发送更新。当从服务器连接到主服务器上时,会触发主服务器的BGSAVE命令,执行快照,并将快照发送给从服务器,用户可以通过SLAVEOF host port配置项 来将一个redis服务器设置为从服务器,可以连接到主服务器。

               从服务器在进行同步的时候  会清空自己原有的数据,替换成主服务器的数据,所以原有从服务器要注意备份 。

              redis主从复制可以形成主从链,从服务器也可以拥有自己的从服务器。

  三、redis事务

          redis事务以MULTI开始,以EXEC结束,在EXEC命令之前不会执行任何实际操作,除了MULTI/EXEC命令还有WATCH、UNWATCH、DISCARD命令,WATCH命令可以对键进行监听,如果其他客户端对被监听的键进行了修改、删除等写操作,那么执行EXEC命令是就会失败并且返回一个错误,用户可以通过选择放弃或者重新执行事务,UNWATCH可以在WATCH命令之后,MULTI命令之前取消对键的监听,DISCARD可以在MULTI命令之后,EXEC命令之前来清空所有事务队列命令。

         redis事务不同于关系型数据库的加锁型事务,关系型数据库会对被访问的数据加锁,直到事务提交或者回滚,锁才释放,期间如果有其他客户端尝试对加锁数据进行写操作那么就会阻塞。而redis事务则是通过WATCH对键进行监听,在EXEC命令之前如果有其他客户端对被监听的键进行写操作,那么EXEC命令执行的时候就会返回一个错误,只需要对执行失败的事务进行重试,客户端不用为了尝试获取锁而阻塞,从而提高了性能,这也是乐观锁(redis)和悲观锁(关系型数据库)的应用。

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值