Redis数据类型string和Hash详解

目录
  • String类型命令操作
    • 设置指定key的值
    • 获取指定key的值
    • 返回key中字符串值的子串
    • 获取多个给定key的值
    • 返回key所对应的字符串的长度
    • 设置一个或多个键值对
    • 将key中所存储的数值加一
    • 将key中所存储的数值减一
    • 字符串追加
  • Hash类型
    • 设置一个Hash数据
    • 获取指定哈希表中所有的字段和值
    • 获取存储在哈希表中指定字段的值
    • 删除一个或多个哈希表字段
    • 获取哈希表中字段的数量
    • 获取哈希表中的所有字段
    • 获取哈希表中所有的值

摘要:Redis中有五大数据类型,分别是String、List、Set、Hash和Zset。

先问大家一个问题:你知道Java的数据类型有哪些吗?很多小伙伴肯定会直接想到int、byte、string等等~~~但是如果这样回答就错啦!

Java中的数据类型包括:基本数据类型和引用数据类型,其中基本数据类型包括:byte、short、int、long、double、float、char、boolean八种,而引用数据类型则是另外三种,分别是类、接口和数组!注意是没有string类型的,这可是面试的一个坑哈!

而在Redis中也是有数据类型的,和Java中有所不同,在Redis中有五大数据类型,分别是String、List、Set、Hash和Zset。而这五种数据类型中的每一个,都对应着很多不同的使用场景。接下来我们就先来学习一下在Redis中操作string和Hash字符串的命令有哪些?

String类型命令操作

String类型是在Redis中最常用的数据类型,它也是很多程序员在日常开发中最常使用甚至只会用的数据类型,这也就导致很多人在使用Redis的时候,就只知道使用string类型,而忽视了其他数据类型的重要性。所以我也希望大家在学习完这篇文章之后,对Redis中的数据类型有一个新的认识,不要只使用String类型进行Redis的操作啦!

注意:在Redis的客户端中进行操作之前,一定要保证Redis的服务器界面处于开启状态,否则会出现客户端拒绝访问或打不开的情况哈!

设置指定key的值

Redis中给string类型的数据设置指定key的方法就是最基本的设置key-value的方法,

语法如下:

SET key value
    key为索引
    value为对应的值

例如我们要设置索引为k3,值为v3的键值对数据

127.0.0.1:6379> SET k3 v3
OK

返回值为ok,则说明设置成功!

获取指定key的值

如果我们已经在Redis中设置了数据,那么我们可以通过该数据的key来获取它,语法格式如下:

GET key
    key为要获取的值对应的索引

例如我们获取刚才输入的索引为k3,值为v3的数据,如果该索引存在,那么将会返回对应的值,如果不存在就会返回(nil)也就是null的意思。

127.0.0.1:6379> GET k3
"v3"
127.0.0.1:6379> GET k4
(nil)

返回key中字符串值的子串

这个命令的作用是获取Redis中已经存在的字符串的子串,同时我们可以指定一个下标索引,指定要获取哪一段字符。命令的格式如下:

GETRANGE key start end
    key为字符串的索引
    start为截取的起始下标
    end为截取的终止下标

比如我们截取索引为“mykey”,值为“huixiaoyuan”的数据的子串,

127.0.0.1:6379> GETRANGE mykey 2 5
"ixia"
127.0.0.1:6379> GETRANGE mykey 2 -1
"ixiaoyuan"
127.0.0.1:6379> GETRANGE mykey 1 100
"uixiaoyuan"

讲解一下上面的代码,因为字符串的起始下标是0,所以第2个对应的字符是“i”,如果想要截取字符串从某一个字符到最后部分的子串,那么可以直接将最后一个参数设置为-1.

如果你设置的获取子串的范围比较大,已经超出了字符串原本的长度,那么只会返回到字符串的最后一个字符!

获取多个给定key的值

与GET命令不同,GET命令只能获取一个key对应的值,而这个命令可以用于获取多个key对应的值,格式如下:

MGET key1 [key2...]
    在MGET的后面可以追加多个索引,以空格分开

如我们来获取一下mykey、mykey1、mykey2分别对应的值,

127.0.0.1:6379> MGET mykey mykey1 mykey2
1) "huixiaoyuan"
2) "value1"
3) "value2"

返回key所对应的字符串的长度

这个命令的作用是获取到当前索引对应的字符串的长度,格式如下:

STRLEN key
    key为字符串对应的索引
127.0.0.1:6379> STRLEN mykey
(integer) 11

设置一个或多个键值对

我们知道SET命令的作用是设置一个键值对,但是如果有多个键值对同时设置呢?这个时候就可以使用这个命令了,格式如下:

MSET key1 value1 [key2 value2 ...]
    key1 value1为要设置的第一个键值对,之后的以空格分隔

如下我们设置同时设置三个键值对

127.0.0.1:6379> MSET k1 v1 k2 v2 k3 v3
OK

和上面这个命令相对的还有一个,该命令仅能在key不存在的情况下才能设置,否则所有的key-value都将会赋值失败,格式如下:

MSETNX key1 value1 [key2 value2 ...]
    key1 value1为要设置的第一个键值对,之后的以空格分隔

如我们给已经存在的k4设置值,那么返回0,说明设置失败,如果设置成功,则会返回1

127.0.0.1:6379> MSETNX k1 v1 k4 v4
(integer) 0
127.0.0.1:6379> MSETNX k4 v4 k5 v5
(integer) 1

将key中所存储的数值加一

这个命令可以将我们存储的字符的值加1,之后返回相加后的结果,但是如果该key对应的字符不是一个数的话,就会返回一个错误信息,格式如下:

INCR key
    key为要加1的数对应的索引

如下我们给刚才设置的k8加1,那么就会报错,重新设置一个数值的键值对,再进行加1,就可以返回对应的数据

127.0.0.1:6379> INCR k8
(error) ERR value is not an integer or out of range
127.0.0.1:6379> SET num1 10
OK
127.0.0.1:6379> INCR num1
(integer) 11

与INCR 命令对应的还有一个INCRBY 该命令可以给指定的key对应的数据加上指定的增量,格式如下:

INCRBY key increment

    key为索引
    increment为要增加的值
127.0.0.1:6379> INCRBY num1 5
(integer) 16

将key中所存储的数值减一

既然存在增加的操作,那么对应着也就是存在减少的操作,格式如下:

DECR key
    key为要加1的数对应的索引

上一步我们将num1对应的数值加5后得到16,现在我们对其进行减一操作。

127.0.0.1:6379> DECR num1
(integer) 15

与这个命令对应的还有减指定的数据的命令,格式如下:

DECRBY key increment
    key为索引
    decrement为要增加的值
127.0.0.1:6379> DECRBY num1 2
(integer) 13

字符串追加

如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾。返回的是追加后的长度,格式如下:

APPEND key value
    key为索引
    value为要追加的字符串

如我们在mykey1-value1的后面追加“hello”

127.0.0.1:6379> APPEND mykey1 hello
(integer) 11
127.0.0.1:6379> GET mykey1
"value1hello"

Hash类型

Hash类型是一个String类型的field(字段)和value(值)的映射表,它的作用是可以用来存储我们定义的数据对象,所以简单来说它是一个key下面存储了多个key-value的情况,给大家简单的话一个Hash的结构图:

接下来我们来简单讲一下在Redis中对于Hash这种数据类型,常用的几个命令,

设置一个Hash数据

设置Hash数据所使用的命令不是SET,而是HMSET,你可以理解为H代表Hash的意思,M代表Map的意思,该命令的格式如下:

HMSET key fieId1 value1 [fieId2 value2…]

  • key为这个Hash数据对应的唯一性索引
  • field为下面存储的一个键值对的键
  • value为该键对应的值

如我们设置key为“myhash”,里面存储的field分别为name-huixiaoyuan、sex-nan、age-3的三个键值对

127.0.0.1:6379> HMSET myhash name huixiaoyuan sex nan age 3
OK

获取指定哈希表中所有的字段和值

查看指定哈希表中所有的字段和值的命令是HGETALL,作用是取出该hash中所有的数据,格式如下

HGETALL key

  • 其中key为对应着这个Hash数据的索引

如我们查看刚才设置的hash数据

127.0.0.1:6379> HGETALL myhash
1) "name"
2) "huixiaoyuan"
3) "sex"
4) "nan"
5) "age"
6) "3"

获取存储在哈希表中指定字段的值

上一个命令是获取所有的字段,那么现在这个命令是只获取指定哈希表中指定字段的值,命令的格式如下:

HGET key field

  • key哈希表的索引
  • field获取的值对应的字段

如我们获取上面的哈希表中字段为name对应的值

127.0.0.1:6379> HGET myhash name
"huixiaoyuan"

删除一个或多个哈希表字段

删除一个或多个哈希表字段的命令是HDEL,该命令可以删除指定哈希表中指定的字段,以及其对应的值,格式如下:

HDEL key field1 [field2…]

  • key为指定的哈希表的索引
  • field为要删除的值对应的字段,如果要删除多个就以空格分开

如我们要删除索引为“myhash”的哈希表中值为“3”,对应字段为“age”的字段和值为“nan”,对应字段为“sex”的两个字段。

127.0.0.1:6379> HGET myhash name
"huixiaoyuan"
127.0.0.1:6379> HDEL myhash age sex
(integer) 2
127.0.0.1:6379> HGETALL myhash
1) "name"
2) "huixiaoyuan"

获取哈希表中字段的数量

该命令可以获取指定哈希表中字段的数量,格式如下:

HLEN key

  • key为指定的哈希表的索引
127.0.0.1:6379> HLEN myhash
(integer) 1

获取哈希表中的所有字段

该命令可以获取指定哈希表中所有的字段,但是不返回字段对应的值,格式如下:

HKEYS key

  • key为指定的哈希表的索引
127.0.0.1:6379> HKEYS myhash
1) "name"

获取哈希表中所有的值

上一个命令是获取到指定哈希表中所有的字段,但是不返回字段对应的值,那么这个命令就是获取到所有的值,而不返回其对应的字段,格式如下:

HVALS key

  • key为指定的哈希表的索引
127.0.0.1:6379> HVALS myhash
1) "huixiaoyuan"

到此这篇关于Redis数据类型string和Hash详解的文章就介绍到这了,更多相关Redis数据类型内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Redis教程(二):String数据类型

    一.概述: 字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等.在Redis中字符串类型的Value最多可以容纳的数据长度是512M. 二.相关命令列表: 命令原型 时间复杂度 命令描述 返回值 APPENDkeyvalue O(1) 如果该Key已经存在,APPEND命令将参数Value的数据追加到已存在Value的末尾.如果该Key不存在,APPEND命令将会创建一个新的Key/V

  • Redis教程(四):Hashes数据类型

    一.概述: 我们可以将Redis中的Hashes类型看成具有String Key和String Value的map容器.所以该类型非常适合于存储值对象的信息.如Username.Password和Age等.如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间.每一个Hash可以存储4294967295个键值对. 二.相关命令列表: 命令原型 时间复杂度 命令描述 返回值 HSET key field value O(1) 为指定的Key设定Field/Value对,如果Key不

  • Redis数据类型string和Hash详解

    目录 String类型命令操作 设置指定key的值 获取指定key的值 返回key中字符串值的子串 获取多个给定key的值 返回key所对应的字符串的长度 设置一个或多个键值对 将key中所存储的数值加一 将key中所存储的数值减一 字符串追加 Hash类型 设置一个Hash数据 获取指定哈希表中所有的字段和值 获取存储在哈希表中指定字段的值 删除一个或多个哈希表字段 获取哈希表中字段的数量 获取哈希表中的所有字段 获取哈希表中所有的值 摘要:Redis中有五大数据类型,分别是String.Li

  • Redis不同数据类型的命令语句详解

    目录 一.String Ⅰ.set.get.append.strlen.exists Ⅱ.incr.decr.incrby.decrby Ⅲ.getset.setnx Ⅳ.setex.ttl Ⅴ.mget.mset.msetnx 二.List Ⅰ.lpush.lpushx.lrange Ⅱ.lpop.llen Ⅲ.lrem.lset.lindex.ltrim Ⅳ.linsert Ⅴ.rpush.rpushx.rpop.rpoplpush 三.Hash Ⅰ.hset.hget.hexisits.h

  • PHP操作Redis常用命令的实例详解

    redis常用命令有: 1.连接操作命令: 2.持久化命令: 3.远程服务控制命令: 4.对value操作命令:5.string命令: 6.list命令: 7.set命令: 8.hash命令等等. Redis 常用命令 登录 redis-cli -p 5566 -a password 检查key是否存在 EXISTS key 搜索某关键字 KSYS *4 返回一个Key所影响的vsl的类型 TYPE key 下面通过代码看下PHP操作Redis命令,代码如下所示: //连接本地的 Redis 服

  • C# String字符串案例详解

    string是一种很特殊的数据类型,它既是基元类型又是引用类型,在编译以及运行时,.Net都对它做了一些优化工作,正式这些优化工作有时会迷惑编程人员,使string看起来难以琢磨.这篇文章共四节,来讲讲关于string的陌生一面.  一.恒定的字符串 要想比较全面的了解stirng类型,首先要清楚.Net中的值类型与引用类型. 在C#中,以下数据类型为值类型: bool.byte.char.enum.sbyte以及数字类型(包括可空类型) 以下数据类型为引用类型: class.interface

  • SpringBoot结合Redis实现序列化的方法详解

    目录 前言 配置类 配置 Jackson2JsonRedisSerializer 序列化策略 配置  RedisTemplate 配置缓存策略 测试代码 完整代码 前言 最近在学习Spring Boot结合Redis时看了一些网上的教程,发现这些教程要么比较老,要么不知道从哪抄得,运行起来有问题.这里分享一下我最新学到的写法 默认情况下,Spring 为我们提供了一个 RedisTemplate 来进行对 Redis 的操作,但是 RedisTemplate 默认配置的是使用Java本机序列化.

  • Redis Set 集合的实例详解

     Redis Set 集合的实例详解 Redis的Set是string类型的无序集合.集合成员是唯一的,这就意味着集合中不能出现重复的数据. 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 ru

  • Javascript类型系统之String字符串类型详解

    javascript没有表示单个字符的字符型,只有字符串String类型,字符型相当于仅包含一个字符的字符串 字符串String是javascript基本数据类型,同时javascript也支持String对象,它是一个原始值的包装对象.在需要时,javascript会自动在原始形式和对象形式之间转换.本文将介绍字符串String原始类型及String包装对象 定义 字符串String类型是由引号括起来的一组由16位Unicode字符组成的字符序列 字符串类型常被用于表示文本数据,此时字符串中的

  • Java基本数据类型与封装类型详解(int和Integer区别)

    int是java提供的8种原始数据类型之一. Java为每个原始类型提供了封装类,Integer是java为int提供的封装类(即Integer是一个java对象,而int只是一个基本数据类型).int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况,例如,要想表达出没有参加考试和考试成绩为0的区别,则只能使用Integer.在JSP开发中,Integer的默认为null,所以用el表达式在文本框中显示时,值为空白字

  • JAVA中string数据类型转换详解

    在JAVA中string是final类,提供字符串不可以修改,string类型在项目中经常使用,下面给大家介绍比较常用的string数据类型转换: String数据类型转换成long.int.double.float.boolean.char等七种数据类型 复制代码 代码如下: * 数据类型转换 * @author Administrator * */ public class 数据类型转换 { public static void main(String[] args) { String c=

  • 基于MongoDB数据库的数据类型和$type操作符详解

    前面的话 本文将详细介绍MongoDB数据库的数据类型和$type操作符 类型 数字 备注 Double 1 双精度浮点数 - 此类型用于存储浮点值 String 2 字符串 - 这是用于存储数据的最常用的数据类型.MongoDB中的字符串必须为UTF-8 Object 3 对象 - 此数据类型用于嵌入式文档 Array 4 数组 - 此类型用于将数组或列表或多个值存储到一个键中 Binary data 5 二进制数据 - 此数据类型用于存储二进制数据 Undefined 6 已废弃 Objec

随机推荐