• 【Redis】基本数据类型


    一、概述

      * Redis目前支持5种数据类型,分别是:

    1. String(字符串)
    2. List(列表)
    3. Hash(字典)
    4. Set(集合)
    5. Sorted Set(有序集合)

    下面就分别介绍这五种数据类型及其相应的操作命令。

    二、String(字符串)

    • String是简单的 key-value 键值对,value 不仅可以是String,也可以是数字
    • Stringredis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr,decr等操作时会转成数值型进行计算,此时redisObjectencoding字段为int
    • String类型在底层实现其实是SSD,C语言中的结构体
    • 应用场景:
      • String是最常用的一种数据类型,普通的key/value存储都可以归为此类
      • 常规key-value缓存应用; 常规计数:微博数,粉丝数等。
    redis 127.0.0.1:6379> SET mykey "redis" 
    OK 
    redis 127.0.0.1:6379> GET mykey 
    "redis"
    

    三、List(列表)

    • Redis列表是简单的字符串列表,可以类比到C++中的std::list,简单的说就是一个链表或者说是一个队列。可以从头部或尾部向Redis列表添加元素。列表的最大长度为232 - 1,也即每个列表支持超过40亿个元素。
    • Redis List的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构。
    • 应用场景
      • Redis list的应用场景非常多,也是Redis最重要的数据结构之一,比twitter的关注列表、粉丝列表等都可以用Redis的list结构来实现,再比如有的应用使用Redis的list类型实现一个简单的轻量级消息队列,生产者push,消费者pop/bpop。
    redis 127.0.0.1:6379> LPUSH runoobkey redis
    (integer) 1
    redis 127.0.0.1:6379> LPUSH runoobkey mongodb
    (integer) 2
    redis 127.0.0.1:6379> LPUSH runoobkey mysql
    (integer) 3
    redis 127.0.0.1:6379> LRANGE runoobkey 0 10
        
    1) "mysql"
    2) "mongodb"
    3) "redis"
    

    四、Hash(字典)

    • Redis Hash对应Value内部实际就是一个HashMap,实际这里会有2种不同实现,这个Hash的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,对应的value redisObject的encoding为zipmap,当成员数量增大时会自动转成真正的HashMap,此时encoding为ht。
    • 应用场景
      • 比如我们可以 hash 数据结构来存储用户信息,商品信息等等。
    127.0.0.1:6379>  HMSET runoobkey name "Hao"  age "18" 
    127.0.0.1:6379>  HGETALL runoobkey
    1) "name"
    2) "Hao"
    3) "age"
    4) "18"
    

    五、Set(集合)

    • Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
    • Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
    • 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
    • 当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。可以基于 set 轻易实现交集、并集、差集的操作。
    • 应用场景
      • 在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。Redis可以非常方便的实现如共同关注、共同粉丝、共同喜好等功能。
      • sinterstore key1 key2 key3 将交集存在key1内
    redis 127.0.0.1:6379> SADD runoobkey redis
    (integer) 1
    redis 127.0.0.1:6379> SADD runoobkey mongodb
    (integer) 1
    redis 127.0.0.1:6379> SADD runoobkey mysql
    (integer) 1
    redis 127.0.0.1:6379> SADD runoobkey mysql
    (integer) 0
    redis 127.0.0.1:6379> SMEMBERS runoobkey
        
    1) "mysql"
    2) "mongodb"
    3) "redis"
    

    六、Sorted Set(有序集合)

    • Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
    • 不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
    • 有序集合的成员是唯一的,但分数(score)却可以重复。
    • 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
    • * 应用场景
      • 在直播系统中,实时排行信息包含直播间在线用户列表,各种礼物排行榜,弹幕消息(可以理解为按消息维度的消息排行榜)等信息,适合使用 Redis 中的 Sorted Set 结构进行存储。
    redis 127.0.0.1:6379> ZADD runoobkey 1 redis
    (integer) 1
    redis 127.0.0.1:6379> ZADD runoobkey 2 mongodb
    (integer) 1
    redis 127.0.0.1:6379> ZADD runoobkey 3 mysql
    (integer) 1
    redis 127.0.0.1:6379> ZADD runoobkey 3 mysql
    (integer) 0
    redis 127.0.0.1:6379> ZADD runoobkey 4 mysql
    (integer) 0
    redis 127.0.0.1:6379> ZRANGE runoobkey 0 10 WITHSCORES
        
    1) "redis"
    2) "1"
    3) "mongodb"
    4) "2"
    5) "mysql"
    6) "4"
    
  • 相关阅读:
    2016.7.26
    2016.7.25
    2016.7.24
    C/C++基本数据类型所占字节数
    几个STL算法:includes,set_difference、set_intersection、set_symmetric_difference、set_union, pre_permutation, next_permutation
    h5 如何打包apk
    Ajax XMLHttpRequest对象的三个属性以及open和send方法
    twisted 使用
    python 的内建函数
    python中的 json 模块使用
  • 原文地址:https://www.cnblogs.com/haoworld/p/redis-ji-ben-shu-ju-lei-xing.html
Copyright © 2020-2023  润新知