黑马点评DAY2|Redis基本操作

Redis客户端

命令行客户端

进入到redis的安装目录,可以看到redis-cli文件,这就是redis的命令行客户端,在安装redis时自带的。
在这里插入图片描述
使用方式如下

redis-cli [options] [commonds]

其中常见的options有:

  • -h 127.0.0.1 :指定要连接的redis节点的IP地址,默认为127.0.0.1(本机IP地址)
  • -p 6379 :指定要连接的redis节点的端口,默认是6379
  • -a 123321 : 指定redis的访问密码

其中commonds就是redis的操作命令,如:

  • ping:与redis做心跳测试,服务端正常就会返回 pong

但是一般情况下,commonds我们不需要输入,这时会进入一个持续的交互的控制台,可以不断地输入命令返回命令。

我们首先先进入到本机的6379端口,再去ping,但是发现没有权限,说明需要密码。

在这里插入图片描述
注意,这里crtl + c 先退出端口,再去用命令行输入密码,这个时候再去ping,收到pong。证明已经正常连接redis。
在这里插入图片描述
当然也可以先进入端口,再用AUTH+密码去输入密码
在这里插入图片描述
这时候也可以对redis进行操作,向里面存入键值对

127.0.0.1:6379> set name jack
OK
127.0.0.1:6379> set age 21
OK

取键值对

127.0.0.1:6379> get name
"jack"
127.0.0.1:6379> get age
"21"

图形化桌面客户端

可以在链接: https://github.com/lework/RedisDesktopManager-Windows/releases下载resp2022图形化桌面客户端。
第一次启动点集链接“redis”,再点连接设置,填写名字、地址、密码,测试连接,连接成功
在这里插入图片描述
连接成功发现redis中有16个数据库,在db0里面有我们刚存的两个键值对
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/e3835a6399b94efb91a235bff8a001e8.png
当然我们也可以选择其他的db,这里选择一号db,添加name:rose
在这里插入图片描述
再去命令行客户端选中db1,再get name得到rose

127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> get name
"rose"

Redis常见命令

Redis数据结构介绍

  • Redis是一种键值型数据库,键为String类型,值可以为很多类型:
    • String : helloworld
    • Hash :{name:“zonda”,age:25}
    • List :[A -> B -> C -> C]
    • Set :{A,B,C}
    • SortedSet : {A:1,B:2,C:3}
      以上五种为基本数据类型
    • GEO :{A:(120.3,30.5)}
    • BitMap : 0110110101001011101110
    • HyperLog : 0110110101001011101110
      以上三种为特殊数据类型

Redis命令行查看

查看命令行的两种方式(建议在学习的过程中边学边查边记):

  • 我们可以在redis的官方文档中查找到redis的所有命令行
    redis的官方文档
  • 当然我们也可以在命令行客户端中查找,输入help + @组名称就可以查到这个组的所有命令行,比如
127.0.0.1:6379> help @StringAPPEND key valuesummary: Append a value to a keysince: 2.0.0BITCOUNT key [start end]summary: Count set bits in a stringsince: 2.6.0BITFIELD key [GET type offset] [SET type offset value] [INCRBY type offset increment] [OVERFLOW WRAP|SAT|FAIL]summary: Perform arbitrary bitfield integer operations on stringssince: 3.2.0
...

通用命令

通用命令是对任何数据类型都适用的,常用的有:

  • keys:查看符合模版的所有key
    在命令行客户端输入help keys,根据解释可知keys可以找出对应模版的keys,这里的pattern是通配符:
127.0.0.1:6379> help keysKEYS patternsummary: Find all keys matching the given patternsince: 1.0.0group: generic

使用如下:

127.0.0.1:6379> keys *
1) "age"
2) "name"
127.0.0.1:6379> KEYS name
1) "name"
127.0.0.1:6379> keys a*
1) "age"

这种查询的方式底层还是用模糊查询进行查找的,效率并不高,当redis数据量达到一定规模比如数百万之后,这样的搜索会给服务器带来巨大负担,且redis的数据交互是单线程的,在查询数据的时候无法执行其他命令,redis的服务就会被阻塞,所以生产环境不建议使用keys查询数据。不建议再生产环境使用。

  • del:删除一个指定的key
    DEL key [key …]
    只要
127.0.0.1:6379> help delDEL key [key ...]summary: Delete a keysince: 1.0.0group: generic

批量存入三组键值对,然后再删除。会返回(integer) 2,即被删除的键值对的个数。

127.0.0.1:6379> MSET k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> keys *
1) "k1"
2) "k2"
3) "age"
4) "k3"
127.0.0.1:6379> del k1 k2
(integer) 2
127.0.0.1:6379> keys *
1) "age"
2) "k3"
  • exists:判断一个键是否存在
127.0.0.1:6379> help existsEXISTS key [key ...]summary: Determine if a key existssince: 1.0.0group: generic

返回的也是存在的个数

127.0.0.1:6379> MSET name zonda
OK
127.0.0.1:6379> exists name age
(integer) 2
127.0.0.1:6379> exists name
(integer) 1
  • expire:给一个key设置有效期,有效期到期时该key会被自动删除。因为Redis是基于内存的数据库,如果每一条数据都不设置存在时间,时间久了会内存不足。比如短信验证码的有效期,可以设置存在时间,到时间就自动删除。大大节省了redis的内存空间。
127.0.0.1:6379> help expireEXPIRE key secondssummary: Set a key's time to live in secondssince: 1.0.0group: generic
  • ttl:查看一个key的剩余有效时间,和expire配合着使用。
127.0.0.1:6379> help ttlTTL keysummary: Get the time to live for a keysince: 1.0.0group: generic

这里注意:当一个键到期了,查询该键会返回-2;而并没有设置有效时长的键的有效时长为-1,表示永久有效。所以一般建议在给redis存入数据的时候都设置一个有效期。

127.0.0.1:6379> keys *
1) "age"
2) "name"
127.0.0.1:6379> expire age 20
(integer) 1
127.0.0.1:6379> ttl age
(integer) 14
127.0.0.1:6379> ttl age
(integer) 10
127.0.0.1:6379> ttl age
(integer) -2
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> ttl age
(integer) -2
127.0.0.1:6379> ttl name
(integer) -1

String类型

String类型,也就是字符串类型,是Redis中最简单的存储类型。
Redis中的字符串类型分为三种,这三种字符串底层编码不一样,占用的内存空间也不一样,但本质都是字符数组,最大占用内存空间为512m。三种分别为:

  • string:普通字符串
  • int:整数类型,可以自增、自减操作
  • float:浮点类型,可以自增、自减操作

String的常见命令:

  • set:添加或者修改一个键值对
  • get:根据key获取String类型的value
  • mset:批量添加多个String类型的键值对
127.0.0.1:6379> help msetMSET key value [key value ...]summary: Set multiple keys to multiple valuessince: 1.0.1group: string
  • mget:批量获取多个string类型的value
127.0.0.1:6379> help mgetMGET key [key ...]summary: Get the values of all the given keyssince: 1.0.0group: string
  • incr:让一个整型的key自增1
127.0.0.1:6379> help incrINCR keysummary: Increment the integer value of a key by onesince: 1.0.0group: string
  • incrby:可以给value自增并指定步长,当然也可以将步长改为负数自减。
127.0.0.1:6379> help incrbyINCRBY key incrementsummary: Increment the integer value of a key by the given amountsince: 1.0.0group: string
  • incrbyfloat:对于浮点数的自增以及指定步长
127.0.0.1:6379> help incrbyfloatINCRBYFLOAT key incrementsummary: Increment the float value of a key by the given amountsince: 2.6.0group: string
  • setnx:添加一个String类型的键值对,前提是这个键值对不存在,否则不执行。而set会把已经存在的键的值给覆盖掉。
127.0.0.1:6379> help setnxSETNX key valuesummary: Set the value of a key, only if the key does not existsince: 1.0.0group: string
  • setex:设置String类型的键值对,并制定有效期
127.0.0.1:6379> help setexSETEX key seconds valuesummary: Set the value and expiration of a keysince: 2.0.0group: string

Key的层级格式

redis中没有表的概念,我们该如何区分不同类型的key呢?
就比如一个用户的id为1,恰好有一个商品的id也为1.该如何区分呢?
解决办法:可以用多个单词形成层级结构,多个单词之间用‘ : ’隔开,比如:
项目名:业务名:类型:id
那么区分用户和商品id,就可以用:

  • user的id:heima:user:1
  • product的id: heima:product:1

但是这样解决了key的问题,但是像user、product这种键对应的值在java中都是对象,我们该如何存储到值的位置呢?
解决办法在redis中,string的值就是字符串,java对象虽然不是字符串,但是可以序列化为JSON的风格来存储。比如一下这种形式:
在这里插入图片描述
我们向redis中存入四个兼职对

127.0.0.1:6379> set heima:user:1 {"id":1, "name":"Jack", "age": 21}
Invalid argument(s)
127.0.0.1:6379> set heima:user:1 '{"id":1, "name":"Jack", "age": 21}'
OK
127.0.0.1:6379> set heima:user:2 '{"id":2, "name":"Rose", "age": 18}'
OK
127.0.0.1:6379> set heima:product:1 '{"id":1, "name":"小米11", "price": 4999}'
OK
127.0.0.1:6379> set heima:product:2 '{"id":2, "name":"荣耀6", "price": 2999}'
OK

在图形客户端中可以看出多出了一个heima文件夹,里面存储了数据的层级结构,将数据自然地分离。
在这里插入图片描述

Hash类型

Hash类型也叫散列,其value是一个无序字典,类似于Java中的HashMap结构。相比于String类型存储的JSON化的value,当需要修改某个字段的时候很不方便:
在这里插入图片描述
而Hash结构的value又是一个表,表里为field-value的键值对,可以针对单个字段CRUD,所以相比之下,Hash结构更加灵活:
在这里插入图片描述
Hash的常见命令:
基本上都是在String命令的前面加上H

  • hset:添加或修改hash类型key的field的值
127.0.0.1:6379> help hsetHSET key field value [field value ...]summary: Set the string value of a hash fieldsince: 2.0.0group: hash
  • hget:获取一个hash类型key的field的值
192.168.101.65:6379> help hgetHGET key fieldsummary: Get the value of a hash fieldsince: 2.0.0group: hash
  • hmset:批量新增多个hash类型的key的field的值
192.168.101.65:6379> help hmsetHMSET key field value [field value ...]summary: Set multiple hash fields to multiple valuessince: 2.0.0group: hash
  • hmget:批量获取多个hash类型的key的field的值
192.168.101.65:6379> help hmgetHMGET key field [field ...]summary: Get the values of all the given hash fieldssince: 2.0.0group: hash
  • hgetall:获取一个hash类型的key中的所有的field和value(可以理解为hashmap中的entryset)
192.168.101.65:6379> help hgetallHGETALL keysummary: Get all the fields and values in a hashsince: 2.0.0group: hash
  • hkeys:获取yigehash类型的key中的所有field
  • hvals:获取yigehash类型的key中的所有value
    上面这俩可以理解成java中hashmap中的keys()和values()方法
  • hincrby:让一个hash类型key的字段值自增长并指定步长
192.168.101.65:6379> help hincrbyHINCRBY key field incrementsummary: Increment the integer value of a hash field by the given numbersince: 2.0.0group: hash
  • hsetnx:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行。
192.168.101.65:6379> help hsetnxHSETNX key field valuesummary: Set the value of a hash field, only if the field does not existsince: 2.0.0group: hash

List类型

Redis的List类型与Java中的LInkedList类似,可以看做是一个双向链表,既可以支持正向检索,也可以支持反向检索。这种数据结构常用来保存对顺序有一定需求的场景,比如朋友圈点赞,评论都是有序的
温习一下LinkedList的几大特征:

  • 有序
  • 插入和删除速度快
  • 可以重复
  • 支持正向和反向检索,但查询速度一般

List的常见命令:

  • lpush:向列表左侧插入一个或者多个元素
192.168.101.65:6379> help lpushLPUSH key element [element ...]summary: Prepend one or multiple elements to a listsince: 1.0.0group: list
  • lpop:移除并返回左侧第一个和元素,没有则返回nil
192.168.101.65:6379> help lpopLPOP key [count]summary: Remove and get the first elements in a listsince: 1.0.0group: list
  • rpush:向列表右侧插入一个或者多个元素
192.168.101.65:6379> help rpushRPUSH key element [element ...]summary: Append one or multiple elements to a listsince: 1.0.0group: list
  • rpop:移除并返回列表右侧的第一个元素
192.168.101.65:6379> help rpopRPOP key [count]summary: Remove and get the last elements in a listsince: 1.0.0group: list
  • lrange:返回一段角标范围内的所有元素,不会删除元素,知识查询
192.168.101.65:6379> help lrangeLRANGE key start stopsummary: Get a range of elements from a listsince: 1.0.0group: list

如下图所示:lrange key 1 2
在这里插入图片描述

  • blpop和brpop:与lpop和rpop相比,在没有元素的时候不会立即返回nil,而是等待指定时间(类似于阻塞队列),如果还是没有元素再返回nil。
192.168.101.65:6379> help blpopBLPOP key [key ...] timeoutsummary: Remove and get the first element in a list, or block until one is availablesince: 2.0.0group: list

Set类型

Redis的Set结构类似于Java中的HashSet,可以看做是一个value为null的HashMap。因为也是一个Hash表,因此具备与HashSet类似的特征:

  • 无序
  • 元素不可重复
  • 查找快
  • 支持交集、并集、差集等功能(所以适用于交友型的应用)

Set的常见命令:
下面的这几个是单集合的操作

  • SADD:向set元素中添加一个或者多个元素(可一次插入一个或者多个)
    192.168.101.65:6379> help saddSADD key member [member ...]
    summary: Add one or more members to a set
    since: 1.0.0
    group: set
  • SREM:移除set中的指定元素(可一次移除一个或者多个)
192.168.101.65:6379> help saddSADD key member [member ...]summary: Add one or more members to a setsince: 1.0.0group: set
  • scard:返回set集合中元素的个数
192.168.101.65:6379> help scardSCARD keysummary: Get the number of members in a setsince: 1.0.0group: set
  • SISMEMBER:判断一个元素是否存在于set集合中
192.168.101.65:6379> help sismemberSISMEMBER key membersummary: Determine if a given value is a member of a setsince: 1.0.0group: set
  • SMEMBERS:获取set中的所有元素
 192.168.101.65:6379> help smembersSMEMBERS keysummary: Get all the members in a setsince: 1.0.0group: set

下面的这几个是多集合的操作

  • SINTER:求key1和key2的交集
192.168.101.65:6379> help sinterSINTER key [key ...]summary: Intersect multiple setssince: 1.0.0group: set
  • SDIFF:求key1和key2的差集
192.168.101.65:6379> help sdiffSDIFF key [key ...]summary: Subtract multiple setssince: 1.0.0group: set
  • SUNION:求key1和key2的并集
192.168.101.65:6379> help sunionSUNION key [key ...]summary: Add multiple setssince: 1.0.0group: set

SortedSet类型

Redis是一个可排序的Set集合,与Java的TreeSet在功能上相似,但是底层结构相差很大,因为TreeSet底层是通过红黑树来实现的。SortedSet中的每一个元素都带一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表加Hash表。因为具有排序的功能,因此常用于实现排行榜这类功能
因此SortedSet具备的底层的特性有:

  • 可排序(跳表)
  • 元素不重复(为Set)
  • 查询速度快(因为有Hash表)
    SortedSet的常见命令:
  • zadd:添加一个或多个元素到SortedSet,如果已经存在则更新其score值
192.168.101.65:6379> help zaddZADD key [NX|XX] [GT|LT] [CH] [INCR] score member [score member ...]summary: Add one or more members to a sorte its score if it already existssince: 1.2.0group: sorted_set
  • zrem:删除sortedset中的一个或多个元素。
192.168.101.65:6379> help zremZREM key member [member ...]summary: Remove one or more members from a sorted setsince: 1.2.0group: sorted_set
  • zscore:获取sortedset中指定元素的score值
192.168.101.65:6379> help zscoreZSCORE key membersummary: Get the score associated with the given member in a sorted setsince: 1.2.0group: sorted_set
  • zrank:获取sortedset中指定元素的排名
192.168.101.65:6379> help zrankZRANK key membersummary: Determine the index of a member in a sorted setsince: 2.0.0group: sorted_set
  • zcard:获取sortedset中的元素的个数
192.168.101.65:6379> help zcardZCARD keysummary: Get the number of members in a sorted setsince: 1.2.0group: sorted_set
  • zcount:统计score值在给定范围内的所有元素的个数
192.168.101.65:6379> help zcountZCOUNT key min maxsummary: Count the members in a sorted set with scores within the given valuessince: 2.0.0group: sorted_set
  • zincrby:让SortedSet中的指定元素的值自增,步长为指定的increment的值。
192.168.101.65:6379> help zincrbyZINCRBY key increment membersummary: Increment the score of a member in a sorted setsince: 1.2.0group: sorted_set
  • zrange:按照score排序后,获取指定排名范围内的元素。
192.168.101.65:6379> help zrangeZRANGE key min max [BYSCORE|BYLEX] [REV] [LIMIT offset count] [WITHSCORES]summary: Return a range of members in a sorted setsince: 1.2.0group: sorted_set
  • zrangebyscore:按照score排序之后,按照指定score范围内的元素。
192.168.101.65:6379> help zrangebyscoreZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]summary: Return a range of members in a sorted set, by scoresince: 1.0.5group: sorted_set
  • zdiff、zinter、zunion:求交集、并集、差集

注意:以上的排序默认都是升序排序,如果需要降序则在命令的z后面加rev即可。

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

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

相关文章

电量监测与电量计基础知识

硬件之路学习笔记 ​-----前文导读----- ①、公众号主页点击发消息 ②、点击下方菜单获取系列文章 -----本文简介----- 主要内容包括: ①:简介 ②:省成本方式-电阻分压 ③:精确方式-电量计与阻抗跟踪技术 ----- 正文 ----…

JavaWeb--jquery篇

概述 jQuery是一个快速、简洁的JavaScript框架,是一个优秀的JavaScript代码库(框架)于2006年1月由John Resig发布。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动…

2229:Sumsets

网址如下&#xff1a; OpenJudge - 2229:Sumsets 这题不是我想出来的 在这里仅做记录 代码如下&#xff1a; #include<iostream> using namespace std;const int N 1000000000; int dp[1000010]; int n;int main() {cin >> n;dp[0] 1;dp[1] 1;for (int i 2…

前端面试题7(单点登录)

如何实现单点登录 单点登录&#xff08;Single Sign-On&#xff0c;简称SSO&#xff09;是一种允许用户在多个应用系统中只需登录一次&#xff0c;就可以访问所有相互信任的应用系统的认证技术。实现前端单点登录主要依赖于后端的支持和一些特定的协议&#xff0c;如OAuth、Ope…

无法下载cuda

cuda下载不了 一、台式机电脑浏览器打不开cuda下载下面二、解决办法 一、台式机电脑浏览器打不开cuda下载下面 用360、chrome、Edge浏览器都打不开下载页面&#xff0c;有的人说后缀com改成cn&#xff0c;都不行。知乎上说是网络问题&#xff0c;电信换成换成移动/联通的网络会…

Selenium 切换 frame/iframe

环境&#xff1a; Python 3.8 selenium3.141.0 urllib31.26.19说明&#xff1a; driver.switch_to.frame() # 将当前定位的主体切换为frame/iframe表单的内嵌页面中 driver.switch_to.default_content() # 跳回最外层的页面# 判断元素是否在 frame/ifame 中 # 126 邮箱为例 # …

无人机云台类型及作用

无人机云台主要分为三种类型&#xff1a; 单轴云台&#xff1a;仅支持单向旋转&#xff0c;适合拍摄平滑的延时摄影和全景照片。 双轴云台&#xff1a;支持水平和垂直旋转&#xff0c;可用于拍摄流畅的视频和运动物体。 三轴云台&#xff1a;全面支持所有旋转轴&#xff0c;…

医院陪诊系统开发的关键技术与挑战

随着医疗服务需求的不断提升&#xff0c;传统的医院服务模式面临着巨大的压力和挑战。为了提升患者的就医体验和医疗服务的效率&#xff0c;医院陪诊系统应运而生。本文将探讨医院陪诊系统开发的关键技术与挑战&#xff0c;并结合具体的技术代码进行分析。 一、医院陪诊系统的…

悠律凝声环开放式耳机强者现身:集颜值和创新技术于一体的杰作

随着技术的飞速发展&#xff0c;蓝牙耳机已经成为人们生活中不可缺少的一环&#xff0c;外观、音质以及实用性已经成为人们在购买时最主要的考虑因素。悠律凝声环RingBuds Pro开放式蓝牙耳机&#xff0c;凭借其特有的轻奢时尚外观&#xff0c;斩获2024年度MUSE缪斯创意奖金奖&a…

Kotlin协程使用详解

协程是什么 协程是一种编程思想,并不局限于特定的语言。协程是轻量级的线程,基于线程池API,通俗的来说,就是官方提供的线程框架。协程的调度完全由用户控制。协程拥有自己的寄存器上下文和栈。当我们在了解协程的时候,不可避免的会跟线程、进程作比较作分析,下面来贴个图…

数据可视化之智慧城市的脉动与洞察

在数字化转型的浪潮中,城市作为社会经济发展的核心单元,正经历着前所未有的变革。城市数据可视化大屏看板作为这一变革中的重要工具,不仅极大地提升了城市管理效率,还为公众提供了直观、全面的城市运行状态视图,成为智慧城市建设不可或缺的一部分。本文将深入探讨以“城市…

网安小贴士(9)网络解密

一、前言 网络解密技术的发展是一个不断进化的过程&#xff0c;它与加密技术的进展紧密相连。 二、定义 网络解密&#xff08;Network Decryption&#xff09;通常指的是在计算机网络环境中&#xff0c;将加密的数据转换回其原始可读格式的过程。这个过程需要使用正确的密钥…

ctfshow-web入门-文件包含(web88、web116、web117)

目录 1、web88 2、web116 3、web117 1、web88 没有过滤冒号 : &#xff0c;可以使用 data 协议&#xff0c;但是过滤了括号和等号&#xff0c;因此需要编码绕过一下。 这里有点问题&#xff0c;我 (ls) 后加上分号发现不行&#xff0c;可能是编码结果有加号&#xff0c;题目…

【反悔堆 优先队列 临项交换 决策包容性】630. 课程表 III

本文涉及知识点 贪心 反悔堆 优先队列 临项交换 Leetcode630. 课程表 III 这里有 n 门不同的在线课程&#xff0c;按从 1 到 n 编号。给你一个数组 courses &#xff0c;其中 courses[i] [durationi, lastDayi] 表示第 i 门课将会 持续 上 durationi 天课&#xff0c;并且必…

WordPress网站违法关键词字过滤插件下载text-filter

插件下载地址&#xff1a;https://www.wpadmin.cn/2025.html 插件介绍 WordPress网站违法关键词字过滤插件text-filter由本站原创开发,支持中英文关键字自动替换成**号&#xff0c;可以通过自定义保存修改按钮增加“预设关键字”&#xff0c;也可以导入定义好的txt文本形式的关…

实现模型贴图的移动缩放旋转

技术&#xff1a;threejscanvasfabric 效果图&#xff1a; 原理&#xff1a;threejs中没有局部贴图的效果&#xff0c;只能通过map 的方式贴到模型上&#xff0c;所以说换一种方式来实现&#xff0c;通过canvasfabric来实现图片的移动缩放旋转&#xff0c;然后将整个画布以map…

数据集 | 人脸公开数据集的介绍及下载地址

本文介绍了人脸相关算法的数据集。 1.人脸数据集详情 1.1.Labeled Faces in the Wild (LFW) 论文 下载地址&#xff1a;LFW Face Database : Main (umass.edu) 是目前人脸识别的常用测试集&#xff0c;其中提供的人脸图片均来源于生活中的自然场景&#xff0c;因此识别难度会…

DDR的拓扑与仿真

T型拓扑 vs Fly-by 由于T型拓扑在地址、命令和时钟都是同时到达每个DDR芯片&#xff0c;所以同步的切换噪声会叠加在一起&#xff0c;DDR越多这个信号上叠加的噪声越大&#xff0c;T型拓扑的优点是地址、命令和时钟都是同时到达&#xff0c;所以不需要做写均衡Write leveling。…

Node.js 生成vue组件

在项目根目录下创建 create.js /*** 脚本生成vue组件* 主要是利用node自带的fs模块操作文件的写入* ===========================================* 准备步骤:* 1.输入作者名* 2.输入文件名* 3.输入菜单名* 4.输入文件地址* ============================================* 操…

【3D->2D转换(1)】LSS(提升,投放,捕捉)

Lift, Splat, Shoot 这是一个端到端架构&#xff0c;直接从任意数量的摄像头数据提取给定图像场景的鸟瞰图表示。将每个图像分别“提升&#xff08;lift&#xff09;”到每个摄像头的视锥&#xff08;frustum&#xff09;&#xff0c;然后将所有视锥“投放&#xff08;splat&a…