网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
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的键所对应的值本身又是一个键值对结构
![在这里插入图片描述](https://img-blog.csdnimg.cn/e0fa22ea5d094328a776ae32c0910e74.png#pic_center)
**与关系型数据库的区别:**
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
-
“name”
-
“tom”
-
“age”
-
“18”
127.0.0.1:6379> hdel user age
(integer) 1
127.0.0.1:6379> hgetall user
-
“name”
-
“tom”
127.0.0.1:6379> hkeys user
- “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
- “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
-
“tom”
-
“20”
-
“3”
127.0.0.1:6379> hmset user gender M class 1
OK
127.0.0.1:6379> hgetall user
-
“name”
-
“tom”
-
“age”
-
“20”
-
“score”
-
“91.5”
-
“grade”
-
“3”
-
“gender”
-
“M”
-
“class”
-
“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”
-
“2”
-
“3”
-
“4”
-
“5”
-
“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
-
“6”
-
“5”
-
“c”
-
“4”
-
“b”
-
“3”
-
“b”
-
“2”
-
“1”
-
“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
-
“6”
-
“12”
-
“c”
-
“4”
-
“b”
-
“111”
-
“3”
-
“b”
-
“2”
-
“1”
-
“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
-
“aaa”
-
“6”
-
“12”
-
“c”
-
“4”
-
“b”
-
“111”
-
“3”
-
“b”
-
“2”
-
“1”
-
“a”
-
“bbb”
127.0.0.1:6379> ltrim mylist 0 5
OK
127.0.0.1:6379> lrange mylist 0 -1
-
“aaa”
-
“6”
-
“12”
-
“c”
-
“4”
-
“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
-
“b”
-
“a”
-
“c”
-
“f”
-
“d”
-
“e”
127.0.0.1:6379> spop myset1 2 # 随机移除2个成员
-
“e”
-
“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
127.0.0.1:6379> smembers newset
- “a”
### []( )4.1.2 交集、并集、差集
`sinter key1 key2返`回给定的集合的交集
`sunion key1 key2`返回给定的集合的并集
`sdiff key1 key2`返回给定的集合的差集
`sinterstore destination key1 key2`返回给定的集合的交集并存到destination中
`sunionstore destination key1 key2`返回给定的集合的并集并存到destination中
`sdiffstore destination key1 key2`返回给定的集合的差集并存到destination中
127.0.0.1:6379> sinter myset1 myset2
-
“d”
-
“e”
127.0.0.1:6379> sunion myset1 myset2
-
“d”
-
“e”
-
“a”
-
“c”
-
“g”
-
“h”
-
“f”
-
“b”
-
“i”
127.0.0.1:6379> sdiff myset1 myset2
-
“a”
-
“b”
-
“c”
127.0.0.1:6379> sinterstore newset1 myset1 myset2
(integer) 2
127.0.0.1:6379> smembers newset1
-
“d”
-
“e”
127.0.0.1:6379> sunionstore newset2 myset1 myset2
(integer) 9
127.0.0.1:6379> smembers newset2
-
“d”
-
“e”
-
“a”
-
“c”
-
“g”
-
“h”
-
“f”
-
“b”
-
“i”
127.0.0.1:6379> sdiffstore newset3 myset1 myset2
(integer) 3
127.0.0.1:6379> smembers newset3
-
“a”
-
“b”
-
“c”
### []( )4.1.3 随机数
![img](https://img-blog.csdnimg.cn/img_convert/4d07600a42ca000727014e00695c5c26.png)
![img](https://img-blog.csdnimg.cn/img_convert/ad6759a5e5c4d759e516b1db744b88dd.png)
![img](https://img-blog.csdnimg.cn/img_convert/ebf0669980e388c5015c1b9504800d25.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**
6379> sdiff myset1 myset2
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> sinterstore newset1 myset1 myset2
(integer) 2
127.0.0.1:6379> smembers newset1
1) "d"
2) "e"
127.0.0.1:6379> sunionstore newset2 myset1 myset2
(integer) 9
127.0.0.1:6379> smembers newset2
1) "d"
2) "e"
3) "a"
4) "c"
5) "g"
6) "h"
7) "f"
8) "b"
9) "i"
127.0.0.1:6379> sdiffstore newset3 myset1 myset2
(integer) 3
127.0.0.1:6379> smembers newset3
1) "a"
2) "b"
3) "c"
4.1.3 随机数
[外链图片转存中…(img-8L43NLsN-1715579005356)]
[外链图片转存中…(img-YcKki5QP-1715579005356)]
[外链图片转存中…(img-JQtE8qFU-1715579005356)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新