精华内容
下载资源
问答
  • Redis的五种数据类型

    2021-04-14 12:16:33
    Redis的五种数据类型,(string,list,散列hash,set,sorted set) redis的常见数据类型 string list hash set sorted set string: string是redis种最常用的数据结构,其中key-value也是string类型,尽管redis是...

    Redis的五种数据类型,(string,list,散列hash,set,sorted set)

    redis的常见数据类型

    1. string
    2. list
    3. hash
    4. set
    5. sorted set

    string:
    string是redis种最常用的数据结构,其中key-value也是string类型,尽管redis是由c编写的但是redis没有使用c语言中使用字符数组的字符串表示方式,而是自己开发了一种简单动态字符串SDS[Simple Dynamic String] redis中的SDS是二进制安全的因此不仅可以存储文本数据也可以存储任意格式的二进制数据,而且获取字符串长度时间复杂度为O(1)
    常用命令:set get exists strlen del mset mget incr decr
    应用场景: 用于需要统计数量的地方,比如访问量观看量评论数量等
    当字符串内容为整数时可以使用incr 和 decr命令来操作数
    list
    list即链表,链表在很多语言中都有,链表的特点就是数据的插入和删除快数据的访问比较慢,但是c语言没有实现链表,redis自己实现了list这种数据结构底层是双向链表,支持双向的查找和遍历但是双向链表比单向链表又增加内存开销
    常用指令:lpush,lpop,rpush,rpop,lrange,llen等
    应用场景:消息队列,最新信息,榜单
    hash
    类似于Java中的hashmap 内部实现数组加链表,但是redis中的hash和Java中的hashmap并不完全一样 redis中key-value中的value也是一个map string类型的field/value映射表,非常适合用来存储对象,商品信息,包含多个属性的东西
    在这里插入图片描述

    常用命令:hset,hget,hgetall,hexists,hkeys,hvals
    应用场景:存储用户信息,商品信息等
    set
    类似于Java中的hashset,和hashset一样redis中的set是一种无序集合,集合中的元素没有顺序,并且不会重复,并且set中还提供了判断某个成员是否在集合内的接口,set可以轻易实现并集交集和差集的功能
    常用命令:sadd,spop,smembers,sismember,scard,sinterstore,sunion等
    应用场景:实现共同关注,共同好友的功能
    sortedset
    在set的基础上加了权重这个参数(double类型的score),使得set中的元素按照所加的权重来进行排序
    常用指令:zadd,zcard,zscore,zrange,zrevrange
    需要根据权重进行排序的地方

    redis的有序集合在score相同的情况 下是如何排序的

    通过谷歌搜索,发现了一些线索,在score相同的情况下,redis使用字典排序,不过不是太明白什么是字典排序,于是自己测试了一下,相信下面的截图就能回答这个问题了:

    img

    在score相同的情况下,redis使用字典排序,而所谓的字典排序其实就是“ABCDEFG”这样的排序,在首字母相同的情况下,redis会再比较后面的字母,还是按照字典排序(如截图所示,beigai和baijing的排列顺序)。

    展开全文
  • redis的五种数据类型

    千次阅读 2018-06-10 15:30:26
    前一篇文章(redis安装配置与测试),介绍了linux下redis的安装配置与测试,这里总结一下redis的五种数据类型,及其简单的操作测试:redis有五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)...

    前一篇文章(redis安装配置与测试),介绍了linux下redis的安装配置与测试,这里总结一下redis的五种数据类型,及其简单的操作测试:

    redis有五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)、zset(有序集合)。

    (1)string是最基本的数据类型

    127.0.0.1:6379> SET key2 value2
    OK
    127.0.0.1:6379> GET key2
    "value2"

    127.0.0.1:6379> 

    (2)hash是一个键值对的集合

    127.0.0.1:6379> HSET test_hash filed1 values1 filed2 values
    (integer) 2
    127.0.0.1:6379> HGET test_hash filed1
    "values1"

    127.0.0.1:6379> 

    (3)list是一个字符串列表,可以在列表左边或者右边添加元素,允许重复元素

    127.0.0.1:6379> LPUSH test_list "test"
    (integer) 1
    127.0.0.1:6379> RPUSH test_list "redis"
    (integer) 2
    127.0.0.1:6379> LRANGE test_list 0 2
    1) "test"
    2) "redis"
    127.0.0.1:6379>

    (4)set是string的无需集合,不允许元素重复

    127.0.0.1:6379> SADD test_set "test" "set" "redis"
    (integer) 3
    127.0.0.1:6379> SMEMBERS test_set
    1) "redis"
    2) "test"
    3) "set"

    127.0.0.1:6379> 

    (5)zset是字符串的有序集合,不允重复的元素,每一个元素有关联一个分数,用于排序。

    127.0.0.1:6379> ZADD test_zlist 0  "test"
    (integer) 1
    127.0.0.1:6379> ZADD test_zlist 1 "zset"
    (integer) 1
    127.0.0.1:6379> ZRANGEBYSCORE test_zlist 0 2
    1) "test"
    2) "zset"
    127.0.0.1:6379> 

    展开全文
  • Redis的五种数据类型(二)

    千次阅读 热门讨论 2020-05-10 09:30:30
    2.Redis的五种数据类型(常用) string(字符串)hash(哈希)list(列表)set(集合)zset(sorted set:有序集合) 这里介绍的是Redis中比较常用的五种数据类型,还有其他的数据类型。 3.string 存储的数据:单个...

    1.Redis 数据存储格式

    • Redis本身是一个Map,其中所有的数据都是采用key:value的形式存储
    • 数据类型指的是存储的数据类型,也就是value部分的类型,key部分永远都是字符串
      在这里插入图片描述

    2.Redis的五种数据类型(常用)

    string(字符串)hash(哈希)list(列表)set(集合)zset(sorted set:有序集合)
    这里介绍的是Redis中比较常用的五种数据类型,还有其他的数据类型。

    string

    • 存储的数据:单个数据,最简单的数据存储类型,也是最常用的数据存储类型
    • 存储数据的格式:一个存储空间保存一个数据
    • 存储内容:通常使用字符串,如果字符串以整数的形式展示,可以作为数字操作使用
      在这里插入图片描述

    string 基本操作

    • 添加/修改数据

    set key value

    • 添加/修改多个数据

    mset key1 value1 key2 value2 …

    • 获取数据

    get key

    • 获取多个数据

    mget key1 key2 …

    • 删除数据

    del key

    • 获取字符串长度

    strlen key

    • 追加信息到原始信息后部(如果原始信息存在就追加,否则新建)

    append key value

    string 扩展操作

    • 设置数值数据增加指定范围的值
    • incr key key 增加1
    • incrby key increment key增加increment,increment可以为正,也可以为负(减)
    • 设置数值数据减少指定范围的值
    • decr key key 减1
    • decrby key increment key 减少increment,increment为负代表加
    • 设置数据具有指定的声明周期
    • setex key seconds value 在指定的秒内能够获取到数据,超出时间就为nil
    • psetex key milliseconds value 在指定的毫秒内能够获取到数据,超出时间就为nil

    string 作为数值操作

    • string 在Redis内部存储默认就是一个字符串,当遇到增减类操作incr、decr时会转成数值类型进行计算。
    • redis所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发带来的数据影响。
    • 注意:按数值进行操作的数据,如果原始数据不能转换成数值,或超过了redis的数值上限范围(long类型数据的最大值),将报错。

    string 类型数据操作的注意事项

    • 数据操作不成功的反馈与数据正常操作之间的差异
      ① 表示运行结果是否成功
      (integer) 0 → false 失败
      (integer) 1 → true 成功
      ② 表示运行结果值
      (integer) 3 → 3 3个
      (integer) 1 → 1 1个
      表示的是运行结构是否成功还是运行结果的值还是要看命令的具体功能
    • 数据未获取到
      (nil)等同于null
    • 数据最大存储量 512MB
    • 数值计算最大范围(java中的long的最大值) 9223372036854775807

    业务场景

    • redis用于控制数据库表主键id(incr),为数据库表主键提供生成策略,保障数据库表的主键唯一性
      在这里插入图片描述
    • redis 控制数据的生命周期(setex),通过数据是否失效控制业务行为,适用于所有具有时效性限定控制的操作
      在这里插入图片描述
    • 主页高频访问信息显示控制,例如新浪微博大V主页显示粉丝数与微博数量 (存储对象)
      在这里插入图片描述

    hash

    • 新的存储需求:对一系列存储的数据进行编组,方便管理,典型应用对象存储信息
    • 需要的存储的结构:一个存储空间保存多个键值对数据
    • hash类型:底层使用哈希表结构试下数据存储
      在这里插入图片描述

    hash 基本操作

    • 添加/修改数据

    hset key field value

    • 添加/修改多个数据

    hmset key field1 value1 field2 value2…

    • 获取数据

    hget key field 获取某个字段的值
    hgetall key 获取所有字段的值

    • 获取多个数据

    hmget key field1 field2…

    • 删除数据

    hdel key field1 [field2]

    • 获取哈希表中字段的数量

    hlen key

    • 判断哈希表中是否存在指定的字段

    hexists key field

    hash 扩展操作

    • 获取哈希表中所有的字段名或字段值
    • hkeys key
    • hvals key
    • 设置指定字段的数字数据增加指定范围的值
    • hincrby key field increment
    • hincrbyfloat key field increment

    hash 注意事项

    • hash 类型下的value只能存储字符串,不允许存储其他数据类型,不存在嵌套现象。如果数据未获取到,对应的值为(nil)。
    • 每个hash 可以存储2 的32次方 减1个键值对
    • hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性。但hash设计的初衷不是为了存储大量对象而设计的,切记不可滥用,更不可以将hash作为对象列表使用
    • hgetall 操作可以获取全部属性,如果内部field过多,遍历整体数据效率就会很低,有可能成为数据访问瓶颈

    应用场景
    hash 类型十分适合存储对象类数据,相对于在 string 中介绍的把对象转化为 json 字符串存储,hash 的结构可以任意添加或删除‘字段名’,更加高效灵活。

    list

    • 数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分
    • 需要的存储结构:一个存储空间保存多个数据,且存储的数据可以体现进入顺序
    • list类型:保存多个数据,底层使用双向链表存储结构实现
      在这里插入图片描述

    list 基本操作
    -添加/修改数据

    • lpush key value1 [value2]… 从左边进入,类似入栈
    • rpush key value1 [value2]…从右边进入
    • 获取数据
    • lrange key start stop 获取从索引start到索引stop的数据,stop可以为负数,代表倒数第几个
    • lindex key index 获取索引为index的数据
    • llen key 获取list中元素的个数
    • 获取并移除数据
    • lpop key 从左边取出数据
    • rpop key 从右边取出数据
    • 移除数据

    lrem key count value 从列表中找到第count个等于value的元素,并进行删除,根据count的不同有不同的情况

    list 扩展操作

    • 规定时间内获取并移除数据,阻塞式获取,获取值如果还没有的时候可以等,如果有值就可以获取到,超过时间,还没有的话,返回nil。
    • blpop key1 [key2] timeout
    • brpop key1 [key2] timeout
    • brpoplpush source destination timeout

    list 注意事项

    • list中保存的数据都是string类型的,数据总容量数有限的,最多2的32次方减1个元素
    • list具有索引的概念,但是操作时通常以队列的形式进行入队出队操作,或以栈的形式进行入栈出栈的操作
    • 获取全部数据操作结束索引设置为-1
    • list可以对数据进行分页操作,通常第一页的信息来自list,第二页的及更多的信息通过数据库的形式加载

    应用场景

    • 消息队列
      redis 的 list 数据类型对于大部分使用者来说,是实现队列服务的最经济,最简单的方式。
    • 最新内容
      因为 list 结构的数据查询两端附近的数据性能非常好,所以适合一些需要获取最新数据的场景,比如新闻类应用的 “最近新闻”。
      几个口诀:
      lpush + lpop 栈
      lpush + rpop 队列
      lpush + ltrim = 有限集合
      lpush + brpop = 消息队列

    set 类型

    新的存储需求:存储大量的数据,在查询方面提供更高的效率
    需要的存储结构:能够保存大量的数据,高效的内部存储机制,便于查询
    set类型:与hash存储结构完全相同,但是set仅存储键,不存储值(nil),并且value是不允许重复的,底层是哈希表
    在这里插入图片描述

    set 基本操作

    • 添加数据

    sadd key member1 [member2]

    • 获取全部数据

    smembers key

    • 删除数据

    srem key member1 [member2]

    • 获取集合数据数量

    scard key

    • 判断集合中是否包含指定数据

    sismember key member

    set 扩展操作

    • 随机获取集合中指定数量(count默认为1)的数据

    srandmember key [count]

    • 随机将集合中指定数量(count 默认为1)的数据移出集合

    spop key [count]

    • 多个集合的交、并、差集
    • sinter key1 [key2 …]
    • sunion key1 [key2…]
    • sdiff key1 [key2…] 注意key1在前表示得到的是key2中没有的key1元素
    • 多个集合的交、并、差集并存储到指定集合中
    • sinterstore destination key1 [key2…]
    • sunionstore destination key1 [key2…]
    • sdiffstore destination key1 [key2…]
    • 将指定数据(一个)从原始集合中移动到目标集合中

    smove source destination member

    set注意的事项

    • set类型不允许数据重复,如果添加的数据在set中已经存在,将只保留一份
    • set虽然与hash的存储结构相同,但是无法启用hash中存储值的空间

    set 应用场景

    • 显示共同好友
    • 随机推荐

    redis 应用于随机推荐类信息检索,例如热点歌单推荐,热点新闻推荐,热卖旅游线路,应用APP推荐, 大V推荐等

    sorted_set 类型

    • 新的存储需求:数据排序有利于数据的有效展示,需要提供一种可以根据自身特征进行排序的方式
    • 需要的存储结构:新的存储模型,可以保存排序的数据
    • sorted_set类型:在set的存储结构基础上添加可排序的字段
      在这里插入图片描述

    sorted_set 基本操作

    • 添加数据

    zadd key score1 member1 [score2 member2] 默认升序排列

    • 获取全部数据
    • zrange key start stop [WITHSCORES] ——start stop 代表索引,加上withscores,有scores的值,不加,就只有members 没有scores的值 升序输出
    • zrevrange key start stop [WITHSCORES] 反序(降序)输出
    • 按条件获取数据
    • zrangebyscore key min max [WITHSCORES] [LIMIT] ——min max 是数据的范围,limit用于限定查询范围,作用于查询结果,后面跟两个参数,offset,从第结果的几个开始,count 获取几条数据
    • zrevrangebyscore key max min [WITHSCORES]

    注意limit作用于查询结果
    在这里插入图片描述

    • 删除数据

    zrem key member [member…]

    • 按条件删除数据
    • zremrangebyrank key start stop
    • zremrangebyscore key min max
    • 获取集合数据总量

    zcard key
    zcount key min max

    • 集合交、并操作

    zintestore dstination numkeys key [key…]
    zunionstore destination numkeys key [key…]

    sorted_set 扩展操作

    • 获取数据对应的索引

    zrank key member
    zrevrank key member

    • score 值获取与修改

    zscore key member
    zincrby key increment member

    应用场景

    • 排行榜
    • 游戏好友亲密度

    参考:
    112节Redis入门到精通

    如有不足之处,欢迎指正,谢谢!

    展开全文
  • redis的五种数据类型 String类型 SET name 'ww' get name hash类型 hmset user:1 name ww password 123 score 100 hgetall user:1 List类型 lpush listname a lpush listname b lpush listname c lrange listname...

    redis的五种数据类型

    String类型
    SET name 'ww'
    get name

    hash类型
    hmset user:1 name ww password 123 score 100
    hgetall  user:1

    List类型
    lpush listname a
    lpush listname b
    lpush listname c
    lrange listname 0 10

    Set类型
    sadd setname a
    sadd setname b
    sadd setname c
    smember setname

    Zset类型
    zadd zsetname 1 a
    zadd zsetname 2 b
    zadd zsetname 3 c
    zrangebyscore zestname 0 10

    展开全文
  • Redis的五种数据类型及方法 字符串string: 字符串类型是Redis中最为基础的数据存储类型,是一个由字节组成的序列,他在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据货Json...
  • Redis的五种数据类型和使用场景Redis简介string (字符串)hash (哈希)list (列表)set (集合)zset (有序集合) Redis简介 Redis(Remote Dictionary Server),也就是远程字典服务,是一个开源的使用ANSI C语言编写、...
  • Redis 的五种数据类型 1. 五种数据类型 字符串(STRING):数据存储结构可以是字符串、整数、浮点数。 列表(LIST):数据结构双向链表,每个节点是字符串。 集合(SET):数据结构哈希表,每个节点是字符串且不能重复。 ...
  • 57.谈谈你对redis的理解,redis的五种数据类型的应用场景 redis是一款高性能的NOSQL系列的非关系型数据库。 内容缓存,主要用于处理大量数据的高访问负载。 数据模型: 一系列键值对 优势: 快速查询 劣势: 存储的...
  • Redis常用的五种数据类型分别是:String、List、Set、Hash、Zset。 一、Redis五种类型的常用命令 1.1 String String是 redis 最基本的数据类型。一个 key 对应一个value。redis的String可以表示任何数据,比如 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,414
精华内容 1,765
关键字:

redis的五种数据类型

redis 订阅