Redis深入浅出笔记总结

1.redis五种数据类型和消息订阅
1、 Redis String数据结构
简介:String是最常用的一种数据类型,普通的key/value存储都可以归为此类

     1、set/get       
           1)设置key对应的值为String类型的value            
           2)获取key对应的值
     
     2、mget
          批量获取多个key的值,如果可以不存在则返回nil
     
     3、incr && incrby
         incr对key对应的值进行加加操作,并返回新的值;incrby加指定值
     
     4、decr && decrby(原子操作)
         decr对key对应的值进行减减操作,并返回新的值;decrby减指定值        
     
     5、setnx
         设置key对应的值为String类型的value,如果key已经存在则返回0       
     
     6、setex
         设置key对应的值为String类型的value,并设定有效期
         
     7、其他命令        
         1)getrange  获取key对应value的子字符串

         2)mset
              批量设置多个key的值,如果成功表示所有值都被设置,否则返回0表示没有任何值被设置
              
         3)msetnx,同mset,不存在就设置,不会覆盖已有的key
                     
         4)getset  设置key的值,并返回key旧的值
         
         5)append
              给指定key的value追加字符串,并返回新字符串的长度   

2、Hash数据结构

   1、Hash是一个String类型的field和value之间的映射表,
   
   2、redis的Hash数据类型的key(hash表名称)对应的value实际的内部存储结构为一个HashMap
   
   3、Hash特别适合存储对象。
       相对于把一个对象的每个属性存储为String类型,将整个对象存储在Hash类型中会占用更少内存。

   4、所存储的成员较少时数据存储为zipmap,当成员数量增大时会自动转成真正的HashMap,此时encoding为ht。

   5、运用场景:
        如用一个对象来存储用户信息,商品信息,订单信息等等。

  6、Hash命令讲解:

      1、 hset——设置key对应的HashMap中的field的value

      2、 hget——获取key对应的HashMap中的field的value

      3、 hgetall——获取key对应的HashMap中的所有field的value
  
      4、hlen--返回key对应的HashMap中的field的数量

3、List类型数据结构

   1、lpush——在key对应的list的头部添加一个元素

   2、lrange——获取key对应的list的指定下标范围的元素,-1表示获取所有元素

   3、lpop——从key对应的list的尾部删除一个元素,并返回该元素
   
   4、rpush——在key对应的list的尾部添加一个元素

   5、rpop——从key对应的list的尾部删除一个元素,并返回该元素

4、Set数据结构

   1、sadd——在key对应的set中添加一个元素

   2、smembers——获取key对应的set的所有元素

   3、spop——随机返回并删除key对应的set中的一个元素

   4、suion——求给定key对应的set并集

   5、sinter——求给定key对应的set交集

5、SortSet数据结构

   1、zadd ——在key对应的zset中添加一个元素

   2、zrange——获取key对应的zset中指定范围的元素,-1表示获取所有元素

   3、zrem——删除key对应的zset中的一个元素

   4、zrangebyscore——返回有序集key中,指定分数范围的元素列表,排行榜中运用

   5、zrank——返回key对应的zset中指定member的排名。其中member按score值递增(从小到大);
       排名以0为底,也就是说,score值最小的成员排名为0,排行榜中运用

   set是通过hashmap存储,key对应set的元素,value是空对象
   sortset是怎么存储并实现排序的呢,hashmap存储,还加了一层跳跃表
   跳跃表:相当于双向链表,在其基础上添加前往比当前元素大的跳转链接 

6、redis消息订阅发布
简介:redis消息订阅发布讲解,基础使用,发布订阅类似于信息管道,用来进行系统之间消息解耦,类似于mq,rabbitmq、rocketmq、kafka、activemq,
主要有消息发布者和消息订阅者。比如运用于:订单支付成功,会员系统加积分、钱包进行扣钱操作、发货系统(下发商品)

   1、PUBLISH 
       将信息message发送到指定的频道channel。返回收到消息的客户端数量 

   2、SUBSCRIBE
       订阅给指定频道的信息

   3、UNSUBSCRIBE
       取消订阅指定的频道,如果不指定,则取消订阅所有的频道。
   
   redis的消息订阅发布和mq对比?
       答:redis发布订阅功能比较薄弱但比较轻量级,mq消息持久化,数据可靠性比较差,无后台功能可msgId、msgKey进行查询消息

2、 Redis和memcached和mysql之间的区别
简介:分析三者的区别和为什么越来越多的人抛弃memcached选择redis

    1、从数据库类型、数据存储方式、特殊功能讲解Redis和memcached和mysql的区别
 
    2、作为同款功能的内存缓存产品,redis和memcached各有什么优势
         内存管理机制                
             1) Memcached默认使用Slab Allocation机制管理内存,其主要思想是按照预先规定的大小,
                将分配的内存分割成特定长度的块  以存储相应长度的key-value数据记录,以完全解决内存碎
                片问题。空闲列表进行判断存储状态             
                【类似于Java虚拟机对象的分配,空闲列表】

             2) Redis使用现场申请内存的方式来存储数据,并且很少使用free-list等方式来优化内存分配,
                会在一定程度上存在内存碎片
               【CPU内存是连续,类似于Java虚拟机对象的分配,直接内存分配(指针碰撞)】
         
         数据持久化方案
         
            1)memcached不支持内存数据的持久化操作,所有的数据都以in-memory的形式存储。

             2)redis支持持久化操作。redis提供了两种不同的持久化方法来讲数据存储到硬盘里面,
                第一种是rdb形式,一种是aof形式

                rdb:属于全量数据备份,备份的是数据
                aof:append only if,增量持久化备份,备份的是指令
                [如:set key, del key]
         
         缓存数据过期机制  key,在一个小时之后过期,超过一个小时查数据就会查不到  key:"1",value:"2" 
             1)Memcached 在删除失效主键时也是采用的消极方法,即 Memcached 内部也不会监视主键是否失效,而是在通过 Get     访问主键时才会检查其是否已经失效

             2)Redis 定时、定期等多种缓存失效机制,减少内存泄漏

         支持的数据类型
             
             1)Memcached支持单一数据类型,[k,v]

             2)redis支持五种数据类型   

3.redis事务和mysql事务讲解
1、 关系型数据库事务

   1、一个数据库事务通常包含了一个序列的对数据库的读/写操作。它的存在包含有以下两个目的:
       1)为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。
       2)当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰。

   2、事务的ACID四大特性
       原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行[3]。
       一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束[3]。
       隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行[3]。
       持久性(Durability):已被提交的事务对数据库的修改应该永久保存在数据库中[3]。

  3、事务隔离机制: set global transaction isolation level read uncommitted;
     read uncommitted、read committed、repeatable read、serializable

2、redis事务机制

   1、 MULTI 与 EXEC命令          
        以 MULTI 开始一个事务,然后将多个命令入队到事务中, 最后由 EXEC 命令触发事务, 一并执行事务中的所有命令
 
   2、 DISCARD命令
        DISCARD 命令用于取消一个事务, 它清空客户端的整个事务队列, 然后将客户端从事务状态调整回非事务状态, 最后返回字符串 OK 给客户端, 说明事务已被取消。

   3、WATCH命令
        WATCH 命令用于在事务开始之前监视任意数量的键: 当调用 EXEC 命令执行事务时, 如果任意一个被监视的键已经被其他客户端修改了, 那么整个事务不再执行, 直接返回失败。

4、redis事务与传统关系型事务的比较
简介:讲解redis事务ACID

   1、 原子性(Atomicity)
       单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。
       如果一个事务队列中的所有命令都被成功地执行,那么称这个事务执行成功。
 
   2、 一致性(Consistency)
        入队错误
            在命令入队的过程中,如果客户端向服务器发送了错误的命令,比如命令的参数数量不对,等等, 那么服务器将向客户端返回一个出错信息, 并且将客户端的事务状态设为 REDIS_DIRTY_EXEC 。

        执行错误
            如果命令在事务执行的过程中发生错误,比如说,对一个不同类型的 key 执行了错误的操作, 那么 Redis 只会将错误包含在事务的结果中, 这不会引起事务中断或整个失败,不会影响已执行事务命令的结果,也不会影响后面要执行的事务命令, 所以它对事务的一致性也没有影响。

   3、隔离性(Isolation)
        WATCH 命令用于在事务开始之前监视任意数量的键: 当调用 EXEC 命令执行事务时, 如果任意一个被监视的键已经被其他客户端修改了, 那么整个事务不再执行, 直接返回失败。


   4、持久性(Durability)
       因为事务不过是用队列包裹起了一组 Redis 命令,并没有提供任何额外的持久性功能,所以事务的持久性由 Redis 所使用的持久化模式决定
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值