精华内容
下载资源
问答
  • redis基本数据类型

    2021-04-01 21:38:33
    redis基本数据类型简介stringhashListsetzset 简介 最近面试 关于redis 总遇到 redis 基本数据类型 以及使用场景的问题 就在这里做个总结吧 方便未来复习 也记个tag string hash List set zset

    redis基本数据类型

    简介

    最近面试 关于redis 总遇到 redis 基本数据类型 以及使用场景的问题 就在这里做个总结吧 方便未来复习 也记个tag

    string

    Redis中使用自己的动态字符串(simple dynamic string, SDS)的抽象类型。并且默认用SDS。

    struct sdshdr {    
      // 用于记录buf数组中使用的字节的数目
      // 和SDS存储的字符串的长度相等  
    	int len;    
      // 用于记录buf数组中没有使用的字节的数目   
    	int free;    
      // 字节数组,用于储存字符串
    	char buf[];   //buf的大小等于len+free+1,其中多余的1个字节是用来存储’\0’的。
    };
    

    redis 使用自己的动态字符串而不使用c语言的字符串的原因如下:
    1.c语言的字符串只是简单的字符数组 获取字符串长度的时候 其实是顺序遍历字符串内容 时间复杂度是O(n)的

    redis 自己的动态字符串SDS:只需要访问len属性就可以获取到字符串的长度 时间复杂度是O(1)的

    2.缓冲区溢出的问题
    如果用c语言内部的字符串 必须进行手动的进行内存分配和释放 对于字符串的拼接 复制等操作 c语言开发者 必须保证有足够多的 内存空间 不然就会导致溢出的情况。

    SDS:当使用SDS的api进行修改的时候 在没有超出空间的时候会按照c语言的方式来进行。当没有足够的空间时,SDS 会扩展buf的空间 之后在进行操作 扩展buf空间的同时 free和len的值也会做出相应的修改

    扩展buf的策略:
    修改之后的总长度len<1MB 则扩展 2*len+1
    修改之后的总长度len>1MB 则扩展 len+1MB+1

    3.c的stirng只能保存文本 SDS可以保存文本或者二进制数据

    SDS除了用来保存redis中的字符串 还可以用做缓冲区 buffer。

    hash

    List

    set

    zset

    zset 底层用到了两种数据结构 一种是 ziplist(压缩列表) 一种是 skipList(跳表)

    zset是通过两个zipList来实现的,一个zipList存储数据一个zipList存储score

    当使用skipList时 zset 会配合dict一起进行使用 skipList记录顺序的列表元素 元素中存放的是score和值 方便做一些range的操作 dict存放的是key value键值对 主要是方便查询score和数据的映射关系

    展开全文
  • Redis基本数据类型

    2020-03-21 10:45:19
    Redis基本数据类型 Redis目前支持5种数据类型,分别是: String(字符串) List(列表) Hash(字典) Set(集合) Sorted Set(有序集合) 下面就分别介绍这五种数据类型及其相应的操作命令。 String...

    Redis基本数据类型

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

    String(字符串)

    List(列表)

    Hash(字典)

    Set(集合)

    Sorted Set(有序集合)

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

     

    String(字符串)

    String是简单的 key-value 键值对,value 不仅可以

     

     

    是 String,也可以是数字。String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr,decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。

    String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr,decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。

    应用场景:

    String是最常用的一种数据类型,普通的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列表添加元素。列表的最大长度为2^32 - 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。

     

    127.0.0.1:6379>  HMSET runoobkey name "redis tutorial" 
    127.0.0.1:6379>  HGETALL runoobkey
    1) "name"
    2) "redis tutorial"
    3) "description"
    4) "redis basic commands for caching"
    5) "likes"
    6) "20"
    7) "visitors"
    8) "23000"

     

     

     

     

    Set(集合)

     

    RedisSetstring类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

    Redis 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)

    集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)

     

    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 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"
    展开全文
  • redis基本数据类型使用redis基本数据类型Sting类型常用命令String应用场景Hash常用操作Hash应用场景 redis基本数据类型 redis共有五种基本数据类型,String, Sting类型常用命令 set key value [expiration EX ...

    Redis基本数据类型

    Redis共有五种基本数据类型,String,Hash,List,Set,

    Sting类型常用命令

    set key value [expiration EX seconds|PX milliseconds] [NX|XX]
    

    EX seconds : 将键的过期时间设置为 seconds 秒。 执行 SET key value EX seconds 的效果等同于执行 SETEX key seconds value。
    PX milliseconds : 将键的过期时间设置为 milliseconds 毫秒。 执行 SET key value PX milliseconds 的效果等同于执行 PSETEX key milliseconds value 。
    NX : 只在键不存在时, 才对键进行设置操作。 执行 SET key value NX 的效果等同于执行 SETNX key value
    XX : 只在键已经存在时, 才对键进行设置操作。

    # 存入字符串键值对
    set key value
    # 获取一个字符串键值
    get key
    # 批量存入字符串键值对
    mset key value [key vlaue ...]
    # 批量获取字符串键值
    mget key [key ...]
    #删除一个或多个键
    del key [key ...]
    # 设置一个键的过期时间
    expire key seconds
    # 只在key不存在时进行设置
    setnx key value
    
    
    // 原子加减操作
    # 将key中存储的数值加1
    incr key
    # 将key中存储的数值减1
    decr key
    # 将key中存储的数值加上增量increment
    incrby key increment
    # 将key中存储的数值递减decrement
    decrby key decrement
    

    Hash常用命令

    # 存储一个哈希表key的键值
    hset key field value
    # 获取一个哈希表key的键值
    hget key field
    # 批量存储
    hmset key field value [field value ...]
    # 批量获取
    hmget key field [field ...]
    # 只在哈希表中key键值不存在时进行设置
    hsetnx key field value
    # 删除哈希表key中一个或多个field键值
    hdel key field [field ...]
    # 返回key中field的个数
    hlen key
    # 返回key中所有的键值
    hgetall key
    # 整数递增
    hincrby key field increment
    # float递增
    hincrbyfloat key field increment
    

    List常用命令

    # 将一个或多个value插入到表头
    lpush key value [value ...]
    
    # 将一个或多个value插入到表尾
    rpush key value [value ...]
    
    # 从表头读取数据并移除
    lpop key
    
    # 从表尾读取数据并移除
    rpop key
    
    # 返回列表key中指定区间的元素
    lrange key start stop
    
    # 快速获取列表中全部元素
    lrange key 0 -1
    
    # 从表头弹出一个元素,如果不存在阻塞等待timeout秒,若timeout设置为0则一直等待
    blpop key [key ...] timeout
    
    # 查看表中元素的个数
    llen key
    
    # 通过索引获取元素
    lindex key index
    
    # 在指定元素pivot前后插入元素value
    linsert key before|after pivot value
    
    # 移除列表中count个与value相等的元素
    #count>0 从表头开始搜索移除
    #count<0 从表尾开始搜索移除
    #count=0 移除全部
    lrem list count value
    
    # 更改指定位置元素
    lset key index value
    
    # 向已存在列表表头添加元素
    lpushx key value
    
    # 保留指定区间元素其余删除
    ltrim key start stop
    

    Set常用命令

    # 向set中插入成员
    sadd ket member [member ...]
    # 删除成员
    srem key member [member ...]
    # 查询set中成员数量
    scard key
    # 获取set全部成员
    smembers key
    # 从set中随机获取count个成员,不移除成员
    srandmember ket count
    # 从set中随机获取count个成员,并移除成员
    spop key count
    # 判断成员是否在set中,若在返回1,没有则为0
    sismember key member
    # 将成员从A集合移动到B集合
    smove setA setB member
    

    运算操作

    # 返回多个集合的交集
    sinter key [key ...]
    # 返回多个集合的交集并存入集合A中
    sinterstore setA key [key ...]
    # 返回多个集合的并集
    sunion key [key ...]
    # 返回多个集合的并集并存入集合A
    sunionstoer setA key [key ...]
    # 返回多个集合的差集
    sdiff key [key ...]
    # 返回多个集合的差集并存入集合A中
    sdiffstore setA key [key ...]
    

    Zset常用命令

    zadd key [NX|XX] [CH] [INCR] score member [score member ...]
    

    NX: 不更新存在的成员。只添加新成员。
    XX: 仅仅更新存在的成员,不添加新成员。
    CH: 修改返回值为发生变化的成员总数,原始是返回新添加成员的总数 (CH 是 changed 的意思)。更改的元素是新添加的成员,已经存在的成员更新分数。 所以在命令中指定的成员有相同的分数将不被计算在内。注:在通常情况下,ZADD返回值只计算新添加成员的数量。
    INCR: 当ZADD指定这个选项时,成员的操作就等同ZINCRBY命令,对成员的分数进行递增操作。

    # 添加
    zadd key score member [score member ...]
    
    # 对指定成员分数增量increment,返回值为分数
    zincrby key increment member
    
    # 返回指定分数区间的成员数量
    zcount key min max
    
    # 返回指定分数区间的成员
    zrangebyscore key min max 
    
    # 返回指定索引区间的成员
    zrange key start start stop //从低到高
    zrevrange key start stop //从高到低
    
    # 返回成员数量
    zcard key 
    
    # 返回指定成员的索引
    zrank key member
    
    # 删除成员
    zrem key member [member ...]
    
    # 删除指定索引区间的全部成员
    zremrangebyrank key start stop
    
    # 删除指定分数区间的全部成员
    zremrangebyscore key start stop
    
    展开全文
  • redis基础知识redis基本数据类型redis基本操作java-redis=jedis 基本操作 redis基本数据类型 对比其他的缓存框架,redis目前是存储类型最丰富的,5中类型分别为: 字符串(string), 哈希(hash),集合(list),(去重...

    redis 还是非常重要的知识点,如果而且大有取代当前缓存框架的趋势

    redis基本数据类型

    对比其他的缓存框架,redis目前是存储类型最丰富的,5中类型分别为:

    字符串(string), 哈希(hash),集合(list),(去重集合)set,(有序集合)zset

    redis基本操作

    各种数据类型的增删改查操作

    参考博文:

    https://www.cnblogs.com/wf-skylark/p/9307346.html

    https://blog.csdn.net/qq_39772504/article/details/89879041

    Sting 类型的相关数据
    
    set key value 时间
    setex key 时间 value
    get key
    mset key value key1 value1  添加多个值
    del key 
    
    
    
    hash 类型相关的数据
    
    
    hash 用于存储对象相关的
    
    hset 对象 key value key1 value1
    
    hget 对象 key
    
    hmget key key1  // 获取多个对象
    
    hdel 对象 key
    
    
    list 集合类型
    
    lpush key value1 value2   // 添加多个值 
    
    lrange key startNum endNum 
    
    
    
    
    
    
    
    
    
    
    
    
    

    jedis 基本操作

    展开全文
  • Redis系列 - Redis基本数据类型与操作 字符串String 散列Hash(key-filed-value) 列表List SortedSet(zSet) Set 字符串String 字符串是Redis中最常用的类型,是一个由字节组成的序列,它在Redis中是二进制...
  • redis 基本数据类型及底层数据结构 1.redis 基本数据类型 string list hash set zset 2.每种数据类型低层数据类型 每种数据类型都对应两种及以上数据结构,同一类型不同条件底层数据结构不同 查看key对应的value...
  • Redis基本数据类型 Redis目前支持5种数据类型,分别是: String(字符串) List(列表) Hash(字典) Set(集合) Sorted Set(有序集合) 下面就分别介绍这五种数据类型及其相应的操作命令。 String...
  • Redis基本数据类型 redis是以k-v结构来存储数据的,key的类型只有string类型,我们平常所说的数据类型一般是指value的类型,下面我们将介绍5种基本数据类型,至于HyperLoglog、Pub/Sub等数据类型,后面会详细介绍。 ...
  • Redis入门(三)——Redis基本数据类型 Redis 不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。 目录 string数据类型 list数据类型 set数据类型 hash数据类型 ...
  • redis基本数据类型之String redis一共分为5中基本数据类型:String,Hash,List,Set,ZSet String String类型是包含很多种类型的特殊类型,并且是二进制安全的。比如序列化的对象进行储存,比如一张图片进行二进制...
  • Redis基本数据类型有哪些Redis支持五种基本数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。一、String(字符串)string字符串类型是Redis的最基本数据类型。一个键名key...
  • Redis基本数据类型 Redis的整体都是key——value的形式,但是value的数据结构却有所区别,主要有5种基本数据类型【1】: 除此之外,可以通过设定二进制的String类型可以得到Bit arrays类型,当然,Redis提供了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,631
精华内容 2,652
关键字:

redis基本数据类型

redis 订阅