Redis【Redis数据类型(String、List、Set、Hash 、Zset)】(二)-全面详解(学习总结---从入门到深化)

 

目录

Redis数据类型_String

set

get

append

strlen 

setex

setnx

getrange

setrange

incr

decr

incrby/decrby key step 

mset

mget

getset 

Redis数据类型_List

lrange 

lpop/rpop

lindex 

llen

lrem

linsert

lset

Redis数据类型_Set

smembers

sismember

scard

srem

spop

srandmember

smove

sinter 

sunion

sdiff

Redis数据类型_Hash 

 简介

常用命令 

hset

 hget

 hmset

 hexists

 hkeys

 hvals key

 hincrby

 hdel

hsetnx 

 Redis数据类型_Zset

 简介

 常用命令

zadd

 zrange

 zrangebyscore

 zincrby

zrem 

zcount 

 zrank


Redis数据类型_String

 简介

String是Redis最基本的类型,一个key对应一个value。String是二进制安全的,意味着String可以包含 任何数据,比如序列化对象或者一张图片。String最多可以放512M的数据。

常用命令

set

用于设置给定 key 的值。如果 key 已经存储其他值, set 就重写旧值,且无视类型。

语法格式:

set key value

示例:

127.0.0.1:6379> set k1 v1
OK

get

用于获取指定 key 的值。如果 key 不存在,返回 nil 。

语法格式:

get key

示例:

127.0.0.1:6379> get k1
"v1"

append

将给定的value追加到key原值末尾。

语法格式:

append key value

示例:

127.0.0.1:6379> APPEND k1 k1
(integer) 4
127.0.0.1:6379> APPEND k1 k2
(integer) 6

注意:

  • 如果 key 已经存在并且是一个字符串, append 命令将 value 追加到 key 原来的值的末尾。
  • 如果 key 不存在, append 就简单地将给定 key 设为 value ,就像执行 set key value 一 样。

strlen 

获取指定 key 所储存的字符串值的长度。当 key 储存的不是字符串值时,返回一个错误。

语法格式:

strlen key

示例:

127.0.0.1:6379> strlen k1
(integer) 6

setex

给指定的 key 设置值及time 秒的过期时间。如果 key 已经存在, setex命令将会替换旧的值,并设置过 期时间。

语法格式:

setex key time value

示例:

#向Redis中设置一个k1的键值对并且10秒后过期
127.0.0.1:6379> setex k1 10 v1
OK

setnx

只有在key不存在时设置key的值

语法格式:

setnx key value

示例:

127.0.0.1:6379> setnx k1 v1
(integer) 0
127.0.0.1:6379> setnx k4 v4
(integer) 1

getrange

获取指定区间范围内的值,类似between........and 的关系

语法格式:

getrange key start end

示例:

127.0.0.1:6379> set k5 abcd123xxx
OK
127.0.0.1:6379> getrange k5 2 4
"cd1"

setrange

获取指定区间范围内的值,类似between........and 的关系

语法结构:

setrange key offset value

示例:

127.0.0.1:6379> set k6 abcd1234
OK
127.0.0.1:6379> setrange k6 1 xxx
(integer) 8
127.0.0.1:6379> get k6
"axxx1234"

incr

将 key 中储存的数字值增一。

语法格式:

incr key

示例:

#因为Redis中不存在k1,所以先初始化为0,再递增,值为1
127.0.0.1:6379> incr k1
(integer) 1
# incr k1 存在k1,递增后k1的值为2
127.0.0.1:6379> incr k1
(integer) 2
# 如果value不是数字就会报错
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> INCR k2
(error) ERR value is not an integer or out of range

注意:

如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 incr 操作。

如字符串类型的值不能表示为数字、或者是其他类型,那么返回一个错误。

decr

将 key 中储存的数字值减一。

语法格式:

decr key

示例:

127.0.0.1:6379> decr k1
(integer) 1
127.0.0.1:6379> decr k1
(integer) 0
127.0.0.1:6379> decr k1
(integer) -1
127.0.0.1:6379> decr k1
(integer) -2
#如果
set k2 v2
decr k2 因为k2不为数值,Redis返回一个错误

注意:

如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 decr 操作。

如字符串类型的值不能表示为数字、或者是其他类型,那么返回一个错误。

incrby/decrby key step 

将key存储的数字值按照step进行增减。

127.0.0.1:6379> incrby k1 10
(integer) 20

注意:

如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 incrby/decrby 命令。

如字符串类型的值不能表示为数字、或者是其他类型,那么返回一个错误。

mset

同时设置一个或多个 key-value 。

语法格式:

mset key1 value1 key2 value2

示例:

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

mget

返回所有(一个或多个)给定 key 的值。

语法格式:

mget key1 key2

示例:

127.0.0.1:6379> mget k1 k2 k3
1) "v1"
2) "v2"
3) "v3"

注意:

如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。

getset 

将给定key值设为value,并返回key的旧值(old value),简单一句话(先get然后立即set)。

语法格式:

getset key value

示例:

127.0.0.1:6379> getset k1 wcc
"v1"
127.0.0.1:6379> get k1
"wcc"

使用场景

  • value 除了是字符串以外还可以是数字。
  • 计数器
  • 统计多单位的数量
  • 粉丝数
  • 对象缓存存储
  • 分布式锁

实时学习反馈

1.Redis技术String数据类型中如何设置给定 key 的值。

A get

B append

C set 

D mget

2. Redis技术String数据类型中如何只有在key不存在时设置key的值。

A get

B append

C setnx

D mget

Redis数据类型_List

简介 

List是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右 边)。底层是一个双向链表,对两段操作性能极高,通过索引操作中间的节点性能较差。

一个List最多可以包含 $2^{32}-1$个元素 ( 每个列表超过40亿个元素)。

常用命令 

lpush/rpush

从左边(头部)/右边(尾部)插入一个或多个值。

语法结构:

lpush/rpush key1 value1 value2 value3……

示例:

#从左边放入v1 v2 v3
127.0.0.1:6379> lpush k1 v1 v2 v3
(integer) 3

#从右边放入v4 v5 v6
127.0.0.1:6379> rpush k1 v4 v5 v6
(integer) 6

 

lrange 

返回key列表中的start和end之间的元素(包含start和end)。 其中 0 表示列表的第一个元素,-1表示 最后一个元素。

语法结构:

lrange key start end

示例:

#取出列表里前3个值,结果为v3 v2 v1
127.0.0.1:6379> lrange k1 0 2
#取出列表里全部值,结果为v3 v2 v1 v4 v5 v6
127.0.0.1:6379> lrange k1 0 -1

lpop/rpop

移除并返回第一个值或最后一个值。

语法格式:

lpop/rpop key

示例:

lpop k1 从列表中删除v3,并返回,当前列表全部值v2 v1 v4 v5 v6

rpop k1 从列表中删除v6,并返回,当前列表全部值v2 v1 v4 v5

注意: 值在键在,值光键亡。 

lindex 

获取列表index位置的值(从左开始)。

语法结构:

lindex key index

示例:

lindex k1 0

llen

获取列表长度。

语法结构:

llen key

示例:

127.0.0.1:6379> llen k1
(integer) 6

lrem

从左边开始删除与value相同的count个元素。

语法结构:

lrem key count value

示例:

#从左边开始删除k1列表中2个v1元素
lrem k1 2 v1

linsert

在列表中value值的前边/后边插入一个new value值(从左开始)。

语法结构:

linsert key before/after value newvalue

示例:

linsert k1 before v1 v5 在v1前面插入一个v5

lset

将索引为index的值设置为value

语法结构:

lset key index value

示例:

lset key index value

使用场景

  • 消息队列
  • 排行榜
  • 最新列表

实时学习反馈

1. Redis技术List数据类型中如何插入一个或多个值。

A lpush/rpush

B llen

C lset

D lrem

2. Redis技术List数据类型中如何移除并返回第一个值或者最后一个值。

A lpush/rpush

B llen

C lset

D lpop/rpop

Redis数据类型_Set

简介 

与List类似是一个列表功能,但Set是自动排重的,当需要存储一个列表数据,又不希望出现重复数据 时,Set是一个很好的选择。

Set是String类型的无序集合,它底层其实是一个value为null的hash表,所以添加、删除、查找的时间 复杂度都是O(1)。

常用命令

sadd

将一个或多个元素添加到集合key中,已经存在的元素将被忽略。

语法结构:

sadd key value1 value2……

示例:

#向集合中添加值,最终只有v1 v2 v3 v4 v5 v6
127.0.0.1:6379> sadd k1 v1 v2 v2 v3 v4 v5 v6

smembers

取出该集合的所有元素。

语法结构:

smembers key

示例:

127.0.0.1:6379> smembers k1

sismember

判断集合key中是否含有value元素,如有返回1,否则返回0。

语法结构:

sismember key value

示例:

sismember k1 v1

scard

返回该集合的元素个数。

语法结构:

scard key

示例:

scard k1

srem

删除集合中的一个或多个成员元素,不存在的成员元素会被忽略。

语法结构:

srem key value1 value2……

示例:

# 删除v1 v2
srem k1 v1 v2

spop

随机删除集合中一个元素并返回该元素。

语法结构:

spop key

示例:

spop k1 随机删除一个元素,并返回

srandmember

随机取出集合中count个元素,但不会删除。

语法结构:

srandmember key count

示例:

#随机取出集合中的2个元素
srandmember k1 2

smove

将value元素从sourcekey集合移动到destinationkey集合中。

语法结构:

smove sourcekey destinationkey value

示例:

smove k1 k2 v5 将元素v5从集合k1中移动到集合k2

注意: 如果 sourcekey集合不存在或不包含指定的 value元素,则 smove 命令不执行任何操作,仅返回 0 。

sinter 

返回两个集合的交集元素。

语法结构:

sinter key1 key2

示例:

sinter key1 key2

sunion

返回两个集合的并集元素。

语法结构:

sunion key1 key2

示例:

sunion k1 k2

sdiff

返回两个集合的差集元素(key1中的,不包含key2)

语法结构:

sdiff key1 key2

示例:

sdiff k1 k2

使用场景

  • 黑白名单
  • 随机展示
  • 好友
  • 关注人
  • 粉丝
  • 感兴趣的人集合

实时学习反馈

1. Redis技术Set数据类型中将一个或多个元素添加到集合key中。

A spop

B sinter

C sdiff

D sadd

2. Redis技术Set数据类型中如何取出该集合的所有元素。

A spop

B smembers

C sdiff

D sadd

Redis数据类型_Hash 

 简介

Hash是一个键值对的集合。Hash 是一个 String 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。

常用命令 

hset

给key集合中的field赋值value。

语法结构:

hset key field value

示例:

127.0.0.1:6379> hset user name xiaoton
(integer) 1
127.0.0.1:6379> hset user age 3
(integer) 1

 hget

从key哈希中,取出field字段的值。

语法结构:

hget key field

示例:

127.0.0.1:6379> hget user name
"xiaoton"

 hmset

批量设置哈希的字段及值。

语法结构:

hmset key field1 value1 field2 value2……

示例:

127.0.0.1:6379> hmset user1 name xiaoton age 15
OK

 hexists

判断指定key中是否存在field

语法结构:

hexists key field

示例:

127.0.0.1:6379> hexists user1 name
(integer) 1
127.0.0.1:6379> hexists user1 xxx
(integer) 0

 hkeys

获取该哈希中所有的field。

语法结构:

hkeys key

示例:

127.0.0.1:6379> hkeys user1
1) "name"
2) "age"

 hvals key

获取该哈希中所有的value。

语法结构:

hvals key

示例:

127.0.0.1:6379> hvals user1
1) "xiaoton"
2) "15"

 hincrby

为哈希表key中的field字段的值加上增量increment。

语法结构:

hincrby key field increment

示例:

127.0.0.1:6379> hincrby user1 age 10
(integer) 25

 hdel

删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略。

语法结构:

hdel key field1 field2……

示例:

127.0.0.1:6379> hdel user1 age
(integer) 1

hsetnx 

给key哈希表中不存在的的字段赋值 。

语法结构:

hsetnx key field value

示例:

127.0.0.1:6379> hsetnx user1 age 10
(integer) 1

 使用场景 

     1、购物车

     2、存储对象

 实时学习反馈

1. Redis技术Hash数据类型中如何给key集合中的field赋值value。

A hdel

B hsetnx

C hexists

D hset

2. Redis技术Hash数据类型中如何从key哈希中,取出field字段的值。

A hdel

B hsetnx

C hexists

D hget

 Redis数据类型_Zset

 简介

Zset与Set非常相似,是一个没有重复元素的String集合。不同之处是Zset的每个元素都关联了一个分数 (score),这个分数被用来按照从低分到高分的方式排序集合中的元素。集合的元素是唯一的,但分数可以重复。

 常用命令

zadd

将一个或多个元素(value)及分数(score)加入到有序集key中。

语法结构:

zadd key score1 value1 score2 value2……

示例:

zadd k1 100 java 200 c++ 300 python 400 php

 zrange

返回key集合中的索引start和索引end之间的元素(包含start和end)。

语法结构:

zrange key start end [withscores]

示例:

zrange k1 0 -1 返回集合中所有元素
zrange k1 0 -1 withscores 返回集合中所有元素,并携带元素分数

 zrangebyscore

返回key集合中的分数minscore 和分数maxscore 之间的元素(包含minscore 和maxscore )。其中元素的位置按分数值递增(从小到大)来排序。

 语法结构:

zrangebyscore key minscore maxscore [withscores]

示例:

zrangebyscore k1 200 400 返回200-400分之间的元素递增排序

 zincrby

 为元素value的score加上increment的值。

语法结构:

zincrby key increment value

示例:

zincrby k1 50 java 给java元素加上50分

zrem 

删除该集合下value的元素。

语法结构:

zrem k1 php 删除php

zcount 

统计该集合在minscore 到maxscore分数区间中元素的个数。

语法结构:

zcount key minscore maxscore

示例:

zcount k1 100 300 统计100分到300分中间元素的个数

 zrank

返回value在集合中的排名,从0开始。

语法结构:

zrank key value

示例:

zrank k1 c++ 返回c++排名

 实时学习反馈

1. Redis技术Zset数据类型中如何给将一个或多个元素(value)及分数(score)加入到有序集key 中。

A zadd

B zrange

C zrangebyscore

D zcount

2. Redis技术Zset数据类型中如何返回key集合中的索引start和索引end之间的元素。

A zadd

B zrange

C zrangebyscore

D zcount

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/1998.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【并发编程】Java的Future机制详解(Future接口和FutureTask类)

目录 一、彻底理解Java的Future模式 二、为什么出现Future机制 2.1 Future 类有什么用? 三、Future的相关类图 2.1 Future 接口 2.2 FutureTask 类 五、FutureTask源码分析 5.1 state字段 5.2 其他变量 5.3 CAS工具初始化 5.4 构造函数 5.5 jdk1.8和之前…

轻量服务器外网访问不了的原因分析

​  轻量服务器外网访问不了原因的分析。很多用户在选择轻量服务器的时候都没考虑,直接就购买了,导致在使用的时候遇见了很多问题,下面我们就简单的聊聊关于轻量服务器外网无法访问的原因。 这里我们按照标题的意思可以解读为两种情况&…

基于Servlet+JDBC实现的基础博客系统>>系列2 -- 前端基础页面

目录 1. 博客公共页面样式 2. 博客列表页 3. 博客详情页 4. 博客登录页 5. 博客编辑页 1. 博客公共页面样式 导航栏以及背景图设置 <body> <!-- 1.navigation 导航栏 --><div class"nav"><!-- logo --><img src"image/logo.png&q…

JAVA http

javahttp 请求数据格式servletservlet生命周期servletrequest获取请求数据解决乱码response相应字符&字节数据 请求数据格式 servlet servlet生命周期 servlet request获取请求数据 解决乱码 response相应字符&字节数据 response.setHeader("content-type",…

Modbus协议学习方法

在刚开始接触modbus协议的时候&#xff0c;很容易被里面的各种功能码搞晕&#xff0c;同时在编写程序的时候也容易搞不清楚每一位数据代表的含义。如果在学习的过程中有实际的发送和接收数据的例子话&#xff0c;那么理解modbus协议就会更容易一些。   下面我将自己借助软件学…

uniapp 引入腾讯地图解决H5端接口跨域

一、申请腾讯地图key 进入腾讯地图开放平台 二、引入腾讯地图 1. 安装 vue-jsonp npm install --save vue-jsonp 2.在 main.js 中使用 import { VueJsonp } from vue-jsonp; Vue.use(VueJsonp); 3.获取定位 // 获取当前位置 getLocation() {let _this this;uni.getLocation…

经典案例:SpringBoot+Redis 实现10W人秒杀抢购

本篇内容主要讲解的是redis分布式锁&#xff0c;这个在各大厂面试几乎都是必备的&#xff0c;下面结合模拟抢单的场景来使用她&#xff1b;本篇不涉及到的redis环境搭建&#xff0c;快速搭建个人测试环境&#xff0c;这里建议使用docker&#xff1b;本篇内容节点如下&#xff1…

【数据库】mysql主从复制与读写分离

文章目录 一、读写分离1. 什么是读写分离2. 为什么要读写分离3. 什么时候要读写分离4. 主从复制与读写分离5. Mysql 主从复制原理&#xff08;主从复制的类型&#xff09;6. Mysql 主从复制的工作过程7. Mysql 读写分离原理 二、主从复制的配置操作1. 环境配置2. 搭建 MySQL主从…

BI-SQL丨角色和用户

角色和用户 在数仓的运维工作中&#xff0c;经常需要为用户开通不同权限的账号&#xff0c;使用户可以正常访问不同的数据&#xff0c;那么这就需要我们了解SQL Server的权限体系。 名词解释 登录名&#xff1a; 用来登录服务器的用户账号&#xff0c;例&#xff1a;sa&…

从0到1精通自动化测试,pytest自动化测试框架,测试用例setup和teardown(三)

目录 一、前言 二、用例运行级别 三、函数式 1、setup_function / teardown_function 2、setup_module / teardown_module 四、类和方法 五、函数和类混合 一、前言 学过 unittest 的都知道里面用前置和后置 setup 和 teardown 非常好用&#xff0c;在每次用例开始前和…

Vue之计算属性(computed)

文章目录 前言一、计算属性二、实例1.缓存优势计算属性内部的属性&#xff0c;在第一次访问时会读取它的值&#xff0c;然后存入缓存 2.简写简写其实就是当确定计算属性内的属性只读不更改&#xff0c;即只有get函数没有写set函数时简写的方式 3.补充 总结 前言 计算属性 一、…

哈工大计算机网络课程传输层协议之:拥塞控制原理剖析

哈工大计算机网络课程传输层协议之&#xff1a;拥塞控制原理剖析 哈工大计算机网络课程传输层协议详解之&#xff1a;可靠数据传输的基本原理 哈工大计算机网络课程传输层协议详解之&#xff1a;流水线机制与滑动窗口协议 哈工大计算机网络课程传输层协议详解之&#xff1a;T…