引言

在Redis学习笔记(一)中我们已经会安装并且简单使用Redis了,接下来我们一起来学习下Redis支持的5大数据类型。

简介

Redis是REmote DIctionary Server(远程字段服务器)的缩写,它以字典结构存储数据,并允许其他应用通过TCP协议读写字典中的内容。同大多数脚本语言中的字典一样,Redis字典中的键值除了可以是字符串,还可以是其他的数据类型。到目前为止Redis支持的键值数据类型如下:

  (1)字符串类型(String)

  (2)散列类型(Hash)

  (3)列表类型(List)

  (4)集合类型(Set)

  (5)有序集合类型(SortedSet)

在学习这5种数据类型之前,我们先了解几个基础的命令来热身。

1)KEYS  pattern

此命令用来获取复核规则的键名列表,pattern支持glob风格通配符格式,具体规则如下图:

   

下图的例子中,SELECT 0 表示选择0号数据库,KEYS * 表示查询所有的key,KEYS foo* 表示查询所有以foo开头的key。

   

2)EXISTS key

此命令用来判断一个键是否存在。存在返回1,不存在返回0。实例如下图:

    

3)TYPE key

此命令用来获取键值的数据类型,返回值可以是以上提到的5种数据类型。

通过上面的简单命令,相信大家已经对Redis有了个初步的认识。下面来详细的介绍各个类型所涉及的命令。

一、字符串类型(String)

  1.介绍

  字符串类型是Redis中最基础的数据类型,它能存储任何的字符串,包括二进制数据。你也可以用它来存储用户的邮箱、JSON对象和图片等。一个字符串类型键允许存储的数据的最大容量是512M。字符串类型也是其他4种数据类型的基础,只能说他们的组织字符串的形式不同罢了。

  2.基本命令

  1)赋值与取值

    SET key value 此命令用来赋值,如果key存在,则会覆盖原有的value值;如若不存在则会新建一个key,赋值为value。

    GET key  此命令用来取值,如果key存在,则返回原有的value;不存在则返回nil。

  2)递增或递减整数

    当存储的字符串是整数形式时,以下命令才会有实际作用,否则Redis会提示错误:

    

    INCR key    INCRBY key increment

    INCR key命令用来使key的当前值(整数)递增,并返回递增后的值。当要操作的键不存在时会默认值为0。

    

    INCRBY key increment 命令与 INCR 命令基本一样,INCRBY key increment命令可以通过increment参数来控制每次递增的值。示例如下:

    

    DECR key    DECRBY key increment    这两命令与以上两个命令用法一致,此处不再赘述。

  3)增加指定浮点数

    INCRBYFLOAT key increment

    INCRBYFLOAT 命令类似INCRBY命令,差别是INCRBYFLOAT命令可以增加一个双精度浮点数。示例如下:

    

  4)向尾部增加值

    APPEND key value

    此命令是像键值的末尾追加value。返回值为追加后的字符串的长度。如果key不存在则新增一个键为key,它的值为value。

  5)获取字符串的长度

    STRLEN key

    此命令返回键值的长度。

  6)同时获取或者设置多个键值

    MSET key value [key1 value1 key2 value2 ...]    MGET key[key1 key2 ...]

    

  7)位操作

    GETBIT key offset    SETBIT key offset value

    BITCOUNT key [start] [end]

    BITOP oppration destkey key [key1 key2 ...]

    一个字节由8个二进制组成,上面4个命令可以直接对二进制位进行操作。由于此命令在开发中不太常用,此处不再赘述,如有兴趣,大家可参考《REDIS入门指南》的30页。

二、散列类型(Hash)

  1.介绍

  Hash存储了字段和字段值的映射,但字段值只能是字符串类型,也就是说,散列类型不支持嵌套其他的数据类型。一个散列类型键至多可以包含 2的32次方减1 个字段。散列类型很适合存储对象,使用对象类别和ID组成键名,字段名来表示对象属性名,字段值来存储属性值。例如要存储ID为2的汽车:

    

  注:Redis的其他数据类型同样也不支持数据类型嵌套。

  2.命令

    1)赋值与取值

    HSET key field value       HGET key field

    HMSET key field value [field1 value1 ...]      HMGET key field [field1...]

    HGETALL key

    在上述命令中key表示Hash键值的键名,field表示字段名,value则表示字段所对应的字段值。用法与String类型基本一致,此处不再赘述。需要注意的是,HSET命令不区分插入和更新操作。当执行插入操作时返回值为1,当执行更新操作时返回值为0。更进一步,当键不存在时,HSET命令还会自动创建它。

    特别的,HGETALL命令适用于想获取键中所有字段和字段值,却又不知道键中有哪些字段时这样的场景。如:

    

    另外,每种数据类型都有属于自己的命令,但是都是基于字符串类型(String)来改变的,如散列类型(Hash)的命令就是H开头的。如果使用一种数据类型的命令去操作另外一种数据类型的话,Redis会提示错误。

    

    2)判断字符串是否存在

    HEXISTS key field

    此命令用来判断一个字段是否存在,如果存在返回值为1,否则为0。键如果不存在也会返回0。

    3)HSETNX key field value

    此命令与HSET命令相似,区别在于如果字段已经存在,将不执行任何操作,否则执行HSET key field value 操作。

    4)增加数字

    HINCRBY key field increment

    此命令与String的INCRBY命令用法一致,此处不再赘述。

    5)删除字段

    HDEL key field [field1 ...]

    HDEL 命令可以删除一个或多个字段,返回值是删除的字段的个数。

    

    6)只获取字段或字段值

    HKEYS key    KVALS key

    

    7)获得字段个数

    HLEN key

    

由于时间问题,今天先更新2个数据类型,后续会继续更新。

Redis学习笔记(二)Redis支持的5种数据类型的总结之String和Hash的更多相关文章

  1. StackExchange.Redis学习笔记(二) Redis查询 五种数据类型的应用

    ConnectionMultiplexer ConnectionMultiplexer 是StackExchange.Redis的核心对象,用这个类的实例来进行Redis的一系列操作,对于一个整个应用 ...

  2. Redis学习笔记之入门基础知识——五种数据类型

    1) 字符串 SET设置值,GET获取值,DEL删除值 INCR key-name将键存储的值加上1       DECR key-name将键存储的值减去1 INCRBY key-name amou ...

  3. Redis学习笔记二 (BitMap算法分析与BitCount语法)

    Redis学习笔记二 一.BitMap是什么 就是通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身.我们知道8个bit可以组成一个Byte,所以bitmap本身会极大的节省 ...

  4. Redis学习笔记(二):Redis集群

    集群通过分片(sharding)来进行数据共享,并提供复制和故障转移功能.   1.节点 一个节点就是一个运行在集群模式下的Redis服务器.启动Redis服务器时,通过判断cluster-enabl ...

  5. Redis学习笔记之Redis中5种数据结构的使用场景介绍

    原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 redis 中一共有5种数据结构 ...

  6. Redis学习笔记(4) Redis事务、生存时间及排序

    1. Redis事务 Redis中的事务(transaction)是一组命令的集合,一个事务中的命令要么都执行,要么都不执行.事务的原理是先将属于一个事务的命令发送给Redis,然后再让Redis依次 ...

  7. Redis学习笔记(2) Redis基础类型及命令之一

    1. 基础命令 (1) 获取符合规则的键名列表 格式为:KEYS pattern 其中pattern表示支持通配符 # 建立一个名为bar的键 > SET bar OK # 获取Redis所有键 ...

  8. Redis学习笔记(1) Redis介绍及基础

    1. Redis的特性 (1) 存储结构 Redis(Remote Dictionary Server,远程字典服务器)是以字典结构存储数据,并允许其他应用通过TCP协议读写字典中的内容.Redis支 ...

  9. redis学习笔记之redis简介

    redis简介 Redis是一个开源的,高性能的,基于键值对的缓存与存储系统,通过设置各种键值数据类型来适应不同场景下的缓存与存储需求.同事redis的诸多高层级功能使其可以胜任消息队列,任务队列等不 ...

随机推荐

  1. uva 1378 - A Funny Stone Game(组合游戏)

    题目链接:uva 1378 - A Funny Stone Game 题目大意:两个人玩游戏,对于一个序列,轮流操作.每次选中序列中的i,j,k三个位置要求i<j≤k,然后arr[i]减1,对应 ...

  2. UVA - 11396 Claw Decomposition(二分图染色)

    题目大意:给你一张无向图,每一个点的度数都是3. 你的任务是推断是否能把它分解成若干个爪(每条边仅仅能属于一个爪) 解题思路:二分图染色裸题.能够得出:爪的中心点和旁边的三个点的颜色是不一样的 #in ...

  3. CSS3实现的一批hover特效

    本特效的原版是codepen上面的hover.css项目.个人非常喜欢所以把全部的hover特效自己也写了一遍,上传文件麻烦所以直接把css整合到HTML代码中了.代码复制下来保存后就可以用浏览器打开 ...

  4. SourceTree 基本介绍

    Git的服务器端: 最出名的是GitHub,但是不能创建私有仓库,创建私有得需要Money Bitbucket:可以创建私有数据库,但是速度太慢,太消磨激情了 如果既想创建私有又想要激情,那只能自己搭 ...

  5. ABP入门系列(9)——权限管理

    ABP入门系列目录--学习Abp框架之实操演练 源码路径:Github-LearningMpaAbp 完成了简单的增删改查和分页功能,是不是觉得少了点什么? 是的,少了权限管理.既然涉及到了权限,那我 ...

  6. 稀疏分解中的MP与OMP算法

    MP:matching pursuit匹配追踪 OMP:正交匹配追踪 主要介绍MP与OMP算法的思想与流程,解释为什么需要引入正交? !!今天发现一个重大问题,是在读了博主的正交匹配追踪(OMP)在稀 ...

  7. oracle 主键自增 设置----杜恩德

    <div id="topicList"> <div class="forFlow"> <div class = "pos ...

  8. Linux下查看Go语言软件运行情况

    在Linux下,使用"jps"可以查看用Java语言写的软件的运行情况,如果要查看GO语言写的软件的运行情况,可以使用"gops",但这不是系统自带的,需要进行 ...

  9. EntityFramework Core数据查询

    前言 本节我们再来讲讲EF Core,本节算是回归基础吧,当前项目EF Core还是处于1.1版本中,后续等待.net core等版本稳定了全部会更新到2.0版本中,到时再来更新相关文章分享给大家. ...

  10. mysql 证明为什么用limit时,offset很大会影响性能

    本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/117 首先说明一下MySQL的版本: mysql> sel ...