带你掌握Redis数据类型:string和Hash
摘要:Redis中有五大数据类型,分别是String、List、Set、Hash和Zset。
本文分享自华为云社区《Redis的string类型常用命令解析》,作者:灰小猿 。
先问大家一个问题:你知道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数据类型[string 、list 、 set 、sorted set 、hash]
1. Keys redis本质上一个key-value db,所以我们首先来看看他的key. 首先key也是字符串类型,但是key中不能包括边界字符:由于key不是binary safe的字符串, ...
- Redis的String、Hash类型命令
String是最简单的类型,一个Key对应一个Value,string类型是二进制安全的.Redis的string可以包含任何数据,比如jpg图片或者序列化的对象.最大上限是1G字节. Hash ...
- redis有string,hash,list,sets.zsets几种数据类型
1.string数据类型 可包含任何数据,是二进制安全的,比如图片或者序列化的对象set key valueset name hkset age 20get name 得到"hk" ...
- Redis探索之路(三):Redis的五种数据类型String和Hash
一:String 存储二进制数据,可以图片,序列化对象 GET,SET SETNX(not exist) setnx age 33 返回 0,1 SETEX设置有效期 SETEX COLOR 2 ...
- Redis数据类型--string
在Redis中支持丰富的数据类型的存储系统,包括:字符串(string),散列(hashes),列表(lists),集合(sets),有序集合(sorted sets),与范围查询,bitmaps,h ...
- 【Redis学习之四】Redis数据类型 string
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 redis-2.8.18 一.redis客户端基础命令1.帮 ...
- Redis 数据类型String 使用
字符串是Redis中最基本的数据类型,它能够存储任何类型的字符串,包含二进制数据.可以用于存储邮箱,JSON化的对象,甚至是一张图片,一个字符串允许存储的最大容量为512MB.字符串是其他四种类型的基 ...
- Python(Redis 中 String/List/Hash 类型数据操作)
1.下载 redis 模块 pip install redis 2.redis 数据库两种连接方式 简单连接 decode_responses=True,写入和读取的键值对中的 value 为 str ...
- Redis数据类型String
set和get Set带空格的字符串值,这时候就需要使用双引号了,否则会出错 getset getset设置某个key-value,然后把设置之前的值返回来 incr,incrby 和 decr,de ...
随机推荐
- vue学习16-插槽的使用
<!DOCTYPE html> <html lang='en'> <head> <meta charset='UTF-8'> <meta ht ...
- DEEP LEARNING WITH PYTORCH: A 60 MINUTE BLITZ | TRAINING A CLASSIFIER
你已经知道怎样定义神经网络,计算损失和更新网络权重.现在你可能会想, 那么,数据呢? 通常,当你需要解决有关图像.文本或音频数据的问题,你可以使用python标准库加载数据并转换为numpy arra ...
- 观察者模式(Observer模式)
模式的定义与特点 观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新.这种模式有时又称作发布-订阅模式.模型- ...
- gin框架中HTTP请求和参数的解析
1. 方法一: 通用的处理方法---Handle package main import ( "fmt" "github.com/gin-gonic/gin" ...
- 学习Java第13天
今天选择数据库选了半天,Oracle,MySQL,SQL sever太难了,安装了又被图形界面,Linux虚拟机所困扰 明天尽量完成数据库安装 只能说是找视频资料和安装教程了.
- [论文][半监督语义分割]Adversarial Learning for Semi-Supervised Semantic Segmentation
Adversarial Learning for Semi-Supervised Semantic Segmentation 论文原文 摘要 创新点:我们提出了一种使用对抗网络进行半监督语义分割的方法 ...
- Android 四种方法写按钮点击事件
1.匿名内部类的方式 2. 创建一个类实现onclickListener,实现onclick方法,设置控件点击事件时传一个类的对象. 3. 让当前类实现onclickListener,设置控件点击事件 ...
- spring 事务的传播级别和隔离级别
1.事务的传播级别 1)@Transactional(propagation=Propagation.REQUIRED):默认的spring事务传播级别,使用该级别的特点是,如果上下文中已经存在事务, ...
- 有手就行4——jenkins项目构建类型(自由风格,maven风格)
有手就行4--构建Maven项目 Jenkins项目构建类型(1)-Jenkins构建的项目类型介绍 Jenkins项目构建类型(2)-自由风格项目构建 Jenkins项目构建类型(3)-Maven项 ...
- JavaGuide--Java篇
本文避免重复造轮子,也是从JavaGuider中提取出来方便日后查阅的手册 参考链接: JavaGuider:https://javaguide.cn/java/basis/java-basic-qu ...