Redis学习路线(2)—— Redis的数据结构

这篇具有很好参考价值的文章主要介绍了Redis学习路线(2)—— Redis的数据结构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Redis的数据结构

Redis是一个Key-Value的数据库,key一般是String类型,不过Value的类型却有很多:

  • String: Hello World
  • Hash: {name: "jack", age: 21}
  • List: [A -> B -> C -> C]
  • Set: {A, B, C}
  • SortedSet: {A: 1, B: 2, C: 3}
  • GEO: {A: (120.3, 30.5)}
  • BitMap: 0110110101110101011
  • HyperLog: 0110110101110101011

由于Redis对数据类型是按组别进行数据操作,所以我们可以到官网的文档进行查询,也可以通过命令行进行查询。

#查询string的操作符
help @string

二、Redis基本数据类型

(一)、String类型

String类型,也就是字符串类型,是Redis中最简单的存储类型。
其Value是字符串,根据字符串的格式不同,又可以分成 3 类:

  • string: 字符串,最大操作空间为512mb
  • int: 整数类型,可以做自增、自减操作
  • float: 浮点类型,可以做自增、自减操作

查看操作文档

help @string

1、SET: 添加或者修改已经存在的Stirng类型键值对

(1)帮助文档描述

 SET key value [EX seconds|PX milliseconds|EXAT timestamp|PXAT milliseconds-timestamp|KEEPTTL] [NX|XX] [GET]
 summary: Set the string value of a key
 since: 1.0.0
 group: string

(2)使用命令

#设置 key-value 键值对
SET k1 1

2、GET: 根据key获取String类型的value

(1)帮助文档描述

 GET key
 summary: Get the value of a key
 since: 1.0.0
 group: string

(2)使用命令

#获取 k1 的值,获取到 "1"
GET k1

3、MSET: 批量添加键值对

(1)帮助文档描述

 MSET key value [key value ...]
 summary: Set multiple keys to multiple values
 since: 1.0.1
 group: string

(2)使用命令

#批量插入键值对
MSET k2 2 k3 3 k4 4

4、MGET: 批量根据key获取值

(1)帮助文档描述

 MGET key [key ...]
 summary: Get the values of all the given keys
 since: 1.0.0
 group: string

(2)使用命令

#批量根据key获取值,查询到的值: "1" "2" "3" "4" (nil) (nil),当我们查询一个没有的key,它的值为 nil,就是null的意思
MGET k1 k2 k3 k4 k5 k6

5、INCR: 让一个整型的key自增1

(1)帮助文档描述

 INCR key
 summary: Increment the integer value of a key by one
 since: 1.0.0
 group: string

(2)使用命令

# 使一个key自增,返回自增后的数值:(integer) 2
INCR k1

6、INCRBY: 让一个整型的key自增并指定步长

(1)帮助文档描述

 INCRBY key increment
 summary: Increment the integer value of a key by the given amount
 since: 1.0.0
 group: string

(2)使用命令

# 使一个key自增指定步长,返回自增后的数值:(integer) 4
INCRBY k1 2

7、INCRBYFLOAT: 让一个浮点类型的key自增并指定步长

(1)帮助文档描述

 INCRBYFLOAT key increment
 summary: Increment the float value of a key by the given amount
 since: 2.6.0
 group: string

(2)使用命令

# 使一个key自增指定步长,k5=12.1,返回自增后的数值: "12.6"
INCRBYFLOAT k5 0.5

8、SETNX: 添加一个String类型的键值对,前提是这个key不存在,否则不执行

(1)帮助文档描述

 SETNX key value
 summary: Set the value of a key, only if the key does not exist
 since: 1.0.0
 group: string

(2)使用命令

# 添加一个String键值对,取出来是"\xe8\xbf\x99\xe6\x98\xafkey6"
SETNX k6 这是key6

9、SETEX: 添加一个String类型的键值对,并且指定有效期

(1)帮助文档描述

SETEX key seconds value
 summary: Set the value and expiration of a key
 since: 2.0.0
 group: string

(2)使用命令

# 添加一个指定时长的键值对,就是 SET k7 Jhon + EXPIRE k7 3000,命令执行
SETEX k7 3000 Jhon

思考: Redis没有MySQL中的Table的概念,如何区分不同类型的key。

例如:需要存储用户、商品信息到redis,由一个用户id是1,有个商品id也是1

key的结构

Redis的key允许有个多单词形成层级结构,多个单词之间用 “:” 隔开,格式如下:项目名:业务名:类型:id

(二)、Hash类型

Hash类型,页脚散列,其value是一个无序字典,类似HashMap结构

Hash结构的Value被分成了 fieldvalue 字段,即一个 key 对应的是多个键值对。

查看操作文档

help @hash

1、HSET key field value: 添加或修改hash-key 的 field 值

(1)帮助文档描述

 HSET key field value [field value ...]
 summary: Set the string value of a hash field
 since: 2.0.0
 group: hash

(2)使用命令

HSET zengoo:user:1 name zain age 23 gender 0

2、HGET key field: 获取一个hash-key的field值

(1)帮助文档描述

 HGET key field
 summary: Get the value of a hash field
 since: 2.0.0
 group: hash

(2)使用命令

 HGET zengoo:user:1 name

3、HMSET: 批量添加多个hash-key的field值

(1)帮助文档描述

 HMSET key field value [field value ...]
 summary: Set multiple hash fields to multiple values
 since: 2.0.0
 group: hash

(2)使用命令

HMSET zengoo:product:1 name HWMate40 price 4599 tag phone size large

4、HMGET: 批量获取多个hash-key的field值

(1)帮助文档描述

 HMGET key field [field ...]
 summary: Get the values of all the given hash fields
 since: 2.0.0
 group: hash

(2)使用命令

HMGET zengoo:product:1 name price tag size

5、HGETALL: 获取一个hash-key的所有键值对

(1)帮助文档描述

 HGETALL key
 summary: Get all the fields and values in a hash
 since: 2.0.0
 group: hash

(2)使用命令

 HGETALL zengoo:product:1

6、HKEYS: 获取一个hash-key的所有field

(1)帮助文档描述

 HKEYS key
 summary: Get all the fields in a hash
 since: 2.0.0
 group: hash

(2)使用命令

HKEYS zengoo:product:1

7、HVALS: 获取一个hash-key的所有value

(1)帮助文档描述

 HVALS key
 summary: Get all the values in a hash
 since: 2.0.0
 group: hash

(2)使用命令

HVALS zengoo:product:1

8、HINCRBY: 让一个hash-key字段自增长指定步长

(1)帮助文档描述

 HINCRBY key field increment
 summary: Increment the integer value of a hash field by the given number
 since: 2.0.0
 group: hash

(2)使用命令

HINCRBY zengoo:product:1 price 1

9、HSETNX: 添加一个hash-key的field,若存在则不执行

(1)帮助文档描述

 HSETNX key field value
 summary: Set the value of a hash field, only if the field does not exist
 since: 2.0.0
 group: hash

(2)使用命令

HSETNX zengoo:product:1 provider HW

(三)、List类型

Redis的List类型与Java中 LinkedList 类似,可以看做是一个双向链表结果,既可以正向检索,又支持反向检索。

特征(链表特征):

  • 有序
  • 元素可重复
  • 插入和删除快
  • 查询速度一般

查询帮助文档

help @list

1、LPUSH key element…:入栈

(1)帮助文档描述

 LPUSH key element [element ...]
 summary: Prepend one or multiple elements to a list
 since: 1.0.0
 group: list

(2)使用命令

LPUSH zengoo:praise:1 Zengoo Zain Jhon Anna Andy

2、LPOP key: 出栈,没有则返回nil

(1)帮助文档描述

 LPOP key [count]
 summary: Remove and get the first elements in a list
 since: 1.0.0
 group: list

(2)使用命令

# 出栈指定 key 的 n 个 value
LPOP zengoo:praise:1 2

3、RPUSH key element…: 向队列插入一个或多个元素

(1)帮助文档描述

 RPUSH key element [element ...]
 summary: Append one or multiple elements to a list
 since: 1.0.0
 group: list

(2)使用命令

# 入栈指定 key 的 n 个 value
RPUSH zengoo:praise:2 1 2 3

4、RPOP key: 队列出队

(1)帮助文档描述

 RPOP key [count]
 summary: Remove and get the last elements in a list
 since: 1.0.0
 group: list

(2)使用命令

RPOP zengoo:praise:1 6

5、LRANGE key star end: 返回一段范围的所有元素

(1)帮助文档描述

 LRANGE key start stop
 summary: Get a range of elements from a list
 since: 1.0.0
 group: list

(2)使用命令

# 读取指定 key 的 0-9 索引的值
LRANGE zengoo:parise:1 0 9

6、BLPOP 和 BRPOP: 与LPOP和RPOP类似,只不过在没有元素时等待指定时间,而不是直接返回nil

(1)帮助文档描述

#BLPOP
 BLPOP key [key ...] timeout
 summary: Remove and get the first element in a list, or block until one is available
 since: 2.0.0
 group: list

#BRPOP
 BRPOP key [key ...] timeout
 summary: Remove and get the last element in a list, or block until one is available
 since: 2.0.0
 group: list

(2)使用命令

BLPOP zengoo:parise:1 10

为什么有左右侧的分别?

因为redis的list是链表形式的,可以从左右两侧挂载数据,可以认为是一个双向队列。

这里的BLPOP或者BRPOP中的B到底是什么意思?

这里的 B 是阻塞的意思,即等待一定的时间,要么过期,要么获取到值。

(四)、Set类型

Redis的Set结构与Java中的HashSet类似,可以看做一个value为null的hashSet,因为是一个hash表,因此具有与hashSet类似的特征:

  • 无序
  • 元素不重复
  • 查找快
  • 支持交并补差的操作

查询帮助文档

help @set

1、SADD key member…: 向set添加一个或多个元素

(1)帮助文档描述

 SADD key member [member ...]
 summary: Add one or more members to a set
 since: 1.0.0
 group: set

(2)使用命令

SADD zengoo:friends:1 Any Femon Lucy Karen Elean

2、SREM key member…: 删除set中的指定元素

(1)帮助文档描述

 SREM key member [member ...]
 summary: Remove one or more members from a set
 since: 1.0.0
 group: set

(2)使用命令

SREM zengoo:friends:1 Lucy

3、SCARD key: 返回set中元素的个数

(1)帮助文档描述

 SCARD key
 summary: Get the number of members in a set
 since: 1.0.0
 group: set

(2)使用命令

SCARD zengoo:friends:1

4、SISMEMBER key member: 判断一个元素是否存在

(1)帮助文档描述

 SISMEMBER key member
 summary: Determine if a given value is a member of a set
 since: 1.0.0
 group: set

(2)使用命令

SISMEMBER zengoo:friends Lucy

5、SMEMBERS: 获取set中的所有元素

(1)帮助文档描述

 SMEMBERS key
 summary: Get all the members in a set
 since: 1.0.0
 group: set

(2)使用命令

SMEMBERS zengoo:friends:1

6、SINTER ke1 key2…: 求key1与key2的交集

(1)帮助文档描述

 SINTER key [key ...]
 summary: Intersect multiple sets
 since: 1.0.0
 group: set

(2)使用命令

SINTER zengoo:friends:1 zengoo:friends:2

7、SDIF key1 key2…: 求key1与key2的差集

(1)帮助文档描述

 SDIFF key [key ...]
 summary: Subtract multiple sets
 since: 1.0.0
 group: set

(2)使用命令

SDIFF zengoo:friends:1 zengoo:friends:2

8、SUNION key1 key2…: 求key1与key2的并集

(1)帮助文档描述

 SUNION key [key ...]
 summary: Add multiple sets
 since: 1.0.0
 group: set

(2)使用命令

SUNION zengoo:friends:1 zengoo:friends:2

(五)、SortedSet类型

Redis的SortedSet是一个可排序的set集合,与Java中的TreeSet类似,但底层的数据结构却差距很大。

SortedSet的每一个元素都带有score属性,可以给予score属性对元素进行排序,底层的视线是一个跳表(SkipList)+ Hash表。

查询文档:

help @sorted_set

特点:

  • 可排序
  • 元素不重复
  • 查询速度快

1、ZADD key score member: 添加一个或多个元素到sorted set,如果存在则更新score

(1)帮助文档描述

 ZADD key [NX|XX] [GT|LT] [CH] [INCR] score member [score member ...]
 summary: Add one or more members to a sorted set, or update its score if it already exists
 since: 1.2.0
 group: sorted_set

(2)使用命令

ZADD zengoo:basketball:zhejiang 1 yudu 2 kongjue 3 luosuan 4 alintuw 5 kuku

2、ZREM key member: 删除sorted set中的一个指定元素

(1)帮助文档描述

 ZREM key member [member ...]
 summary: Remove one or more members from a sorted set
 since: 1.2.0
 group: sorted_set

(2)使用命令

ZREM zengoo:basketball:xinjiang removeObject

3、ZSCORE key member: 获取sorted set中的指定元素的score

(1)帮助文档描述

 ZSCORE key member
 summary: Get the score associated with the given member in a sorted set
 since: 1.2.0
 group: sorted_set

(2)使用命令

ZSCORE zengoo:basketball:zhejiang yudu

4、ZRANK key member: 获取sorted set中指定元素的排名

(1)帮助文档描述

 ZRANK key member
 summary: Determine the index of a member in a sorted set
 since: 2.0.0
 group: sorted_set

(2)使用命令

ZRANK zengoo:basketball:zhejiang kuku

5、ZCARD key: 获取sorted set 中的元素个数

(1)帮助文档描述

 ZCARD key
 summary: Get the number of members in a sorted set
 since: 1.2.0
 group: sorted_set

(2)使用命令

ZCARD zengoo:basketball:zhejiang

6、ZCOUNT key min max: 统计score值在指定范围内的所有元素的个数

(1)帮助文档描述

 ZCOUNT key min max
 summary: Count the members in a sorted set with scores within the given values
 since: 2.0.0
 group: sorted_set

(2)使用命令

ZCOUNT zengoo:basketball:zhejiang 2 5

7、ZINCRBY key increment member: 让sorted set 中的指定元素自增,并自定义步长

(1)帮助文档描述

 ZINCRBY key increment member
 summary: Increment the score of a member in a sorted set
 since: 1.2.0
 group: sorted_set

(2)使用命令

ZINCRBY zengoo:basketball:zhejiang 10 kuku

8、ZRANGE key min max: 按照score排序后,获取指定排名范围内的元素

(1)帮助文档描述

 ZRANGE key min max [BYSCORE|BYLEX] [REV] [LIMIT offset count] [WITHSCORES]
 summary: Return a range of members in a sorted set
 since: 1.2.0
 group: sorted_set

(2)使用命令

ZRANGE zengoo:basketball:zhejiang 1 16

9、ZRANGEBYSCORE key min max: 按照score排序后,获取指定score范围内的元素

(1)帮助文档描述

 ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
 summary: Return a range of members in a sorted set, by score
 since: 1.0.5
 group: sorted_set

(2)使用命令

ZRANGEBYSCORE zengoo:basketball:zhejiang 0 100

10、ZDIFF、ZINTER、ZUNION: 求差集、交集、并集

(1)帮助文档描述

 ZDIFF numkeys key [key ...] [WITHSCORES]
 summary: Subtract multiple sorted sets
 since: 6.2.0
 group: sorted_set

 ZINTER numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX] [WITHSCORES]
 summary: Intersect multiple sorted sets
 since: 6.2.0
 group: sorted_set

 ZUNION numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX] [WITHSCORES]
 summary: Add multiple sorted sets
 since: 6.2.0
 group: sorted_set

三、Redis特殊数据类型

(一)GEO类型: 地理信息
(二)BitMap类型
(三)HyperLog类型


四、Redis通用命令

通用命令是不分数据类型通用的操作命令

(一)查询generic文档

help @generic

(二)常用命令:

1、KEYS: 查看符合模板的所有key(因为Redis是单线程执行,所以不建议在生产环境使用)。

(1)帮助文档描述

  KEYS pattern	#命令格式
  summary: Find all keys matching the given pattern	#命令作用
  since: 1.0.0	#起源版本
  group: generic  #隶属组别

(2)使用命令

#查询当前数据库的所有key
KEYS *

#查询以a结尾的所有key
KEYS a*

2、DEL: 删除指定的Key

(1)帮助文档描述

  DEL key [key ...]
  summary: Delete a key
  since: 1.0.0
  group: generic

(2)使用命令

#删除指定key(返回真实删除数)
DEL key1 key2

3、EXISTS: 查看是否存在指定key

(1)帮助文档描述

  EXISTS key [key ...]
  summary: Determine if a key exists
  since: 1.0.0
  group: generic

(2)使用命令

#查询指定key是否存在(返回查询到的数量,若为0则不存在key,若有则存在key)
EXISTS k2
#我的数据库中只有k1 一个key,所以查询k2的结果是 (integer) 0

#查询多个key是否存在,缺陷是无法判断哪个存在
EXISTS k1 k2
#查询到的结果是 (integer) 1

4、EXPIRE: 给key设置有效期,到期删除(一看到这个就能想到外卖的付款倒计时)

因为内存是临时的,所以需要有效期,所以才会有这个命令

(1)帮助文档描述

  EXPIRE key seconds
  summary: Set a key's time to live in seconds
  since: 1.0.0
  group: generic

(2)使用命令

#给 key1 设置一个 5s 的时间,查看5s后是否还存在
EXPIRE k1 5
EXISTS k1

//5s后,再次查询k1
EXISTS k1

5、TTL: 查看一个key的有效期

(1)帮助文档描述

  TTL key
  summary: Get the time to live for a key
  since: 1.0.0
  group: generic

(2)使用命令文章来源地址https://www.toymoban.com/news/detail-608518.html

#查看一个未设置有效期的key,查询结果: (integer) -1,代表永久有效
TTL k2

#查看一个设置有效期为5分钟的key,查询结果: (integer) 2996,若过期,则为-2
TTL k1

到了这里,关于Redis学习路线(2)—— Redis的数据结构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • redis1之安装redis,启动,常用数据结构

      目录 redis安装与启动、常见数据结构 启动  Redis客户端 数据结构与常见的命令  redis的通用命令  String类型的用法 Hash命令的用法  List命令  Set命令  SortedSet类型用法 1,在linux上安装上gcc的依赖,我这里是centos7.6,gcc是4.5 我们在LInux上查看一下我们的系统信息  我这里安装

    2024年02月06日
    浏览(47)
  • Redis常见数据结构

    Redis是一个key-value的数据库,key一般是String类型,但是value的类型多种多样 在学习Redis不同数据类型时,我们可以在官网( Redis官网)查看不同的命令: 也可以使用使用help @xxx 命令的方式查看 通用命令是部分数据类型都可以使用的指令,常见的有: KEYS:查看符合模板的所有k

    2024年02月13日
    浏览(42)
  • Redis底层数据结构

    SDS全称是Simple Dynamic String,具有如下显著的特点: 常数复杂度获取字符串长度:C语言获取一个字符串的长度需要遍历整个字符串时间复杂度为O(N),而SDS在属性len中记录了字符串长度,获取字符串长度的时间复杂度为O(1)。 杜绝缓冲区溢出:C字符串在执行拼接字符串时,如果

    2024年02月13日
    浏览(46)
  • redis 数据结构(二)

    整数集合是  Set 对象的底层实现之一。当一个 Set 对象只包含整数值元素,并且元素数量不时,就会使用整数集这个数据结构作为底层实现。 整数集合本质上是一块连续内存空间,它的结构定义如下: 可以看到,保存元素的容器是一个 contents 数组,虽然 contents 被声明为 i

    2024年02月09日
    浏览(38)
  • Redis数据结构简介

    对redis来说,所有的key(键)都是字符串。     1.String 字符串类型 是redis中最基本的数据类型,一个key对应一个value。   String类型是二进制安全的,意思是 redis 的 string 可以包含任何数据。如数字,字符串,jpg图片或者序列化的对象。   使用:get 、 set 、 del 、 incr、 decr 等

    2024年02月07日
    浏览(45)
  • Redis - 底层数据结构

    Redis 的底层数据结构主要以下几种: SDS(Simple Dynamic String, 简单动态字符串) ZipList(压缩列表) QuickList(快表) Dict(字典) IntSet(整数集合) ZSkipList(跳跃表) 在 Redis 中,并不会直接使用 C 语言自带的字符串结构作为实际的存储结构,而只是将字符串作为字面量使用,大多数情况使用自

    2023年04月12日
    浏览(44)
  • Redis 数据结构详解

    Redis 数据类型分为:字符串类型、散列类型、列表类型、集合类型、有序集合类型。 Redis 这么火,它运行有多块?一台普通的笔记本电脑,可以在1秒钟内完成十万次的读写操作。 原子操作:最小的操作单位,不能继续拆分。即最小的执行单位,不会被其他命令插入。高并发

    2024年02月05日
    浏览(43)
  • Redis的数据结构

    Redis是一款高性能的键值存储数据库,支持多种数据结构。在Redis中,数据结构是指在Redis中存储和操作数据的方式。Redis支持的数据结构包括字符串、哈希表、列表、集合和有序集合。 字符串是Redis中最基本的数据结构,可以存储任何类型的数据,包括数字、文本和二进制数

    2024年02月09日
    浏览(40)
  • redis核心数据结构

    redis下载地址:Download | Redis linux进入redis目录首先使用make命令进行c++的编译,修改redis.conf文件: 启动退出相关命令: redis五种数据结构图: 1、常用命令 2、应用场景 1)、单值缓存 2)、对象缓存 3)、分布式锁  4)、计数器 5) 、计数器 6) 、分布式系统全局序列号 1、

    2024年02月09日
    浏览(40)
  • 【redis】redis的5种数据结构及其底层实现原理

    Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(无序集合)及zset(有序集合)。 在秒杀项目里,我用过redis的Set和Hash结构: String:一个 key 对应一个字符串,string是Redis 最基本的数据类型。(字节的abase框架只实现了redis的string数据结构,导致我们如

    2024年02月09日
    浏览(74)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包