2024年大数据最全【Redis高手修炼之路】②Redis的五大数据类型,2024年展望大数据开发原生开发的现状

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取


127.0.0.1:6379> set name tom

OK

127.0.0.1:6379> get name

"tom"

#当值为字符串时要加双引号,或者之间加逗号隔开,空格代表命令结束

127.0.0.1:6379> set address "bei jing" 

OK

127.0.0.1:6379> set hobby basketball,football

OK

127.0.0.1:6379> get address

"bei jing"

127.0.0.1:6379> get hobby

"basketball,football"

127.0.0.1:6379> append hobby "music"  #追加字符串

(integer) 24

127.0.0.1:6379> get hobby

"basketball,footballmusic"

127.0.0.1:6379> getrange address 0 2 #截取字符串,下标从0开始

"bei"

127.0.0.1:6379> strlen address

(integer) 8





1.1.2 批量插入和查询

mset key value [key value ...]同时设置一个或多个 键值对

mget key1 [key2...]获取一个或多个给定key的值

msetnx key value [key value ...]同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在


127.0.0.1:6379> mset a 1 b 2 c 3

OK

127.0.0.1:6379> mget a b c

1) "1"

2) "2"

3) "3"

127.0.0.1:6379> msetnx weight "170" height "100"

(integer) 1

127.0.0.1:6379> mget weight height

1) "170"

2) "100"



1.1.3 设置key值的生存时间

setex key seconds value设置key-value ,并设置key的生存时间(秒)

psetex key milliseconds value设置key-value ,并设置key的生存时间(毫秒)

setnx key value在 key 不存在时设置 key 的值


127.0.0.1:6379> setex id 10 "1001"

OK

127.0.0.1:6379> get id

"1001"

127.0.0.1:6379> get id  #10s之后就过期了

(nil)

127.0.0.1:6379> psetex key 10000 abc

OK

127.0.0.1:6379> get key

"abc"

127.0.0.1:6379> get key

(nil)

127.0.0.1:6379> setnx id "1002"

(integer) 1

127.0.0.1:6379> get id

"1002"



1.1.4 key值的自增和自减

incr key key值自动增一

decr key key值自动减一

incrby key increment将 key 所储存的值加上给定的增量值(increment)

incrbyfloat key increment将 key 所储存的值加上给定的浮点增量值(increment)

decrby key decrementkey所储存的值减去给定的减量值(decrement)


127.0.0.1:6379> set age "15"

OK

127.0.0.1:6379> get age

"15"

127.0.0.1:6379> incr age

(integer) 16

127.0.0.1:6379> incrby age 5

(integer) 21

127.0.0.1:6379> decr age

(integer) 20

127.0.0.1:6379> decrby age 5

(integer) 15

127.0.0.1:6379> incrbyfloat age 1.5

"16.5"



1.2 使用场景


  • 缓存

    set user:1 “{id:1,name:tom,…}” ex 300

  • 计数:比如计算页面的访问次数或者某个链接的点击次数

    set post:1 “0”

    incr post:1 …

  • 限速:限制一分钟只能设置5次密码

    set pwd:1 5 ex 60

    decr pwd:1

2.哈希

=======================================================================

Redis的键所对应的值本身又是一个键值对结构

在这里插入图片描述

与关系型数据库的区别:

1.关系型数据库是结构化的,若添加新的列,会影响到所有的行,而哈希类型是稀疏的,每个键可以有不同的哈希数据;

2.关系型数据库则可以支持复杂的关系查询

2.1 常用命令


2.1.1 添加、查询、删除、获取长度以及是否存在

hset key field value将哈希表 key 中的字段 field 的值设为 value

hget key field获取存储在哈希表中指定字段的值/td>

hdel key field2 [field2]删除一个或多个哈希表字段

hkeys key获取所有哈希表中的字段

hvals key获取哈希表中所有值

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

hlen key获取哈希表中字段的数量

hexists key field查看哈希表 key 中,指定的字段是否存在


127.0.0.1:6379> hset user name tom age "18"

(integer) 2

127.0.0.1:6379> hget user name

"tom"

127.0.0.1:6379> hgetall user

1) "name"

2) "tom"

3) "age"

4) "18"

127.0.0.1:6379> hdel user age

(integer) 1

127.0.0.1:6379> hgetall user

1) "name"

2) "tom"

127.0.0.1:6379> hkeys user

1) "name"

127.0.0.1:6379> hlen user

(integer) 1

127.0.0.1:6379> hexists user name

(integer) 1

127.0.0.1:6379> hexists user age

(integer) 0

127.0.0.1:6379> hvals user

1) "tom"





2.1.2 key值的增加

hincrby key field increment为哈希表 key 中的指定字段的整数值加上增量 increment

hincrbyfloat key field increment为哈希表 key 中的指定字段的浮点数值加上增量 increment


127.0.0.1:6379> hset user score "85"

(integer) 1

127.0.0.1:6379> hincrby user score 5

(integer) 90

127.0.0.1:6379> hincrbyfloat user score 1.5

"91.5"



2.1.3 批量添加字段

hsetnx key field value在字段 field 不存在时,设置哈希表字段的值

hmget key field1 [field2]获取所有给定字段的值

hmset key field1 value1 [field2 value2]同时将多个域值对设置到哈希表中


127.0.0.1:6379> hsetnx user grade 3

(integer) 1

127.0.0.1:6379> hmget user name age grade

1) "tom"

2) "20"

3) "3"

127.0.0.1:6379> hmset user gender M class 1

OK

127.0.0.1:6379> hgetall user

 1) "name"

 2) "tom"

 3) "age"

 4) "20"

 5) "score"

 6) "91.5"

 7) "grade"

 8) "3"

 9) "gender"

10) "M"

11) "class"

12) "1"





2.2 三种存储方式的区别


  • 常规的字符串

    优点:每个键都可以单独设置过期时间;

    缺点:键占用大量内存,信息内聚性差;

  • 序列化字符串

    优点︰编程简单;

    缺点:全量更新(反序列化->更新->序列化);

  • 哈希类型

    优点:每个键都可以单独更新;

    缺点:如果没有控制好编码,会消耗更多内存。

3.列表

=======================================================================

1.列表是线性有序的数据结构;

2.列表中的元素是可以重复的;

3.—个列表最多能存储232-1个元素。

3.1 常用命令


3.1.1 列表的插入、移除及查询

lpush key value1 [value2]将一个或多个值插入到列表头部(左插入)

rpush key value1 [value2]在列表尾部添加一个或多个值(右插入)

rpop key移除并输出列表最后一个元素

lpop key移出并输出列表的第一个元素

llen key获取列表长度

lindex key index 通过索引获取列表中的元素

lrange key start stop获取列表指定范围内的元素


127.0.0.1:6379> lpush list 3 2 1

(integer) 3

127.0.0.1:6379> rpush list 4 5 6

(integer) 6

127.0.0.1:6379> lrange list 0 -1 # 相当于lrange list 0 5 ,-1表示末尾

1) "1"

2) "2"

3) "3"

4) "4"

5) "5"

6) "6"

127.0.0.1:6379> rpop list

"6"

127.0.0.1:6379> lpop list

"1"

127.0.0.1:6379> llen list

(integer) 4

127.0.0.1:6379> lindex list 3

"5"



3.1.2 对已有列表进行更新、截取元素

lrem key count value根据value移除指定数量的值

lset key index value通过索引更新元素

linsert key before|after pivot value在列表的元素前或者后插入元素

lpushx key value 将一个或多个值插入到已存在的列表头部

rpushx key value将一个或多个值插入到已存在的列表尾部

ltrim key start stop裁剪列表元素,只保留指定区间内的元素,不在指定区间之内的元素都将被删除。

rpoplpush source destination移除列表的最后一个元素,并将该元素添加到另一个列表并返回


127.0.0.1:6379> lpush mylist a 1 a 2 b 3 b 4 c 5 a 6

(integer) 12

127.0.0.1:6379> lrem mylist 2 a   #删除前两个a

(integer) 2

127.0.0.1:6379> lrange mylist 0 -1

 1) "6"

 2) "5"

 3) "c"

 4) "4"

 5) "b"

 6) "3"

 7) "b"

 8) "2"

 9) "1"

10) "a"

127.0.0.1:6379> lset mylist 1 12

OK

127.0.0.1:6379> linsert mylist before 3 111   #在3前面插入111

(integer) 11

127.0.0.1:6379> lrange mylist 0 -1

 1) "6"

 2) "12"

 3) "c"

 4) "4"

 5) "b"

 6) "111"

 7) "3"

 8) "b"

 9) "2"

10) "1"

11) "a"

127.0.0.1:6379> lpushx mylist aaa

(integer) 12

127.0.0.1:6379> rpushx mylist bbb

(integer) 13

127.0.0.1:6379> lrange mylist 0 -1

 1) "aaa"

 2) "6"

 3) "12"

 4) "c"

 5) "4"

 6) "b"

 7) "111"

 8) "3"

 9) "b"

10) "2"

11) "1"

12) "a"

13) "bbb"

127.0.0.1:6379> ltrim mylist 0 5

OK

127.0.0.1:6379> lrange mylist 0 -1

1) "aaa"

2) "6"

3) "12"

4) "c"

5) "4"

6) "b"

127.0.0.1:6379> rpoplpush mylist newlist

"b"



3.2 使用场景


  • 消息队列:生产者通过lpush命令从列表左侧插入元素;消费者通过brpop命令从列表右侧弹出元素;

  • 内容列表:有序存储用户的待办事项、收藏文章等内容;

4.集合

=======================================================================

1.集合中的元素是无序、不可重复的,一个集合最多能存储232-1个元素;

2.集合除了支持对元素的增删改查之外,还支持对多个集合取交集、并集、差集。

4.1 常用命令


4.1.1 添加、删除

sadd key member1 member2向集合中添加一个或多个成员

scard key获取集合成员数

spop key移除并返回集合中的一个随机元素

smembers key返回集合中的所有成员

sismember key member判断member是否是集合key的成员

srem key member1 member2移除集合中的一个或多个成员

smove source destination member将 member 元素从 source 集合移动到 destination 集合


127.0.0.1:6379> sadd myset1 a b c d e f

(integer) 6

127.0.0.1:6379> sadd myset2 d e f g h i

(integer) 6

127.0.0.1:6379> scard myset1

(integer) 6

127.0.0.1:6379> smembers myset1

1) "b"

2) "a"

3) "c"

4) "f"

5) "d"

6) "e"

127.0.0.1:6379> spop myset1 2  # 随机移除2个成员

1) "e"

2) "b"

127.0.0.1:6379> sismember myset1 c   #查询集合中是否存在c

(integer) 1

127.0.0.1:6379> srem myset1 f #将集合中的f移除

(integer) 1

127.0.0.1:6379> smove myset1 newset a  #将a从集合myset1移动到newset

(integer) 1


![img](https://img-blog.csdnimg.cn/img_convert/a5e64fd323251000ca1afdcc560bc0c2.png)
![img](https://img-blog.csdnimg.cn/img_convert/9ca849ff46967951e969c013ae3e3043.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

ce 集合移动到 destination 集合



127.0.0.1:6379> sadd myset1 a b c d e f

(integer) 6

127.0.0.1:6379> sadd myset2 d e f g h i

(integer) 6

127.0.0.1:6379> scard myset1

(integer) 6

127.0.0.1:6379> smembers myset1

  1. “b”

  2. “a”

  3. “c”

  4. “f”

  5. “d”

  6. “e”

127.0.0.1:6379> spop myset1 2 # 随机移除2个成员

  1. “e”

  2. “b”

127.0.0.1:6379> sismember myset1 c #查询集合中是否存在c

(integer) 1

127.0.0.1:6379> srem myset1 f #将集合中的f移除

(integer) 1

127.0.0.1:6379> smove myset1 newset a #将a从集合myset1移动到newset

(integer) 1

[外链图片转存中…(img-ga2WpavO-1714866780944)]
[外链图片转存中…(img-dA8AMPOw-1714866780944)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 12
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值