返回顶部
首页 > 资讯 > 数据库 >Redis String 类型和 Hash 类型学习笔记与总结
  • 799
分享到

Redis String 类型和 Hash 类型学习笔记与总结

类型学习笔记Redis 2022-06-04 17:06:36 799人浏览 安东尼
摘要

linux 版本信息: cat /etc/issue 或cat /etc/redhat-release(Linux查看版本当前操作系统发行版信息) Centos release 6.6 (Final)

linux 版本信息:

cat /etc/issue  或cat /etc/redhat-release(Linux查看版本当前操作系统发行版信息)

Centos release 6.6 (Final)

(一)String 类型

【定义】string 是最简单的类型,你可以理解成与 Memcached 是一模一样的类型,一个 key 对应一个 value,其上支持的操作与 Memcached 的操作类似。但它的功能更丰富。

string 类型是二进制安全的。意思是 Redis 的 string 可以包含任何数据, 比如 jpg 图片或者序 列化的对象。 从内部实现来看其实 string 可以看作 byte 数组,最大上限是 1G 字节。

【操作】

① set 方法

设置 key 对应的值为 string 类型的 value。

【例】添加 name = dee 的键值对:

127.0.0.1:6379> set name dee

OK

设置成功。

② get 方法

【例】

127.0.0.1:6379> get name

"dee"

获取成功。

再次设置 name = deathmask,值会被覆盖:

127.0.0.1:6379> set name deathmask

OK

127.0.0.1:6379> get name "deathmask"

③ setnx 方法

设置 key 对应的值为 string 类型的 value,如果 key 已经存在,返回 0,nx 表示 not exist。

【例】

127.0.0.1:6379> setnx name dee

(integer) 0

127.0.0.1:6379> setnx app weibo (integer) 1

127.0.0.1:6379> get name "deathmask"

127.0.0.1:6379> get app "weibo"

表示 name 已经存在而且没有更改,app 不存在则成功 set。

④ setex 方法

设置 key 对应的值为 string 类型的 value,并指定  此键值 对应的有效期。

【例】

127.0.0.1:6379> setex mobile 10 iphone

OK

127.0.0.1:6379> get mobile "iphone"

127.0.0.1:6379> get mobile "iphone"

127.0.0.1:6379> get mobile (nil)

设置 mobile 的值为 iPhone,并且指定有效期为 10 秒。

⑤ setrange 方法

设定指定 key 的 value 值的子字符串

【例】将 dee 的 126 邮箱 替换为 gmail 邮箱

127.0.0.1:6379> set email dee@126.com

OK

127.0.0.1:6379> get email "dee@126.com"

127.0.0.1:6379> setrange email 4 gmail.com (integer) 13

127.0.0.1:6379> get email "dee@gmail.com"


其中 4 代表下标,(integer) 13 表示字符串的长度。

【例2】

127.0.0.1:6379> set email dee@vip.ofim.com

OK

127.0.0.1:6379> get email "dee@vip.ofim.com"

127.0.0.1:6379> setrange email 4 gmail.com (integer) 16

127.0.0.1:6379> get email "dee@gmail.comcom"


说明:如果替换的字符串没有源字符串长,则只会把源字符串中相同长度的字符替换掉,同时保留源字符串中剩余的字符。

⑥ mset 方法

一次设置多个 key 值,成功返回 ok,表示所有的值都设置了,失败返回 0,表示没有任何值被设置。

【例】

127.0.0.1:6379> mset key1 dee1 key2 dee2

OK

127.0.0.1:6379> get key1 "dee1"

127.0.0.1:6379> get key2 "dee2"

⑦ msetnx 方法

一次设置多个 key 的值,成功返回 1,表示所有的值都被设置了。失败返回 0 ,表示没有任何值被设置,但是不会覆盖已经存在的 key。

127.0.0.1:6379> msetnx key3 dee3 key4 dee4 

(integer) 1

127.0.0.1:6379> msetnx key3 dee333 key4 dee444 key5 dee5 (integer) 0

127.0.0.1:6379> get key3 "dee3"

127.0.0.1:6379> get key4 "dee4"

127.0.0.1:6379> get key5 (nil)


⑧ getset 方法

设置 key 的值,并返回 key 的旧值。

【例】

127.0.0.1:6379> getset key1 emperor

"dee1"

⑨ getrange 方法

获取 key 的 value 值的子字符串。

127.0.0.1:6379> get email

"dee@gmail.comcom"

127.0.0.1:6379> getrange email 0 12 "dee@gmail.com"


返回第 0 到第12 个字符。
⑩ mget 方法

一次获取多个 key 的值,如果对应 key 不存在则对应返回 nil。

【例】

127.0.0.1:6379> mget key1 key2 key3 key4 key5 

1) "emperor"

2) "dee2"

3) "dee3"

4) "dee4"

5) (nil)

⑪ incr 方法
对 key 的值做 加加 操作,并返回新的值。

【例】每次递增1

127.0.0.1:6379> set age 28

OK

127.0.0.1:6379> get age "28"

127.0.0.1:6379> incr age (integer) 29

127.0.0.1:6379> incr age (integer) 30

127.0.0.1:6379> get age "30"


【例2】
127.0.0.1:6379> get real-age

(nil)

127.0.0.1:6379> incr real-age (integer) 1

127.0.0.1:6379> get real-age "1"

⑫ incrby 方法

同 incr 方法类似,加指定值,key 不存在时会设置 key,并认为原来的 value 为 0。

【例】

127.0.0.1:6379> get times

(nil)

127.0.0.1:6379> incrby times 5 (integer) 5

127.0.0.1:6379> get times "5"


【例2】
127.0.0.1:6379> incrby times -5

(integer) 0

127.0.0.1:6379> get times "0"

⑬ decr 方法

对 key 的值做 减减操作。

⑭ decrby 方法

同 decr 方法类似,减指定值。

【例】

127.0.0.1:6379> get age

"30"

127.0.0.1:6379> decr age (integer) 29

127.0.0.1:6379> decrby age 10 (integer) 19

127.0.0.1:6379> decrby age -10 (integer) 29

⑮ append 方法(重要)

给指定 key 的字符串追加 value ,返回新字符串的长度。

【例】

127.0.0.1:6379> get name

"deathmask"

127.0.0.1:6379> append name @163.com (integer) 17

127.0.0.1:6379> get name "deathmask@163.com"

⑯ strlen 方法

取指定 key 的 value 值的长度。

【例】

127.0.0.1:6379> get name

"deathmask@163.com"

127.0.0.1:6379> strlen name (integer) 17

(二)Hash 类型

Redis hash 是一个 string 类型的 field 和 value 的 映射表。它的添加、删除操作都是 0(1)(平均操作)。

hash 特别 适合用于存储对象。相较于将对象的每个字段存成单个 string 类型(string 类型可以存储对象序列化)。

将一个对象存储在 hash 类型中会占用更少的内存,并且可以更方便的存取整个对象。

(省内存的原因是新建一个 hash 对象时开始是用 zipmap(又称为 small hash)来存储的。

这个 zipmap 其实并不是 hash table,但是 zipmap 相比正常的 hash 实现可以节省不少 hash 本身需要的一些元数据存储开销。

尽管 zipmap 的添加,删除,查找都是 O(n),但是由于一般对象的 field 数量都不太多,所以使用 zipmap 也是很快的,也就是说添加删除平均还是 O(1)。

如果 field 或者 value的大小超出一定限制后, Redis 会在内部自动将 zipmap 替换成正常的 hash 实现. 这个限制可以在配置文件中指定。

hash-max-zipmap-entries 64 #配置字段最多 64 个,hash-max-zipmap-value 512 #配置 value 最大为 512 字节)

【操作】

① hset 方法 / hget 方法

设置hash field 为指定值,如果 key 不存在,则先创建。

【例】

127.0.0.1:6379> hset myhash field1 hello

(integer) 1

说明:myhash 是 hash 表的名称,field1 是 hash 表的一个字段,hello 是这个字段对应的值。存储用户比较方便。

【例2】

127.0.0.1:6379> hset user:001 name dee

(integer) 1

127.0.0.1:6379> hget user:001 name "dee"

说明:设置 user 表 id 为 001 的用户,用户名为 dee。

可以把 user:001 看作一张表。

② hsetnx 方法

设置 hash field 为指定值,如果 key 不存在,则先创建;如果存在,则返回 0。

【例】

127.0.0.1:6379> hsetnx myhash field "hello"

(integer) 1

127.0.0.1:6379> hsetnx myhash field "hello!" (integer) 0

127.0.0.1:6379> hget myhash field "hello"

③ hmset 方法

同时设置 hash 的多个 field

【例】

127.0.0.1:6379> hmset user:002 name dee specialty PHP

OK

127.0.0.1:6379> hget user:002 name "dee"

127.0.0.1:6379> hget user:002 specialty "php"

④ hget 方法

获取全部指定的 hash field。

【例】

127.0.0.1:6379> hmget user:002 name specialty

1) "dee"

2) "php"

⑤ hincrby 方法

指定的 hash field 加上给定值。

【例】

127.0.0.1:6379> hmset user:002 name dee specialty redis age 28

OK

127.0.0.1:6379> hincrby user:002 age -6 (integer) 22

127.0.0.1:6379> hmget user:002 name specialty age 1) "dee" 2) "redis" 3) "22"

127.0.0.1:6379> hincrby user:002 age 5 (integer) 27

127.0.0.1:6379> hmget user:002 name specialty age 1) "dee" 2) "redis" 3) "27"

⑥ hexists 方法

测试指定 field 是否存在。

【例】

127.0.0.1:6379> hexists user:002 name

(integer) 1

127.0.0.1:6379> hexists user:002 sex (integer) 0


⑦ hlen 方法

返回指定 hash 的 field 数量。

【例】

127.0.0.1:6379> hlen user:002

(integer) 3

⑧ hdel 方法

删除指定 hash 的 field。

【例】

127.0.0.1:6379> hdel user:002 age

(integer) 1

127.0.0.1:6379> hget user:002 age (nil)


⑨ hkeys 方法(类似 PHP 中 array_keys() 方法)

返回 hash 的所有 field。

【例】

127.0.0.1:6379> hkeys user:002

1) "name"

2) "specialty"

⑩ hvals 方法(类似 PHP 中的 array_values() 方法)

返回 hash 的所有 value。

【例】

127.0.0.1:6379> hvals user:002

1) "dee"

2) "redis"

⑪ hgetall 方法

获取某个 hash 中全部的 field 及 value。

【例】

127.0.0.1:6379> hgetall user:002

1) "name"

2) "dee"

3) "specialty"

4) "redis"

总结】设置 hash 类型的数据,首先要设置 hash 的表,然后设置 hash 的 field,最后设置 hash field 的 value。

您可能感兴趣的文档:

--结束END--

本文标题: Redis String 类型和 Hash 类型学习笔记与总结

本文链接: https://lsjlt.com/news/11749.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Redis String 类型和 Hash 类型学习笔记与总结
    Linux 版本信息: cat /etc/issue 或cat /etc/redhat-release(Linux查看版本当前操作系统发行版信息) CentOS release 6.6 (Final) ...
    99+
    2022-06-04
    类型 学习笔记 Redis
  • Redis list 类型学习笔记与总结
    redis 版本 [root@localhost ~]# redis-server --version Redis server v=2.8.19 sha=00000000:0 malloc=jema...
    99+
    2022-06-04
    学习笔记 类型 Redis
  • Redis笔记-Hash数据类型(三)
    Hash是一个string类型的field和value的映射表。 它的添加、删除操作都是0(1)(平均)。hash特别适合用于存储对象。 相较于将对象的每个字段存成单个string类型,将一个对象存储在ha...
    99+
    2024-04-02
  • Redis数据类型string和Hash详解
    目录String类型命令操作设置指定key的值获取指定key的值返回key中字符串值的子串获取多个给定key的值返回key所对应的字符串的长度设置一个或多个键值对将key中所存储的数...
    99+
    2024-04-02
  • Python数据类型学习笔记
    带你走进数据类型 一:整数、浮点数 Python中整数和浮点数的定义以及运算和C++都是一样的,我在这里就不需多说了,我就说明一点:Python相对于C/C++而言,定义整数没有int 和 long lon...
    99+
    2022-06-04
    数据类型 学习笔记 Python
  • Redis学习笔记(一)概念、数据类型、键
    全称 REmote DIctionary Server 官方定义 Redis是一个开源(BSD许可),内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件 ...
    99+
    2024-04-02
  • Redis笔记-String类型及操作(二)
    String类型及操作String是简单的类型 ,一个Key对应一个Value. String类型是二进制安全的。 Redis的String可以包含任何数据,比如jpg图片或者序列化的对象Set设置Key对...
    99+
    2024-04-02
  • Redis数据类型string和Hash怎么用
    这篇文章给大家分享的是有关Redis数据类型string和Hash怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。String类型命令操作String类型是在Redis中最常用的数据类型,它也是很多程序员在日...
    99+
    2023-06-29
  • MySQL学习笔记(4):数据类型
    本文更新于2019-06-19,使用MySQL 5.7,操作系统为Deepin 15.4。 目录数值类型整数类型定点数类型浮点数类型位类型日期时间类型字符串类型枚举类型集合类型 数值类型 整数类型 type[(m)] [UNSIG...
    99+
    2019-09-06
    MySQL学习笔记(4):数据类型
  • Python学习笔记6——动态类型
    参考博客:Python进阶09 动态类型  Python深入06 Python的内存管理 都是非常棒的文章 其实这都是我前两天通过手机看的博客,感觉get到了新知识、新技能,今天早上挖的坑,因为上午有课(电子技术课程设计,嵌入式系统实验室...
    99+
    2023-01-30
    学习笔记 类型 动态
  • TypeScript学习笔记之类型缩小
    目录类型缩小什么是类型缩小呢?常见的类型保护有如下几种:typeof平等缩小instanceofin总结类型缩小 什么是类型缩小呢? 类型缩小的英文是 Type Narrowing;...
    99+
    2024-04-02
  • mysql学习笔记(二)--- MySQL数据类型
    【正文】上一章节中,我们学习了MySQL软件的安装,既然软件都装好了,现在就正式开始MySQL的基础知识的学习吧,即使是零基础,也要一步一个脚印。恩,首先要学习的就是MySQL的数据类型。一、数据类型:1、...
    99+
    2024-04-02
  • TypeScript学习笔记之类型窄化篇
    目录前言类型推论真值窄化相等性窄化in操作符窄化instanceof窄化窄化的本质联合类型的窄化总结前言 TS最好用的地方就是强类型,随之而来的就是类型窄化,摸鱼的时候顺道总结下. ...
    99+
    2024-04-02
  • MySQL学习笔记-数据类型与操作数据表
    MySQL学习笔记-数据类型与操作数据表数据类型:  1.字符型  2.整型  3.浮点型  4.日期时间型数据表操作:  1.插入记录 ...
    99+
    2024-04-02
  • MySQL学习笔记 数据类型与操作数据表
    1.数据类型        【1】整型:数据类型存储范围字节TINYINT有符号型:-128~127(-2^7~2^7 -1),无符号型...
    99+
    2024-04-02
  • mysql学习笔记之字段类型选择
    1. 数据库的字段选择 在数据表的结构关系确定之后,这个时候就需要去确定相应的数据表的字段类型 1.1 字符串类型字段 char与varchar以及text char => char(长度) -> 多长 varchar ...
    99+
    2018-10-21
    mysql学习笔记之字段类型选择
  • 【MongoDB学习笔记25】MongoDB的索引类型
    创建索引可以指定一些选项,使用不同的选项建立的索引会有不同的行为。 一、唯一索引唯一索引可以确保每一个文档的指定键都有唯一的值。例如,想确定文档中的username键不重复,创建一个唯一索引:&g...
    99+
    2024-04-02
  • [Python学习笔记] 数字类型及操作
    数字类型 整数类型 十进制:1110,-123 二进制:以0B或0b开头 0b110,-0B101 八进制:以0O或0o开头 0o123,-0O567 十六进制:以0X或0x开头 0x555,-0X89a 浮点数类型...
    99+
    2023-01-31
    学习笔记 类型 操作
  • Redis笔记-List数据类型(四)
    List类型及操作List是一个链表结构,主要功能是push 、pop、获取一个范围内的所有值等等,操作中key理解为链表的名字。 Redis的list类型其实就是一个每个子元素都是String类型的双向链...
    99+
    2024-04-02
  • PHP数据类型详解:学习笔记分享!
    PHP数据类型详解:学习笔记分享! 在PHP编程语言中,数据类型是非常重要的一个概念。数据类型决定了变量可以存储哪些类型的数据,以及可以对这些数据进行哪些操作。本篇文章将对PHP中的常见数据类型进行详细的讲解,并通过演示代码的形式,帮助读者...
    99+
    2023-07-09
    数据类型 学习笔记 http
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作