Redis缓存——快速入门

news2025/1/11 17:12:05

目录

1、Redis概述

1.1、NoSQL

1.2、缓存的需求

2、Redis简介及安装

2.2、redis的特点

2.3、redis下载

2.4、window安装

2.5、linux安装

3、Redis操作

3.1、多数据库

3.2、选择数据库

3.3、清空数据库

3.4、基本命令

4、五种数据类型

4.1、字符串(string)

4.2、哈希类型(hash)

4.3、列表类型(list)

4.4、集合类型(set)

4.5、有序集合(zset)

5、Redis生存时间

5.1、设置生存时间

5.2、清除生存时间

5.3、设置单位为毫秒


 

1、Redis概述

1.1、NoSQL

NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在处理web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,出现了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,特别是大数据应用难题。(引用于百度百科)

主流的NoSQL产品

  

目前缓存的主流技术:Redis、Memcached、mongoDB 

1.2、缓存的需求

在信息爆炸的今天,数据的存储,对数据的查询都是非常频繁且非常大量的。关系型数据库的就显得力不从心了,扩展性较差,查询简单条件数据的效率较低等缺点,无意是致命的。而NOSQL数据库中的数据之间并无关系,这一特点造就了NOSQL的易扩展性,读写性能高等优势。所以面对大量的数据读写,非关系型数据库相比较于关系型数据库有着巨大的优势。那么NOSQL又是什么数据库呢?非关系型数据库。


为什么要使用Nosql? 
1、对数据高并发的读写 
2、海量数据的读写 
3、对数据的高可扩展性
4、NoSql出现的目地是为解决性能问题所产生的技术

Redis数据库是NOSQL数据库中以key-value存储模式下的一种数据库。

那么Redis数据库为什么又在NOSQL中脱颖而出?
有以下几个原因:
1、Redis支持多种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。可以在大部分的场景中使用。
2、支持主从复制,读写分离。读写效率大大提升。
3、数据存储在内存中,可用来做缓存。需要持久化的数据就将其存入硬盘,不需要持久化的数据,可以进行短暂的存储,提高访问速度。

2、Redis简介及安装

Redis官网: Redis 英文

Redis中文网 中文

C语言编写,基于内存,可持久化,以Key-Value形式存储数据,的NoSql数据库

2.1、历史与发展

2008年,意大利的一家创业公司Merzia推出了一款基于MySQL的网站实时统计系统,不过Salvatore Sanfilippo并不满足其将Redis用于LOOGG这更多的人使用它手是在同一名生要的代码贡献者pieter Noordhui'sNasakaere angraafe。并开始和Redis的Salvatore Sanfilippo自己也没有想到,短短的几年时间。Redis就拥有了庞大的用户群体Hacker News在2012年发布了一份数据库的使用情洗调查机结巢盒宗有近12%的公司在使用Redis。国内如新浪微博街旁网山知乎网,国外如GitHubStack Overflow、 Flickr等都是Redis的用户。vMware公司从2010年开始赞助Redis的开发,Salvatore Sanfilippo和Pieter Noordhuis也分别在3月和5月加入VMware,全职开发Redis。

2.2、redis的特点

1、速度快

2、键值对的数据结构服务器

3、丰富的功能

4、简单稳定

5、持久化

6、主从复制

7、高可用和分布式转移

8、客户端支持语言多

2.3、redis下载

linux环境下载:Download | Redis

windows环境下载: https://github.com/MicrosoftArchive/redis/releases

redis版本第二位是偶数为稳定版本3.0/ 3.2 /3.4,奇数为非稳定版本3.1 /3.3 /3.5

注意:redis官网不支持windows平台的,windows版本是由微软自己建立的一个分支,基于官方的源码上进行编译发布维护,一般比官方版略低

2.4、window安装

安装方式一 临时服务

无需要安装,只需要开启服务端和客户端即可

点击redis-server.exe 开启服务, 开启后不要关闭,关闭redis服务器就关掉了

点击redis-cli.exe 开启客户端

安装方式二 安装到系统服务

直接按装到本机服务中,无需要来回启动

-- 安装到系统服务
redis-server --service-install redis.windows.conf --loglevel verbose

 卸载服务:redis-server --service-uninstall  先停掉redis服务器
 开启服务:redis-server --service-start
 停止服务:redis-server --service-stop 

点击redis-cli.exe 开启客户端

也可以指定连接 redis-cli.exe -h 127.0.0.1 -p 6379  

2.5、linux安装

redis安装包

链接:https://pan.baidu.com/s/167TGZ2xjvQtM-DVia4qhiA 
提取码:koc3

在user/local目录下创建一个redis目录,把redis-6.2.6.tar.gz安装包上传至该目录下

因为redis是c语言写的,在安装redis之前一定要先配置好环境。
在当前存放的redis-6.2.6.tar.gz目录下安装,前提必须得先联网才能下载安装,并切换为root用户

yum install gcc   在安装过程中有提示输入y即可 

yum clean all      如果出错,把yum清下再进行install

gcc                     查看是否安装成功

在redis目录解压redis-6.2.6.tar.gz,安装下面步骤进行安装

tar -xzvf redis-6.2.6.tar.gz    -- 首先解压为目录

cd redis-6.2.6                      -- 进入目录

make        -- 编译redis成c的环境 

make install -- 进行安装 

修改redis.conf文件 修改配置文件改为 后台启动 

进行入redis ,root用户下操作

cd redis-6.2.6

vim redis.conf     -- 编辑修改 

修改daemonize no 改为 daemonize yes  (大概在257行) 

后台启动redis服务

cd /usr/local/redis/src -- 进入redis目录的src包下 

redis-server ../redis.conf 

关闭redis服务 

ps -ef | grep redis  -- 查看redis进程
kill -9 进程号 -- 杀掉进程也可以关闭redis服务 

3、Redis操作

3.1、多数据库

redis默认数据库数有16个,0-15号库,默认连接的数据库0号库,通过redis.windows.conf查看

redis不支持自定义数据库名称,redis的多数据库之间不是完全隔离有,flushall命令会清空所有的数据库数据

3.2、选择数据库

127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> set test abc
OK
127.0.0.1:6379[1]> get test
"abc"
127.0.0.1:6379[1]>

3.3、清空数据库

    FLUSHALL  -- 清空【所有数据库】的所有数据
    FLUSHDB  --  清空【当前】所在数据库的数据

127.0.0.1:6379> set a 123
OK
127.0.0.1:6379> get a
"123"
127.0.0.1:6379> flushdb   -- 清空【当前】所在数据库的数据
OK
127.0.0.1:6379> get a 
(nil)
127.0.0.1:6379>
127.0.0.1:6379> set b 123  -- 0号库设置数据
OK
127.0.0.1:6379> get b
"123"
127.0.0.1:6379> select 1  -- 切换1号库设置数据
OK
127.0.0.1:6379[1]> set c 123
OK
127.0.0.1:6379[1]> get c
"123"
127.0.0.1:6379[1]> flushall -- 清空【所有数据库】的所有数据
OK
127.0.0.1:6379[1]> get c  -- 清空后1号库数据已清除
(nil)
127.0.0.1:6379[1]> select 0 -- 清空后0号库数据已清除
OK
127.0.0.1:6379> get b
(nil)

3.4、基本命令

    keys *  -- 查看当前所有key
    exists key  --判断key是否存在,存在返回1,不存在返回0
    del key -- 删除key,成功返回1,失败返回0
    type key  --查看key的数据类型

keys *   -- 查看当前所有key

127.0.0.1:6379> set a 123
OK
127.0.0.1:6379> set b 321
OK
127.0.0.1:6379> keys *  -- 查看当前所有key
1) "b"
2) "a"
127.0.0.1:6379>

exists key   --判断key是否存在,存在返回1,不存在返回0

127.0.0.1:6379> exists a  -- 判断key是否存在,存在返回1,不存在返回0
(integer) 1
127.0.0.1:6379> exists c
(integer) 0
127.0.0.1:6379>

del key      -- 删除key,成功返回1,失败返回0  

127.0.0.1:6379> keys *
1) "b"
2) "c"
127.0.0.1:6379> del b -- 删除key,成功返回1,失败返回0
(integer) 1
127.0.0.1:6379> del a
(integer) 0
127.0.0.1:6379>

type key     --查看key的数据类型  

127.0.0.1:6379> set a 123
OK
127.0.0.1:6379> type a  -- 查看数据类型
string
127.0.0.1:6379>

设置相同的key名,会覆盖上一个  

127.0.0.1:6379> set k1 aaa
OK
127.0.0.1:6379> set k1 bbb
OK
127.0.0.1:6379> get k1  -- 注意设置相同的key名,会覆盖上一个
"bbb"
127.0.0.1:6379>

clear 清屏

127.0.0.1:6379> clear
-- 或者 ctrl + L

4、五种数据类型

redis的数据结构:
    redis存储的是:key,value格式的数据,其中key都是字符串,value有5种不同的数据结构
    value的数据结构:
        1) 字符串类型 string :一个键最大能存储 512MB。
        2) 哈希类型 hash : map格式。  
        3) 列表类型 list : linkedlist格式。支持重复元素。
        4) 集合类型 set  : 不允许重复元素 ,元素是无序。
        5) 有序集合类型 zset:不允许重复元素,且元素有顺序。

4.1、字符串(string)

get、set 赋值取值

127.0.0.1:6379> set a 123
OK
127.0.0.1:6379> get a
"123"
127.0.0.1:6379> get b
(nil)
127.0.0.1:6379>

intcr 递增,返回递增后的值 默认+1

127.0.0.1:6379> incr num
(integer) 1
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> incr num
(integer) 3

 incrby 增加定制的整数

127.0.0.1:6379> incrby num 2
(integer) 5
127.0.0.1:6379> incrby num 2
(integer) 7
127.0.0.1:6379> incrby num 2
(integer) 9
127.0.0.1:6379>

decr、decrby  减少指定的整数

127.0.0.1:6379> decr num
(integer) 8
127.0.0.1:6379> decr num
(integer) 7
127.0.0.1:6379> decrby num 3
(integer) 4
127.0.0.1:6379> decrby num 3
(integer) 1
127.0.0.1:6379> decrby num 3
(integer) -2
127.0.0.1:6379>

append  向键值的末尾追加值 , 返回值是追加后字符串的长度

127.0.0.1:6379> set str hello
OK
127.0.0.1:6379> append str "redis"
(integer) 10
127.0.0.1:6379> get str
"helloredis"
127.0.0.1:6379>

strlen 获取字符串的长度,如何键不存在返回0

127.0.0.1:6379> set str hello
OK
127.0.0.1:6379> strlen str
(integer) 5
127.0.0.1:6379> strlen a -- a 不存在返回0
(integer) 0
127.0.0.1:6379>

 mset、mget 同时设置、获取多个键值

127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> mget k2 k3
1) "v2"
2) "v3"
127.0.0.1:6379>

 del 指定删除键,如果不存返回0

127.0.0.1:6379> set m 111
OK
127.0.0.1:6379> del m
(integer) 1
127.0.0.1:6379> del n
(integer) 0

4.2、哈希类型(hash)

哈希类型 hash, map类型

存储: hset key field value

127.0.0.1:6379> hset myhash username zhangsan
(integer) 1
127.0.0.1:6379> hset myhash password asd123
(integer) 1

获取:

hget key field: 获取指定的field对应的值

hgetall key:获取所有的field和value

127.0.0.1:6379> hget myhash username
"zhangsan"
127.0.0.1:6379> hget myhash password
"asd123"
127.0.0.1:6379> hgetall myhash
1) "username"
2) "zhangsan"
3) "password"
4) "asd123"
127.0.0.1:6379>

删除: hdel key field

127.0.0.1:6379> hdel myhash username
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "password"
2) "123"
127.0.0.1:6379>>

4.3、列表类型(list)

列表类型 list : linkedlist格式, 支持重复元素

特点:单键多值

添加:

可以添加一个元素到列表的头部(左边)或者尾部(右边)对两端的操作性能都比较高,查询效率比较低

lpush key value: 将元素加入列表(左边)

127.0.0.1:6379> lpush k1 a  -- 向左边添加 a
(integer) 1
127.0.0.1:6379> lpush k1 b  -- 向左边添加 b
(integer) 2
127.0.0.1:6379> lpush k1 c  -- 向左边添加 c
(integer) 3
127.0.0.1:6379> -- 每添加一个往左边放一个:c <- b <- a

127.0.0.1:6379> lpush k1 a a b b -- 支持重复的数据
(integer) 4

127.0.0.1:6379> flushdb -- 清空当前数据库

127.0.0.1:6379> lpush k1 a b c -- 也可以同时添加多个值

127.0.0.1:6379> lindex k1 0  -- 根据索引0 找到c
"c"
127.0.0.1:6379> lindex k1 1  -- 根据索引1 找到b
"b" 
127.0.0.1:6379> lindex k1 2  -- 根据索引2 找到a
"a"
127.0.0.1:6379> lrange k1 0 -1 -- 范围取值
1) "c" -- 索引0  索引也为-3
2) "b" -- 索引1  索引也为-2
3) "a" -- 索引2  索引也为-1
127.0.0.1:6379> -- 结果:c <- b <- a

rpush key value:将元素加入列表(右边)

127.0.0.1:6379> rpush k2 v1 v2 v3   -- 向右边添加
(integer) 3
127.0.0.1:6379> lindex k2 0 -- 根据索引获取
"v1"
127.0.0.1:6379> lindex k2 1
"v2"
127.0.0.1:6379> lindex k2 2
"v3"

127.0.0.1:6379> lrange k2 0 -1
1) "v1" -- 索引0 索引也为-3
2) "v2" -- 索引1 索引也为-2
3) "v3" -- 索引2 索引也为-1
127.0.0.1:6379>  -- 每添加一个往右边放一个: v1 -> v2 -> v3

127.0.0.1:6379> llen k2 -- 获取长度
(integer) 3

获取:返回列表中指定区间内的元素,区间以偏移量start和end指定。其中0表示列表的第一个元素,1表示列表的第 二个元素,以l次类推( 索引0..end )。你也可以使用负数,-1表示最后一个元素,-2表示倒数第二个元素,以次类推。

lrange key start end 范围获取

lindex key index 根据索引获取

llen key 获取长度

127.0.0.1:6379> lpush k1 a b c  -- 存放数据
(integer) 3
127.0.0.1:6379> lindex k1 0  -- 根据索引0 找到c
"c"
127.0.0.1:6379> lindex k1 1  -- 根据索引1 找到b
"b" 
127.0.0.1:6379> lindex k1 2  -- 根据索引2 找到a
"a"
127.0.0.1:6379> lrange k1 0 -1 -- 范围取值:0表示第一个 -1表示最后一个
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> lrange k1 0 -2 -- 范围取值:0表示第一个 -2表示倒数第二个
1) "c"
2) "b"
127.0.0.1:6379>
127.0.0.1:6379> llen k1 -- 获取长度
(integer) 3
127.0.0.1:6379>

删除

lpop key: 删除列表最左边的元素,并将元素返回

rpop key: 删除列表最右边的元素,并将元素返回

127.0.0.1:6379> lpush k1 a b c -- 存放数据
127.0.0.1:6379> lrange k1 0 -1 -- 范围取值:0表示第一个 -1表示最后一个
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> lpop k1 -- 删除最左边元素,并返回
"c"
127.0.0.1:6379> lpop k1
"b"
127.0.0.1:6379> lpop k1
"a"
127.0.0.1:6379> keys *   -- 值在键在   值光键亡
(empty array)

4.4、集合类型(set)

集合类型 set , 不允许重复元素, 无序, 与java中的HashSet内部实现是一样的

存储:sadd key value

127.0.0.1:6379> sadd myset a -- 添加数据
(integer) 1
127.0.0.1:6379> sadd myset a -- 不允许添加重复元素,返回0
(integer) 0
127.0.0.1:6379> scard myset -- 返回集合中的元素个数
(integer) 1
127.0.0.1:6379> smembers myset -- 获取数据
1) "a"
127.0.0.1:6379> flushdb  -- 清空当前数据库
127.0.0.1:6379> sadd myset a a b c -- 也可以一次性添加多个数据
(integer) 3

获取:smembers key:获取set集合中所有元素

127.0.0.1:6379> sadd myset a b c
(integer) 3
127.0.0.1:6379> smembers myset  -- 获取set集合中所有元素
1) "b"
2) "c"
3) "a"
127.0.0.1:6379> smembers myset2 -- 获取不到返回empty
(empty list or set)

随机操作:srandmember key 随机查询set中的元素; spop key 随机删除set中的元素;

-- srandmember key 随机查询set中的元素
127.0.0.1:6379> srandmember myset
"a"
127.0.0.1:6379> srandmember myset
"c"
127.0.0.1:6379> srandmember myset
"a"

-- spop key 随机删除set中的元素
127.0.0.1:6379> spop myset -- 随机删除
"b"
127.0.0.1:6379> spop myset  -- 随机删除
"d"
127.0.0.1:6379> smembers myset -- 查看数据
1) "c"
2) "a"
127.0.0.1:6379>

删除:srem key value:删除set集合中的某个元素

127.0.0.1:6379> srem myset c -- 指定删除set集合中的某个元素
(integer) 1
127.0.0.1:6379> smembers myset
1) "b"
2) "a"
127.0.0.1:6379> srem myset a b -- 同时也可以删除多个值
(integer) 2
127.0.0.1:6379> smembers myset
(empty array)

4.5、有序集合(zset)

有序集合类型 sorted set, 不允许重复元素,且元素有顺序; 每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

存储:zadd key score value

127.0.0.1:6379> zadd mysort 80 jack
(integer) 1
127.0.0.1:6379> zadd mysort 80 jack -- 相同数据不能存
(integer) 0
127.0.0.1:6379> zadd mysort 60 lisi
(integer) 1
127.0.0.1:6379> zadd mysort 20 zhangsan
(integer) 1
127.0.0.1:6379> flushdb
127.0.0.1:6379> zadd mysort 80 jack 60 lisi 20 zhangsan-- 也可以同时添加多个

获取:zrange key start end [withscores]

127.0.0.1:6379> zrange mysort 0 -1  -- 第一个数据为0 最后一个数据为-1
1) "zhangsan"
2) "lisi"
3) "jack"
127.0.0.1:6379>
127.0.0.1:6379> zrange mysort 0 -1 withscores -- 包含值及评分都显示出来
1) "zhangsan"
2) "20"
3) "lisi"
4) "60"
5) "jack"
6) "80"
127.0.0.1:6379>
127.0.0.1:6379> flushdb -- 清空当前库
127.0.0.1:6379> zadd mysort 100 a 200 b 300 c 400 d 500 e
(integer) 5
127.0.0.1:6379> zrange mysort 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
-- zrangebyscore key min max 可以通评分进行区间取值
127.0.0.1:6379> zrangebyscore mysort 100 300
1) "a"
2) "b"
3) "c"
-- zrangebyscore key min max  withscores 可以通评分进行区间取值并显示分数
127.0.0.1:6379> zrangebyscore mysort 100 300 withscores
1) "a"
2) "100"
3) "b"
4) "200"
5) "c"
6) "300"
127.0.0.1:6379>
-- zrevrangebyscore key max min 从大到小排序
127.0.0.1:6379> zrevrangebyscore mysort 500 200
1) "e"
2) "d"
3) "c"
4) "b"

-- zrevrangebyscore key max min withscores 从大到小排序并显示分数
127.0.0.1:6379> zrevrangebyscore mysort 500 200 withscores
1) "e"
2) "500"
3) "d"
4) "400"
5) "c"
6) "300"
7) "b"
8) "200"
127.0.0.1:6379>
-- zcount mysort min max 查询区间的元素个数
127.0.0.1:6379> zcount mysort 100 300
(integer) 3
127.0.0.1:6379>
-- zrank key value 查看集合中的排名 (排名从0开始)
127.0.0.1:6379> zrank mysort a
(integer) 0
127.0.0.1:6379> zrank mysort b
(integer) 1

-- 查看所有元素
127.0.0.1:6379> zrange mysort 0 -1 withscores
 1) "a"
 2) "100"
 3) "b"
 4) "200"
 5) "c"
 6) "300"
 7) "d"
 8) "400"
 9) "e"
10) "500"

删除zrem key value

127.0.0.1:6379> zrem mysort b-- 删除单个
(integer) 1
127.0.0.1:6379> zrem mysort a c-- 删除多个
(integer) 2

5、Redis生存时间

redis在实际应用中更多是用作缓存,解而缓存的数据一般都需要设置生存时间的 即:到期后数据销毁

5.1、设置生存时间

设置生存时间   expire key seconds

TTL 返回值:

大于0:剩余生存时间,单位为秒

负数: 数据已经被删除

127.0.0.1:6379> set k1 abc  -- 添加数据
OK
127.0.0.1:6379> expire k1 10 -- 设置当前k1的生存时间
(integer) 1
127.0.0.1:6379> ttl k1 -- 查看剩余生存时间
(integer) 3
127.0.0.1:6379> ttl k1
(integer) 2
127.0.0.1:6379> ttl k1
(integer) 1
127.0.0.1:6379> ttl k1 -- 返回负数数据销毁
(integer) -2
127.0.0.1:6379> get k1 -- 此时数据就销毁
(nil)

5.2、清除生存时间

清除生存时间 persist key

127.0.0.1:6379> set k1 123
OK
127.0.0.1:6379> expire k1 100 -- 设置生存时间
(integer) 1
127.0.0.1:6379> ttl k1 -- 查看生存时间
(integer) 51
127.0.0.1:6379> ttl k1
(integer) 50
127.0.0.1:6379> persist k1 -- 清除生存时间
(integer) 1
127.0.0.1:6379> ttl k1 -- 返回负数 表示生存的时间已清除,数据还存在
(integer) -1
127.0.0.1:6379> get k1
"123"

5.3、设置单位为毫秒

设置单为毫秒 pexpire key milliseconds

127.0.0.1:6379> set k1 123
OK
127.0.0.1:6379> pexpire k1 10000 -- 设置当前生存时间为10000毫秒(10秒)
(integer) 1
127.0.0.1:6379> ttl k1
(integer) 7
127.0.0.1:6379> ttl k1
(integer) 6
127.0.0.1:6379> ttl k1
(integer) 5

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文笔记:Ontology-enhanced Prompt-tuning for Few-shot Learning

论文来源&#xff1a;WWW 2022 论文地址&#xff1a;https://arxiv.org/pdf/2201.11332.pdfhttps://arxiv.org/pdf/2201.11332.pdf 论文代码&#xff1a;暂未公开 笔记仅供参考&#xff0c;撰写不易&#xff0c;请勿恶意转载抄袭&#xff01; Abstract 小样本学习旨在基于…

【数据结构】队列

1.啥是队列 2.队列实现 3.Queue接口的介绍以及队列的使用 4.相关队列的例子 &#xff08;1&#xff09;啥是队列 我们之前讲解了栈&#xff0c;栈和队列是有点区别的 我们说过栈是一种先进后出的数据结构&#xff0c;你可以把它想象成羽毛球筒&#xff1b;然而队列属于一种先…

一文读懂VMware虚拟化技术(含超融合)

1. 概述 1.1 为什么使用虚拟化 基于云服务器业务&#xff0c;很多公司不需要那么强大的服务器&#xff0c;将服务器虚拟化之后分开卖收益更高 比如租房&#xff0c;有一个100平面的房子&#xff0c;整租可以一个月房租8000&#xff0c;划分4个区域分这组&#xff0c;可以每个…

OAuth2.0

OAthu2.0参考链接1 OIDC&#xff08;OpenId Connect&#xff09;身份认证参考链接 一、定义 OAuth2.0是OAuth协议的延续版本&#xff0c;但不向前兼容OAuth 1.0(即完全废止了OAuth1.0)。 OAuth 2.0关注客户端开发者的简易性。要么通过组织在资源拥有者和HTTP服务商之间的被批…

《大数据分析-数据仓库项目实战》--阅读笔记

本文是《大数据分析-数据仓库项目实战》阅读笔记。 内容全部摘抄于本书。 算入门教材、文中有大量软件的安装步骤、对技术细节未过多涉及。 前言描述 大数据时代&#xff0c;需要考虑数据的采集、存储、计算处理等方式。 数据仓库建模方式&#xff1a;确定业务过程、声明粒度…

统计信号处理基础 习题解答6-10

题目&#xff1a; 我们继续习题6.9&#xff0c;考察在有色噪声环境下OOK系统信号选择的问题&#xff0c;令噪声 为零均值的WSS随机过程&#xff0c;ACF为 求PSD&#xff0c;并且对于 画出PSD的图形。和前一个系统一样&#xff0c;对于N50,求产生BLUE最小方差频率。提示&#x…

Espressif-IDE NameError: name ‘websocket‘ is not defined 解决方法

前言 ESP32 具有wifi 与 蓝牙&#xff0c;性价比比较高&#xff0c;一些嵌入式开发中经常用到&#xff0c;最近更新了一下 ESP32的开发环境&#xff0c; ESP32 开发工具下载地址&#xff1a;https://dl.espressif.cn/dl/esp-idf/ 下载文件&#xff1a;espressif-ide-setup-2.7…

HIve数仓新零售项目DWS层的构建(Grouping sets)模型

HIve数仓新零售项目 注&#xff1a;大家觉得博客好的话&#xff0c;别忘了点赞收藏呀&#xff0c;本人每周都会更新关于人工智能和大数据相关的内容&#xff0c;内容多为原创&#xff0c;Python Java Scala SQL 代码&#xff0c;CV NLP 推荐系统等&#xff0c;Spark Flink Kaf…

一文搞懂《前后端动态路由权限》

前言 本文主要针对后台管理系统的权限问题&#xff0c;即不同权限对应着不同的路由&#xff0c;同时侧边栏的路由也需要根据权限的不同异步生成。我们知道&#xff0c;权限那肯定是对应用户的&#xff0c;那么就会涉及到用户登录模块&#xff0c;所以这里也简单说一下实现登录的…

同花顺_代码解析_技术指标_S

本文通过对同花顺中现成代码进行解析&#xff0c;用以了解同花顺相关策略设计的思想 目录 SADL SAR SDLH SG_NDB SG_XDT SG_评分 SGSMX SG量比 SI SKDJ SRDM SRMI STIX SADL 腾落指数 1.ADL与指数顶背离时&#xff0c;指数向下反转机会大&#xff1b; 2.ADL与指…

合成孔径SAR雷达成像成(RDA和CSA)(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

(免费分享)基于springboot博客系统

源码获取&#xff1a;关注文末gongzhonghao&#xff0c;输入015领取下载链接 开发工具&#xff1a;IDEA,数据库mysql 技术&#xff1a;springbootmybatis-plusredis 系统分用户前台和管理后台 前台截图&#xff1a; 后台截图&#xff1a; package com.puboot.…

思泰克在创业板过会:拟募资4亿元,赛富投资、传音控股等为股东

11月18日&#xff0c;深圳证券交易所创业板披露的信息显示&#xff0c;厦门思泰克智能科技股份有限公司&#xff08;下称“思泰克”&#xff09;获得上市委会议通过。据贝多财经了解&#xff0c;思泰克的招股书于2022年5月5日获得创业板受理。 本次冲刺创业板上市&#xff0c;思…

西北工业大学算法理论考试复习

&#x1f600;大家好&#xff0c;我是白晨&#xff0c;一个不是很能熬夜&#x1f62b;&#xff0c;但是也想日更的人✈。如果喜欢这篇文章&#xff0c;点个赞&#x1f44d;&#xff0c;关注一下&#x1f440;白晨吧&#xff01;你的支持就是我最大的动力&#xff01;&#x1f4…

阿里云免费SSL证书过期替换

阿里云上有免费的SSL证书&#xff0c;但是好像一个账号全部免费的额度只有20张&#xff0c;一张可以用1年&#xff0c;意思是如果20年后你还需要SSL证书的话&#xff0c;那么你可能就得买了。 我的SSL证书过期了&#xff0c;网站能访问&#xff0c;但是浏览器总是说站点不安全&…

【蓝桥杯冲击国赛计划第7天】模拟和打表 {题目:算式问题、求值、既约分数、天干地支}

文章目录1. 模拟和打表1.1 定义2. 实例「算式问题」题目描述运行限制2.1 简单分析2.2 检查函数2.3 三重化二重3. 实例「求值」题目描述运行限制3.1 简单分析3.2 主函数4. 实例「既约分数」题目描述运行限制4.1 简单分析4.2 辗转相除法2.3 主函数5. 实例「天干地支」题目描述输入…

同花顺_代码解析_技术指标_T、U

本文通过对同花顺中现成代码进行解析&#xff0c;用以了解同花顺相关策略设计的思想 目录 TBR TRIX TRIXFS TWR UDL UOS TBR 新三价率 新三价率:100*上涨家数/(上涨家数下跌家数) MATBR1:TBR的M1日异同移动平均 MATBR2:TBR的M2日异同移动平均 1.指数仍处于下跌状态&a…

Java数据结构 | PriorityQueue详解

目录 一 、PriorityQueue 二、PriorityQueue常用方法介绍 三、 PriorityQueue源码剖析 四&#xff1a;应用&#xff1a;Top-K问题 一 、PriorityQueue 常用接口介绍 上文中我们介绍了优先级队列的模拟实现&#xff0c; Java集合框架中提供了PriorityQueue和PriorityBlocki…

2021 XV6 4:traps

目录 1.RISC-V assenbly 2.Backtrace 3.Alarm 1.RISC-V assenbly 第一个任务是阅读理解&#xff0c;一共有6个问题。 1.Which registers contain arguments to functions? For example, which register holds 13 in mains call to printf? 具体来说就是a0&#xff0c;a1几个…

Docker入门

目录 Docker的作用 Docker的核心概念 Docker安装 镜像命令 镜像下载 查看镜像 搜索镜像 删除镜像 容器命令 创建容器 列出容器 新建并启动容器(最常使用) 守护态运行 启动容器 终止容器 重启容器 进入容器 attach命令 exec命令&#xff08;最常使用&#xff09; 退出容器…