大数据最新Day148(1)

官方文档:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yKD9ec3u-1609330871329)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20201230130653226.png)]

全文翻译:

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库缓存消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

一、Redis-Key的基本指令


1、keys * #查看所有key

2、set key value #设置一个key-value

3、EXISTS key #判断当前的key是否存在

4、move key 1 #移动当前key到哪个数据库

5、EXPIRE key 时间 #设置当前key的过期时间,单位:秒

6、ttl key #查看当前key的剩余时间

7、get key #获得当前key的值

8、type key #查看当前key的类型

9、del key #移除当前key

127.0.0.1:6379> keys * #查看所有key

(empty list or set)

127.0.0.1:6379> set name achang #设置一个key

OK

127.0.0.1:6379> keys *

  1. “name”

127.0.0.1:6379> set age 1

OK

127.0.0.1:6379> keys *

  1. “age”

  2. “name”

127.0.0.1:6379> EXISTS age #判断当前的key是否存在

(integer) 1

127.0.0.1:6379> EXISTS name1

(integer) 0

127.0.0.1:6379> move name 1 #移除当前key

(integer) 1

127.0.0.1:6379> keys *

  1. “age”

127.0.0.1:6379> clear

127.0.0.1:6379> set name achang

OK

127.0.0.1:6379> keys *

  1. “name”

  2. “age”

127.0.0.1:6379> get name

“achang”

127.0.0.1:6379> get age

“1”

127.0.0.1:6379> EXPIRE name 10 #设置当前key的过期时间,单位:秒

(integer) 1

127.0.0.1:6379> ttl name #查看当前key的剩余时间

(integer) 3

127.0.0.1:6379> ttl name

(integer) 1

127.0.0.1:6379> ttl name

(integer) -2

127.0.0.1:6379> get name #获得当前key的值

(nil)

127.0.0.1:6379> type name #查看当前key的类型

string

127.0.0.1:6379> type age

string

127.0.0.1:6379> del age #移除当前key

(integer) 1

官网查看命令:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vSBmhQY1-1609330871332)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20201230133530432.png)]

二、String(字符串)


90%的java程序员使用redis只会使用一个String类型

127.0.0.1:6379> append age hello #给当前key追加内容,如果key不存在,就相当于setkey

(integer) 6

127.0.0.1:6379> keys * #获取所有的key

  1. “age”

  2. “name”

127.0.0.1:6379> get age

“1hello”

127.0.0.1:6379> STRLEN age #当前key的长度

(integer) 6

127.0.0.1:6379> STRLEN name

(integer) 6

127.0.0.1:6379> get name

“achang”

127.0.0.1:6379> clear

.

i++命令:

decr key #key值-1

incr key #key值+1

INCRBY key 10 #key值+设置的步长,

DECRBY key 10 #key值-设置的步长

127.0.0.1:6379> decr view #key值-1

(integer) 25

127.0.0.1:6379> incr view #key值+1

(integer) 26

127.0.0.1:6379> INCRBY view 10 #key值+设置的步长

(integer) 106

127.0.0.1:6379> DECRBY view 10 #key值-设置的步长

(integer) 96

.

字符串范围:

GETRANGE key start end #截取key从start开始,end结束的字符串值

SETRANGE key offset value #替换key从offset开始的值为value

#字符串范围 range

127.0.0.1:6379> set key1 hello,achang #设置key1的值

OK

127.0.0.1:6379> get key1 #获取key1的值

“hello,achang”

127.0.0.1:6379> GETRANGE key1 0 4 #截取字符串[0,4]

“hello”

127.0.0.1:6379> GETRANGE key1 0 -1 #截取字符串[0,-1]相当于获取全部

“hello,achang”

#替换

127.0.0.1:6379> set key2 abcdefg #设置key2的值

OK

127.0.0.1:6379> get key2 #获取key2的值

“abcdefg”

127.0.0.1:6379> SETRANGE key2 1 2 #替换key2指定位置开始的字符串

(integer) 7

127.0.0.1:6379> get key2

“a2cdefg”

原子设置值:

setex (set with expire) # 设置过期时间

setnx (set if not expire) #不存在在设置,存在就创建失败 (分布式锁中常常使用)

127.0.0.1:6379> setex key3 30 3033 #只是key3值为3033,30秒后过期

OK

127.0.0.1:6379> ttl key3 #查看key3剩余时间

(integer) 27

127.0.0.1:6379> get key3 #获取key3的值

“3033”

127.0.0.1:6379> setnx mykey redis #如果mykey不存在,创建mykey

(integer) 1

127.0.0.1:6379> keys *

  1. “key1”

  2. “mykey”

  3. “key2”

127.0.0.1:6379> ttl key3

(integer) -2

127.0.0.1:6379> setnx mykey mongoDb #如果mykey存在,创建失败

(integer) 0

127.0.0.1:6379> get mykey

“redis”

.

批量获取和设置:

mset k1 v1 [k2 v2…] #批量设置key

mget k1 [k2 K2…] #批量获取key

msetnx k1 v1[k2 K3…] #原子性操作,前面失败了就全部失败,批量创建key

127.0.0.1:6379> keys *

(empty list or set)

127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 #批量设置key

OK

127.0.0.1:6379> keys *

  1. “k3”

  2. “k2”

  3. “k1”

127.0.0.1:6379> mget k1 k2 k3 #批量获取key

  1. “v1”

  2. “v2”

  3. “v3”

127.0.0.1:6379> msetnx k1 v1 k2 v2 k3 v3 k4 v4 #如果不存在,原子性操作

(integer) 0

#对象

set user:1{name:achang,age:3} #设置一个user:1 对象 值为json保存一个对象

#这里key是一个巧妙的设计:user:{id}:{filed},如此设计在Redis中完全ok

127.0.0.1:6379> mset user:1:name achang user:1:age 13

OK

127.0.0.1:6379> mget user:1:name user:1:age

  1. “achang”

  2. “13”

getset #先get再set

127.0.0.1:6379> getset room redis #先获取再设置,如果不存在,返回nil,并设置

(nil)

127.0.0.1:6379> get room

“redis”

127.0.0.1:6379> getset room mongoDB #如果存在,返回key的值

“redis”

127.0.0.1:6379> get room

“mongoDB”

127.0.0.1:6379>

String类似的使用场景:value除了字符串还可以是数字

  • 计数器

  • 统计多单位数量 uid:1001:follow 0 incr

  • 粉丝数

  • 对象缓存存储

.

三、List(列表)


基本数据类型,列表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jG5gd3rK-1609330871334)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20201230150138852.png)]

在Redis里面,可以用List玩成:栈,队列,阻塞队列

redis不区分大小写命令

添加

LPUSH

RPUSH

127.0.0.1:6379> LPUSH list one #将一个值或多个值,插入到链表的头部(左)

(integer) 1

127.0.0.1:6379> LPUSH list two

(integer) 2

127.0.0.1:6379> LPUSH list three

(integer) 3

127.0.0.1:6379> LRANGE list 0 -1 #获取list全部的值

  1. “three”

  2. “two”

  3. “one”

127.0.0.1:6379> RPUSH list right

(integer) 4

127.0.0.1:6379> LRANGE list 0 -1 #将一个值或多个值,插入到链表的尾部(右)

  1. “three”

  2. “two”

  3. “one”

  4. “right”

127.0.0.1:6379>

移除

LPOP

RPOP

127.0.0.1:6379> LRANGE list 0 -1

  1. “three”

  2. “two”

  3. “one”

  4. “right”

127.0.0.1:6379> LPOP list #移除list的第一个元素

“three”

127.0.0.1:6379> LRANGE list 0 -1

  1. “two”

  2. “one”

  3. “right”

127.0.0.1:6379> RPOP list #移除list的最后一个元素

“right”

127.0.0.1:6379> LRANGE list 0 -1

  1. “two”

  2. “one”

移除指定的值

Lrem key count value #移除指定的值

count>0从前往后移除,=0移除全部,<从后往前

127.0.0.1:6379> LRANGE list 0 -1

  1. “three”

  2. “three”

  3. “two”

  4. “ont”

127.0.0.1:6379> LREM list 1 ont #移除list中一个ont

(integer) 1

127.0.0.1:6379> LREM list 2 three #移除list中两个three

(integer) 2

127.0.0.1:6379> LRANGE list 0 -1 #查看list全部元素

  1. “two”

根据下标获取值

Lindex #通过下标获取某一个值

127.0.0.1:6379> LRANGE list 0 -1

  1. “two”

  2. “one”

127.0.0.1:6379> LINDEX list 0

“two”

获取list长度

Llen #获取list长度

127.0.0.1:6379> lpush list ont

(integer) 1

127.0.0.1:6379> lpush list two

(integer) 2

127.0.0.1:6379> lpush list three

(integer) 3

127.0.0.1:6379> LRANGE list 0 -1

  1. “three”

  2. “two”

  3. “ont”

127.0.0.1:6379> LLEN list #获取list长度

(integer) 3

裁剪操作

ltrim #裁剪,会修改原来的list

127.0.0.1:6379> keys *

(empty list or set)

127.0.0.1:6379> RPUSH mylist hello

(integer) 1

127.0.0.1:6379> RPUSH mylist hello1 hello2 hello3

(integer) 4

127.0.0.1:6379> LRANGE mylist 0 -1

  1. “hello”

  2. “hello1”

  3. “hello2”

  4. “hello3”

127.0.0.1:6379> ltrim mylist 1 2

OK

127.0.0.1:6379> LRANGE mylist 0 -1

  1. “hello1”

  2. “hello2”

组合命令

rpoplpush #移除列表的最后一个元素,并移动新的列表中

127.0.0.1:6379> rpush mylist hello0 hello1 hello2 hello3 hello4

(integer) 5

127.0.0.1:6379> RPOPLPUSH mylist deslist #移除最后的元素,并最后一个元素添加到deslist中

“hello4”

127.0.0.1:6379> LRANGE mylist 0 -1 #查看mylist列表

  1. “hello0”

  2. “hello1”

  3. “hello2”

  4. “hello3”

127.0.0.1:6379> LRANGE deslist 0 -1 #查看目标列表,确实有mylist删除的值

  1. “hello4”

替换命令

LSET #前提要求列表存在,设置列表下标的值

127.0.0.1:6379> EXISTS list #判断list是否存在

(integer) 0

127.0.0.1:6379> LSET list 0 hello0 #前提要求列表存在

(error) ERR no such key

127.0.0.1:6379> LPUSH list hello #给list添加值

(integer) 1

127.0.0.1:6379> LSET list 0 hello0 #设置list下标0的值为hello0

OK

127.0.0.1:6379> LRANGE list 0 -1 #查看list所有元素

  1. “hello0”

插入命令

linsert 列表 before|after 元素 插入的值 #指定列表前后插入值

127.0.0.1:6379> rpush mylist hello0 hello1 hello2 hello3

(integer) 4

127.0.0.1:6379> LINSERT mylist before hello1 hello0.5 #hello1前插入hello0.5

(integer) 5

127.0.0.1:6379> LRANGE mylist 0 -1 #查看列表

  1. “hello0”

  2. “hello0.5”

  3. “hello1”

  4. “hello2”

  5. “hello3”

127.0.0.1:6379> LINSERT mylist after hello1 hello1.5 #hello1后插入hello1.5

(integer) 6

127.0.0.1:6379> LRANGE mylist 0 -1 #查看列表

  1. “hello0”

  2. “hello0.5”

  3. “hello1”

  4. “hello1.5”

  5. “hello2”

  6. “hello3”

小结

  • list实际上是一个链表,(before) Node (after),left,right都可以插入值

  • 如果key不存在,创建新的链表

  • 如果key存在,新增内容

  • 如果移除了key,所有的value就消失了(空链表)

  • 在两遍插入后者改动值效率最高,如果是中间元素,效率偏低

消息排队,消息队列

img
img
img

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

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

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

1前插入hello0.5

(integer) 5

127.0.0.1:6379> LRANGE mylist 0 -1 #查看列表

  1. “hello0”

  2. “hello0.5”

  3. “hello1”

  4. “hello2”

  5. “hello3”

127.0.0.1:6379> LINSERT mylist after hello1 hello1.5 #hello1后插入hello1.5

(integer) 6

127.0.0.1:6379> LRANGE mylist 0 -1 #查看列表

  1. “hello0”

  2. “hello0.5”

  3. “hello1”

  4. “hello1.5”

  5. “hello2”

  6. “hello3”

小结

  • list实际上是一个链表,(before) Node (after),left,right都可以插入值

  • 如果key不存在,创建新的链表

  • 如果key存在,新增内容

  • 如果移除了key,所有的value就消失了(空链表)

  • 在两遍插入后者改动值效率最高,如果是中间元素,效率偏低

消息排队,消息队列

[外链图片转存中…(img-4T8BdPoO-1714781118863)]
[外链图片转存中…(img-mPQX6qe0-1714781118863)]
[外链图片转存中…(img-MZ5ckNsl-1714781118864)]

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

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

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

  • 15
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值