zoukankan      html  css  js  c++  java
  • redis的六大数据类型详细用法

    Redis 相对于 Memcache 等其他的缓存产品,有一个比较明显的优势就是 Redis 不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。本篇博客我们就将介绍这些数据类型的详细使用以及顺带介绍Redis系统的相关命令用法。注意:Redis的命令不区分大小写,但是key 严格区分大小写!!!

    1、string 数据类型

    string 是Redis的最基本的数据类型,可以理解为与 Memcached 一模一样的类型,一个key 对应一个 value。string 类型是二进制安全的,意思是 Redis 的 string 可以包含任何数据,比如图片或者序列化的对象,一个 redis 中字符串 value 最多可以是 512M。

    相关命令介绍

    string 数据类型在 Redis 中的相关命令:

      

    ①、上面的 ttl 命令是返回 key 的剩余过期时间,单位为秒。

    ②、mset和mget这种批量处理命令,能够极大的提高操作效率。因为一次命令执行所需要的时间=1次网络传输时间+1次命令执行时间,n个命令耗时=n次网络传输时间+n次命令执行时间,而批量处理命令会将n次网络时间缩减为1次网络时间,也就是1次网络传输时间+n次命令处理时间。

    但是需要注意的是,Redis是单线程的,如果一次批量处理命令过多,会造成Redis阻塞或网络拥塞(传输数据量大)。

    ③、setnx可以用于实现分布式锁,具体实现方式后面会介绍。

    上面是 string 类型的基本命令,下面介绍几个自增自减操作,这在实际工作中还是特别有用的(分布式环境中统计系统的在线人数,利用Redis的高性能读写,在Redis中完成秒杀,而不是直接操作数据库。)。

     

    典型使用场景

    # 计数

    由于Redis单线程的特点,我们不用考虑并发造成计数不准的问题,通过 incrby 命令,我们可以正确的得到我们想要的结果。

    # 限制次数

    比如登录次数校验,错误超过三次5分钟内就不让登录了,每次登录设置key自增一次,并设置该key的过期时间为5分钟后,每次登录检查一下该key的值来进行限制登录。

    2、hash 数据类型

    hash 是一个键值对集合,是一个 string 类型的 key和 value 的映射表,key 还是key,但是value是一个键值对(key-value)。类比于 Java里面的 Map<String,Map<String,Object>> 集合。

    相关命令介绍

    演示如下:

    典型应用场景

    查询的时间复杂度是O(1),用于缓存一些信息。

    3、list 数据类型

    list 列表,它是简单的字符串列表,按照插入顺序排序,你可以添加一个元素到列表的头部(左边)或者尾部(右边),它的底层实际上是个链表。

    列表有两个特点:有序、可重复。

    相关的命令介绍

     

     

    典型应用场景
    • 栈:通过命令 lpush+lpop
    • 队列:命令 lpush+rpop
    • 有限集合:命令 lpush+ltrim
    • 消息队列:命令 lpush+brpop

    4、set 数据类型

    Redis 的 set 是 string 类型的无序集合。

    相对于列表,集合也有两个特点:无序、不可重复。

    相关命令介绍

     

     

    典型应用场景

    利用集合的交并集特性,比如在社交领域,我们可以很方便的求出多个用户的共同好友,共同感兴趣的领域等。

    5、zset 数据类型

    zset(sorted set 有序集合),和上面的set 数据类型一样,也是 string 类型元素的集合,但是它是有序的。

    相关命令介绍

     

    典型使用场景

    和set数据结构一样,zset也可以用于社交领域的相关业务,并且还可以利用zset 的有序特性,还可以做类似排行榜的业务。

    6、Redis5.0新数据结构-stream

    Redis的作者在Redis5.0中,放出一个新的数据结构,Stream。Redis Stream 的内部,其实也是一个队列,每一个不同的key,对应的是不同的队列,每个队列的元素,也就是消息,都有一个msgid,并且需要保证msgid是严格递增的。在Stream当中,消息是默认持久化的,即便是Redis重启,也能够读取到消息。那么,stream是如何做到多播的呢?其实非常的简单,与其他队列系统相似,Redis对不同的消费者,也有消费者Group这样的概念,不同的消费组,可以消费同一个消息,对于不同的消费组,都维护一个Idx下标,表示这一个消费群组消费到了哪里,每次进行消费,都会更新一下这个下标,往后面一位进行偏移。

    7、系统相关命令

    8、key 相关命令

     关于 key 的命令应该说是最常用的,需要大家记住。

     

     

     这里在介绍一个命令 :

    OBJECT ENCODING    key  

    这是用来显示这五种数据类型的底层数据结构:

    上面的命令我们给string 数据类型 k1 复制str,给 k2 复制123,通过 OBJECT ENCODING 显示底层实现的数据类型分别是 embstr 和 int。

    转自:https://www.cnblogs.com/ysocean/archive/2004/01/13/9080940.html

    时刻与技术进步,每天一点滴,日久一大步!!! 本博客只为记录,用于学习,如有冒犯,请私信于我。
  • 相关阅读:
    你应该掌握的七种回归技术
    jar包运行
    Spark常见问题汇总,spark相关错误和解决方法,,,,,,,,,
    shell把字符串中的字母去掉,只保留数字
    excel求和结果不对
    Matlab实现PCA
    Spring3.0 AOP 具体解释
    POJ 1422 Air Raid(二分图匹配最小路径覆盖)
    TCP、UDP和HTTP
    2014世界互联网乌镇峰会 马云演讲实录
  • 原文地址:https://www.cnblogs.com/myitnews/p/13721446.html
Copyright © 2011-2022 走看看