码迷,mamicode.com
首页 > 其他好文 > 详细

Redis学习记录——(2)Redis数据类型

时间:2021-07-02 15:23:26      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:最大   排序   srand   img   新建   alt   使用字符串   问题   exist   

Redis数据类型:string

  1. 存储的数据:单个数据,最简单的数据存储类型,也是最常用的存储类型
  2. 存储数据格式:一个存储空间保存一个数据
  3. 存储内容:通常使用字符串,如果字符串以整数形式展示,可以作为数字操作使用

string类型数据基本操作:

  • 添加/修改:set  key value      
  • 获取数据: get  key
  • 删除数据: del  key 
  • 添加修改多个数据:mset key1  value1  key2  value2 ....
  • 获取多个数据:mget key1 key2(如果取得key 不存在则返回nil
  • 获取数据字符个数(即字符串长度):strlen key
  • 追加信息到原始信息后部(如原始信息存在就追加,不存在则新建):append key value

string类型数据的扩展操作

      string 作为值类型操作,为数据库确保主键唯一

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

          redis用于控制数据库表主键ID,为数据库表主键提供生成策略,保证数据库表ID的唯一性

          此方案适用于所有数据库,且redis支持数据库集群

  • 设置数值类型数据增加指定范围的值

           incr  key (增加一个单位的值)

           incrby key increment(增加指定单位的值)

           incrbyfloat  key increment

  • 设置数据类型减少指定范围的值

           decr key (减少一个单位的值)

           decrby key increment(减少指定单位的值)

      

 redis控制数据的生命周期,通过数据是否失效控制业务行为,适用于所有具有时效性限定控制的操作

 

  • 设置数据具有指定的生命周期

           setex  key seconds  value  (单位:秒)

           psetex   key  milliseconds  value(单位:毫秒)

           注意:如果设置具有时效性的数据,当再次插入相同key的值,指定的生命周期则失效  

          

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

  • 数据操作不成功的反馈与数据正常操作之间的差异
  1. 表示运行结果成功

               (int)0->false 失败

               (int)1->true  成功

         2.表示运行结果值       

               (int)4->4  4个

               (int)1->1  1个

  • 数据未获取到

         (nil)等同于null

  • 数据最大存储量

             512MB

  • 数值最大计算范围

             9223372036854775807

Redis数据类型:hash

  1. 对一系列存储数据进行编组,方便管理,典型应用存储对象信息
  2. 一个存储空间保存多个键值对数据
  3. hash类型底层使用哈希表结构实现数据存储
  4. hash存储数据优化,如果field数量较少,存储结构优化为类数组结构,如果field数量多,存储结构使用HashMap结构
  •  技术图片

Hash类型数据基础操作

  • 添加/修改数据

          hset key field value

  • 获取数据

          hget  key  field(获取单个数据)

          hgetall  key(获取所有数据)

  • 删除数据

          hdel key  field1  [field2]

  • 添加修改多个数据

          hmset key field1  value1 field2 value2 ...

  • 获取多个数据

          hmget key field1 field2 ..

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

          hlen key 

  • 获取哈希表中是否存在指定的字段

          hexists key field  

Hash的扩展操作

  • 获取哈希表中所有的字段名或者字段值

          hkeys key(获取所有的key)

          hvals key(获取所有的value)

  • 设置指定字段的数值数据增加指定范围的值

          hincrby key field increment

          hincrbyfloat key field increment

  • 如果存在则不添加,不存在则添加

          hsetnx key field value

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

  • hash类型下的value只能存储字符串,不允许存储其他数据类型,不存在嵌套现象,如果数据未获取到,对应值为(nil)

  • 每个hash可以存储232-1个键值对

  • hash 类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性,但是hash设计初衷不是为了存储大量对象而设计的,切记不可以滥用,更不要将hash作为对象列表使用
  • hgetall操作可以获取全部的属性,如果内部field过多,遍历整体数据效率就会很低,有可能成为数据访问瓶颈

Redis数据类型:List

List数据类型

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

List类型基础操作

  • 添加修改数据 

          lpush key [value1] [value2]...

          rpush key [value1] [value2]...

  • 获取数据

         lrange key strat stop

         lindex key index

         llen key

  • 获取并移除数据

         lpop key 

         rpop key

 

List扩展操作

  •  规定时间内获取并移除数据

 

        blpop key1 [key2] timeout

 

 

        brpop key1 [key2] timeout

 

  •   移除指定数据

        lrem key count value

List类型注意事项

list中保存的数据都是string类型的,数据容量是有限的

list具有索引的概念,但是操作数据时通常以队列的形式进行入队出队操作,或以栈的形式进行入栈出栈操作

获取全部数据操作结束索引设置为-1(-1 表示的意思是索引的最后一个的意思)

list可以对数据进行分页操作,通常第一页的信息来自于List,第二页以及更多的信息通过数据库的形式加载

 

Redis数据类型:set

新的存储需求:存储大量数据,在查询方面提供更高的效率

需要的存储结构:能够存大量数据,高效的内部存储机制,便于查询

set类型:与hash存储结构完全相同,仅存储键,不存储值(nil),并且值不允许重复

set类型基础操作

  • 添加数据

       sadd key member1 [member2]...

  • 获取全部数据 

       smembers key 

  • 删除数据

       srem key member1 [member2]

  • 获取集合数据总量

       scard key 

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

       sismember key member

 

set类型扩展操作

  • 随机获取集合中指定数量的数据

       srandmember key [count]

  • 随机获取集合中的某个数据并将该数据移出集合

       spop key 

  • 求两个集合的交、并、差集

       sinter  key1 [key2]

      sunion key1 [key2]

       sdiff key1 [key2]

  • 求两个集合的交、并、差集并存储到指定集合中

      sinterstore destination key1 [key2]

      sunionstore destination key1 [key2]

      sdiffstore destination key1 [key2]

  • 将指定数据从原始集合中移动到目标集合中

      smove soure destination member

  • set类型的注意事项
  1. set类型不允许数据重复,如果添加的数据在set中已经存在,那么只能保留一份
  2. set虽然于hash类型存储结构相同,但是无法启用hash中存储的那一部分 

 

 

Redis数据类型:sorted_set

新的存储需求:数据排序有利于数据的有效展示,需要提供一种可以根据自身特征进行排序

需要的存储结构:新的存储模型,可以保存可排序的数据

sorted_set类型:在set的基础结构上添加了一个可排序的字段

sorted_set基础操作

  • 添加数据

      zadd key1 scorel member1 [scorel member2]

  • 获取全部数据

      zrange key start stop [WITHSCORES]

      zrevrange key start stop [WITHSCORES]

  • 删除数据

      zrem key member [member...]

  • 按条件获取数据

      zrangebyscore key min max [WITHSCORES] [LIMIT]

      zrevrangbyscore  key max min [WITHSCORES]

  • 按条件删除数据

      zremrangebyrank key start stop

      zremrangebyscore key min max

注意:

min 与max 用于限定搜索条件

start 与stop用于限定查询范围,作用于索引,表示开始可结束索引

offset与count用于限定查询范围,作用于查询结果,表示开始位置和数据总量

 

  • 获取集合数据总量

      zcard key

      zcount key min max

  • 集合交、并操作

      zinterstore destination numkeys key [key....]

      zunionstore destination numkeys key [key...]

 

sorted_set扩展操作

  • 获取数据对应的索引(排名)

       zrank key member

       zrevrank key member

  • score值获取与修改

       zscore key member

       zincrby key increment member

  • 获取当前系统时间

       time

注意事项:

score保存的数据也可以是一个双精度的double值,基于双精度浮点数的特征,可能会丢失精度,使用时要慎重

sorted_set底层存储还是基于set结构的,因此数据不能重复,如果重复添加相同数据,score值将被反复覆盖,保留最后一次修改的结果

Redis学习记录——(2)Redis数据类型

标签:最大   排序   srand   img   新建   alt   使用字符串   问题   exist   

原文地址:https://www.cnblogs.com/zmygo/p/14884710.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!