Redis数据库支持的数据类型

Redis数据库是一种高级的key-value存储系统,其中value支持五种数据类型:
1)字符串(String)
2)哈希类型(hash)
3)字符串列表(list)
4)字符串集合(set)
5)有序字符串集合(sorted set)

一.字符串类型数据

1.1 字符串类型简介

字符串类型是Redis中最基础的数据类型,在Redis中String类型数据是二进制安全的,所以它存入和获取的数据相同。在Redis中,字符串类型的value最多可以容纳的数据长度是512M

1.2 在Redis中操作字符串类型数据

1.存入数据

set key value 命令:将一组key-value存入Redis

2.取出数据

get key 命令:获取key对应的value值
如果与key对应的value不是String类型的数据,则会报错,因为get命令只能用来取出String类型数据。

3.修改数据

getset key value 命令:将key对应的值更改为一个新的值value
append key value 命令:如果key存在,在原有的value后增加拼装字符串。若key不存在,则新增一个key-value,此命令常用来修改value值

4.删除数据

del key 命令:删除指定的key

5.数值增减

incr key 命令:指定key的value原子性增1,如果目标key不存在,则由默认值0增加为1。如果value值不能转换为整型。则返回错信信息
decr key 命令:指定key的value原子性减1,如果目标key不存在,则由默认值0减少为-1。如果value值不能转换为整型。则返回错信信息
incrbe key increment 命令:指定key的value原子性增加increment ,如果目标key不存在,则由默认值0增加为increment 。如果value值不能转换为整型。则返回错信信息
decrby key increment 命令:指定key的value原子性减少increment ,如果目标key不存在,则由默认值0减少为-increment 。如果value值不能转换为整型。则返回错信信息

二.哈希类型数据

2.1 哈希类型简介

Redis中的Hashes类型可以看成和String类型一样的key-value类型的结构,不同的是这里的value值也是一个Map容器,即value中存放的是filed-value映射关系。因此该类型非常适合于存储值对象的信息。如Username、Password和Age等。如果 Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。每一个Hash 可以存储4294967295个键值对。

2.2 在Redis中操作哈希类型数据

1.存入数据

hset key field value 命令:存入数据,key对应一个field-value(键值对)
hset key field1 value1 field2 value2 … 命令:存入数据,为一个key设置多个field-value(键值对)

2.取出数据

hget key field 命令:获取指定的key中的field的值
hmget key field1 field2 … 命令:获取key中的多个filed-value
hgetall key 命令:获取key中的所有filed-vaule

3.修改数据

hmset key field1 field2 … 命令:设置key中的多个filed-value

4.删除数据

hdel key field1 field2 … 命令:删除key中的多个filed-value
del key 命令:删除整个List

5.数值增减

hincrby key field increment 命令:设置key中filed的值增加increment

6.其他相关命令

hexists key field 命令:判断指定的key中的filed是否存在
hlen key 命令:获取key所包含的field的数量
hkeys key 命令:获取所有的key
hval key 命令:获取所有的value

三.链表类型数据

3.1 List类型简介

在Redis中,List类型是按照插入顺序排序的字符串链表。和数据结构中的栈一样,我们可以在其顶部添加新的元素,与传统的栈不同的是List类型可以从两端添加数据而不是一端。
List类型数据也是一个key对应一个value,这个value就是一个和双向栈功能一样的存储结构
在插入数据时,如果目标键并不存在,Redis将为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除。List中可以包含的最大元素数量是4294967295
从元素插入和删除的效率视角来看,如果我们是在链表的两头插入或删除元素,这将 会是非常高效的操作,即使链表中已经存储了百万条记录,该操作也可以在常量时间内完成。然而需要说明的是,如果元素插入或删除操作是作用于链表中间,那将会是非常低效的。相信对于有良好数据结构基础的开发者而言,这一点并不难理解

3.2 在Redis中操作List类型数据

1.存入数据

lpush key value1 value2 … 命令:在指定的key所关联的list的头部插入所有的 values,如果该key不存在,该命令在插入的之前创建一个与该key关联的空链 表,之后再向该链表的头部插入数据。插入成功,返回元素的个数
rpush key value1 value2 … 命令:在指定的key所关联的list的尾部插入所有的 values,如果该key不存在,该命令在插入的之前创建一个与该key关联的空链 表,之后再向该链表的尾部插入数据。插入成功,返回元素的个数

2.取出数据

lrang key start end 命令:获取链表中从start到end的元素的值,start、end可 为负数,若为-1则表示链表尾部的元素,-2则表示倒数第二个,依次类推…

3.修改数据

4.删除数据

lpop key 命令:删除右边第一个元素,如果目标key不存在,返回nil;若存在,返回并删除key对应的List集合的右边第一个元素
rpop key 命令:删除左边第一个元素,如果目标key不存在,返回nil;若存在,返回并删除key对应的List集合的左边第一个元素

5.数值增减

6.其他相关命令

llen key 命令:返回指定key对应的链表中元素的数量

四.Set类型数据

4.1 Set类型简介

在Redis中,我们可以将Set类型看作为没有排序的字符集合,和List类型一样,我 们也可以在该类型的数据值上执行添加、删除或判断某一元素是否存在等操作。需要 说明的是,这些操作的时间是常量时间。Set可包含的最大元素数是4294967295。
和List类型不同的是,Set集合中不允许出现重复的元素。和List类型相比,Set类 型在功能上还存在着一个非常重要的特性,即在服务器端完成多个Sets之间的聚合计 算操作,如unions、intersections和differences。由于这些操作均在服务端完成, 因此效率极高,而且也节省了大量的网络IO开销

4.2 在Redis中操作Set类型数据

1.存入数据

sadd key value1 value2 … 命令:向set中添加数据,如果该key的值已有则不会重复添加

2.取出数据

smembers key 命令:获取set中所有的成员
scard key 命令:获取set中所成员的数量
srandmember key 命令:随机返回set中的一个成员

3.修改数据

4.删除数据

srem key member1 member2 … 命令:删除set中指定的成员

5.数值增减

6.其他相关命令

sismember key member 命令:判断参数中指定的成员是否在该set中,1表示存在,0表示不存在或者该key本身就不存在
sdiff sdiff key1 key2 命令:返回key1与key2中相差的成员,而且与key的顺序有关,即返回差集
sdiffstore destination key1 key2 命令:将key1、key2相差的成员存储在destination上
sinter key1 key2 … 命令:返回key1和key2的交集
sinterstore destination key1 key2 命令:将key1和key2的交集存储在destination上
sunion key1、key2 命令:返回key1和key2的并集
sunionstore destination key1 key2 命令:将key1和key2的并集存储在destination上

五.Sorted-Sets类型数据

5.1 Sorted-Sets类型简介

Sorted-Sets和Sets类型极为相似,它们都是字符串的集合,都不允许重复的成员出 现在一个Set中。它们之间的主要差别是Sorted-Sets中的每一个成员都会有一个分 数(score)与之关联,这里的分数即权重的意思,Redis通过分数来为集合中的成员进行从小到大的排序。然 而需要额外指出的是,尽管Sorted-Sets中的成员必须是唯一的,但是分数(score) 却是可以重复的
在Sorted-Set中添加、删除或更新一个成员都是非常快速的操作,其时间复杂度为 集合中成员数量的对数。由于Sorted-Sets中的成员在集合中的位置是有序的,因此, 即便是访问位于集合中部的成员也仍然是非常高效的。事实上,Redis所具有的这一 特征在很多其它类型的数据库中是很难实现的,换句话说,在该点上要想达到和Redis同样的高效,在其它数据库中进行建模是非常困难的
例如:游戏排名、微博热点话题等使用场景

5.2 在Redis中操作Sorted-Sets类型数据

1.存入数据

zadd key score1 member1 score2 member2 … 命令:将多个成员以及该成员的分数存放到sorted-set中

2.取出数据

zcount key min max 命令:获取分数在[min,max]之间的成员

3.修改数据

4.删除数据

5.数值增减

6.其他相关命令

zcard key 命令:获取集合中的成员数量
zincrby key increment member 命令:设置指定成员的增加的分数

Redis-02-Redis数据类型与对不同类型数据的操作相关推荐

  1. redis 17.内存优化(小的聚合类型数据的特殊编码处理、内存分配、尽可能使用散列表(hashes))

    文章目录 1.1 小的聚合类型数据的特殊编码处理 1.2 使用32位的redis 1.3 位级别和字级别的操作 1.4 尽可能使用散列表(hashes) 1.5 内存分配 1.1 小的聚合类型数据的特 ...

  2. 数据结构与算法:单链表(利用万能指针实现对任意类型数据进行操作)

    前言 C语言的指针真的很强大,万能指针更强大,可以指向任意类型的数据.在上篇博客 数据结构与算法:单链表(超详细实现)中用C语言实现了单链表的相关算法,不过却有局限性 只能针对某一种数据类型还是不够强 ...

  3. matlab二进制操作,[转载]Matlab二进制类型数据相关操作

    Matlab逻辑运算 &: 逻辑与 A&B 返回值:当A.B中元素均为非零元素是,返回1,否则,为0,还可表示成and(a,b); | :逻辑或 A|B.还可以表示成or(A,B). ...

  4. matlab二进制定义,MATLAB二进制类型数据相关操作

    Matlab逻辑运算 &:逻辑与 A&B 返回值:当A.B中元素均为非零元素是,返回1,否则,为0,还可表示成and(a,b); |:逻辑或 A|B.还可以表示成or(A,B). ~ ...

  5. Python之字典类型数据常见操作及排序

    一.Python 字典 Python 的字典 dictionary 是一种灵活的数据结构类型,字典的每个键值对(key=>value)用冒号(:)分割,每个对之间用逗号(,)分割. Python ...

  6. matlab输出二进制,Matlab二进制类型数据相关操作

    Matlab逻辑运算 &: 逻辑与 A&B 返回值:当A.B中元素均为非零元素是,返回1,否则,为0,还可表示成and(a,b); | :逻辑或 A|B.还可以表示成or(A,B). ...

  7. redis入门和数据类型

    业务数据的特殊性 附加功能 系统功能优化或升级  单服务器升级集群  Session 管理  Token 管理数据存储类型介绍  string  hash  list  set  so ...

  8. redis安装redis集群

    NoSql数据库之Redis 1.什么是nosql,nosql的应用场景 2.Nonsql数据库的类型 a) Key-value b) 文档型(类似于json) c) 列式存储 d) 图式 3.red ...

  9. 后端开发必须要懂的Redis,Redis的数据结构

    认识Redis与Redis的数据结构 本文作为Redis的通识教程,旨在让大家对Redis有一个概念性和整体性的认识,并且可以快速上手,为深入Redis打下基础. 文章概要: Redis的介绍 Red ...

  10. 配置文件存int类型_Redis详解(五)------ redis的五大数据类型实现原理

    > 本系列教程持续更新,可以微信搜索「 IT可乐 」第一时间阅读.回复<电子书>有我为大家特别筛选的书籍资料 前面两篇博客,第一篇介绍了五大数据类型的基本用法,第二篇介绍了Redis ...

最新文章

  1. SQL数据库无法附加 系统表损坏修复 数据库中病毒解密恢复
  2. 快速排序的实现及优化
  3. Android中点击按钮获取string.xml中内容并弹窗提示
  4. mysql providername,c#访问各数据库的providerName各驱动
  5. 可以添加自定义的Select控件
  6. java 注册页面正则式_Java使用正则表达式对注册页面进行验证功能实现
  7. 修改el-popover和el-select样式
  8. 运维(2班)梁瑞第五次作业
  9. Unet美发实例分割,染发展示
  10. OSPF定义的5种区域类型:标准区域、主干区域、存根区域、完全存根区域
  11. C# 使用Newtonsoft.Json读写Json文件
  12. 云呐智能运维工具,智能运维工具怎么用
  13. 安静模式 运行 reg注册表文件
  14. 解决 SysFader:iexplore.exe应用程序错误
  15. 黑苹果教程(二)自己制作cdr、dmg镜像
  16. 初学Web:计算机气质个人主页
  17. scala with cats 之 Contravariant Functors and Invariant Functors
  18. 在linux上安装微信/QQ/TIM/迅雷等
  19. NCBI|16S原始数据上传
  20. JTextArea用法

热门文章

  1. sql python r_Mode Studio,支持Python,R和SQL的云数据分析利器
  2. 相位编码信号 matlab,matlab 求基于相位编码的雷达回波仿真 更多交易加我QQ
  3. 饱和气压与温度的关系_饱和水蒸气压计算公式,看懂的赶紧来
  4. python爬虫面向对象_Python爬虫技术--基础篇--面向对象编程(上)
  5. 机器学习——关于感知机概念的理解(可能只对本人适用)
  6. Tensorflow2梯度带tape.Gradient的用法_(全面,深入)
  7. 科技部正式发文:破除“唯论文”不良导向;网友:靠水论文拿奖励的人不开心了...
  8. 0-1背包问题——回溯法求解
  9. 个人项目之电商秒杀系统总结
  10. 【绝迹篇】RSA加密算法(私钥加签公钥验签)