Redis学习笔记:数据结构和命令

2023-11-06

本文是自己的学习笔记。主要参考资料如下:
马士兵

4、Redis的五大数据类型

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)。

1.1、String

1.1.1、String 类型的命令

  1. 对value追加字符串:append key value。比如说,原有key -> “v”,append key hello,则key -> “vhello”。
  2. 获取字符串的长度:strlen key
  3. 获取字符串的某一部分:getrange key start end,start和end都是闭区间。比如"hello’',执行命令getrange key 0 3可以得到"hell"。
  4. 对替换字符串某个字符替换成指定字符串:setrange key start value。比如"hello",执行setrange key 1 xx可以得到"hxxllo"。

1.1.2、存储对象

使用json格式存储对象,比如set user1 {name:name1 age:1}

或者使用多个key存储对象的属性,比如mset user1:name name1 user1:age 1

后者与其前者相比,省略了取值后解析的逻辑。

1.2、List

redis中没有空链表的概念,如果一个链表的元素被清空,那么这个链表和对应的key也跟着消失。

redis中List的结构是链表不是数组,所以对于表头和表尾操作要比表中间的操作快很多。因为redis提供了链表和链尾的push和pop操作,所以我们可以将其当做栈或者队列使用。

List的命令支持链尾和链头操作,链头的有关命令带有l,比如在链头push一个元素lpush list value;链尾有关的命令带有r,比如链尾push一个元素rpush list value。所以链表的命令有l就多半有r,下面就只介绍其中一种,不重复介绍了。

1.2.1、List基本命令

  • 存储:lpush list value,向list左端中存入value,这里可以一次性存入多个值;rpush list value,向list右端存入value,可以一次性存入多个值。
  • 读取链表中的一段:和存储不一样,这个只有从链表左边开始读取的命令lrange list start end。注意是从链表左边开始读取,我们可以看示例。
    在这里插入图片描述
  • 通过下标获取链表中的某个值:读取第index个元素的值。lindex list index
  • 获取链表长度:llen list
  • 移除链表中队尾或队头的元素:移除操作有左右之分,可以移除左边第一个元素,也可以移除右边第一个元素。lpoprpop
  • 移除链表中值为value的元素:lrem list count value,移除链表中值为value的元素,count是移除的个数。移除过程是从左往右移除元素,不是从右往左。下面是示例。

在这里插入图片描述

  • 裁剪链表:ltrim list start end只保留链表中start到end中的元素,两者都是闭区间。

在这里插入图片描述

  • 将一个列表的队尾元素移除,并将该值加入到另一个列表的队头:rpoplpush source dest

  • 将列表中的下标为index的元素的值替换成value:lset list index value,如果index越界,或者list不存在该命令报错。

  • 判断列表是否存在:exists list,存在返回1,不存在返回0。redis没有空链表的概念,链表元素被排空了,该链表则是不存在的状态
    在这里插入图片描述

  • 向某个元素的之前/之后插入一个元素:linsert list before/after pivot value,向值为pivot的元素之前或者之后插入一个置为value的元素。redis会从左往右查找,在第一个值为pivot的元素附件插入。


1.2.2、List高级命令

  • 阻塞式pop:blpop list timeout,对listpop操作,但如果当前列表为空(链表不存在也当它是一个空链表),或者其他的原因导致没有元素pop,那该操作会阻塞线程timeout秒,中途有元素可pop就pop元素提前结束阻塞。timeout设为0则无限阻塞线程。
    下面就在一个空链表链表中阻塞式pop,然后开启另一个线程在链表中pop一个元素,最后可以看到阻塞提前终止。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述




1.3、Set

1.3.1、Set基本命令

  • 存储:sadd set value,可以向一个set中一次存储多个value,操作不具有原子性,可以一些失败一些成功。
  • 读取一个set的所有元素:smembers set
  • 判断set中是否有这个值:sismember set value,返回1存在,返回0不存在。
  • 获取set的大小:scard set
  • 删除元素:srem set value,可一次性删除多个值,也不具有原子性。
  • 随机从集合中拿出n个元素:srandmember set n
  • 随机从集合中删除一个元素:spop set
  • 将集合中的一个元素移动到另一个集合:smove source dest value,非原子性,只要从souce中取出了元素,哪怕没有dest没有添加成功,也返回1。
  • 集合的交集、并集和差集:sdiff set1 set2sunion set1 set2sinter set1 set2,上面三个指令都可以有多个参数
  • 将交集、并集和差集存储:上面的命令指示返回计算结果,这个命令是将结果存入指定的key。在以上的命令后加一个store即可。比如sdiffstore newKey set1 set2
    在这里插入图片描述



1.4、HashMap

redis里的HashMap其实Java里面的Map<String, Map<String, String>>。key String类型,但是对应的value是Map类型。

1.4.1、HashMap基本命令

  • 存储:hset map key value

  • 获取:hget map key

  • 获取或读取多个键值对:hmset map key valuehmget map key

  • 获取一个map里的所有键值对:hgetall map

  • 删除map里的键值对:hdel map key,可以删除多个key,非原子操作。

  • 获取map的长度:hlen map

  • 判断某个键值对是否存在:hexists map key

  • 获取map中所有的key,或者所有的value:hkeys maphvals map

  • 给一个value增加数字:
    map key increment。比如有这样一个map,map1 -> key1:1我们可以对key1```的值自增。
    在这里插入图片描述

  • 与setex和setnx功能一样的指令:hsetex map key valuehsetnx map key value



1.5、ZSet(有序集合)

有序集合是在集合的一个升级。其他部分和集合一样,但是value部分多加了一个score用于排序。


1.5.3、ZSet的指令

  • 存储:zadd set score key,score是分数,系统根据这个值给key排序。
  • 按默认顺序获取多个值:zrange set start end,闭区间。
  • 按默认排序获取score在一定区间的值:zrangebyscore set min max [withscore],获取set中,score在[min, max]中的元素,默认是闭区间,可以写成(min来代表开区间。我们可以使用-inf和+inf分别代表负无穷大和正无穷大。如果带上后面的参数withscore,那返回结果不止返回key,还返回对应的score。

在这里插入图片描述

  • 按逆序获取元素:与zrangebyscorezrange一样,只要将range换成revrange即可。
  • 删除元素:zrem set key,可以删除多个key,非原子操作。
  • 查看长度:zcard set
  • 查看score在某个区间的值:zcount set min max,默认闭区间,同样可以使用(min表示开区间。
  • 查看keyscorezscore zset key
  • 查看key的的名次:查看默认排序下的名次,zrank zset key;查看倒序下的名词,revrank zset key
  • keyscore自增或自减:zincrby zset increment key
  • 集合的计算:和set的交集,并集,差集计算一样,只不过指令由s变成z,比如sunionstore set1 set2对应zunionstore zset1 zset2



1.6、BitMap

1.6.1、BitMap的数据结构

BitMap有些类似于HashMap,但它只能存储某个元素是0还是1,这个数据结构的优点是极大地节省空间。

列举一个应用场景,用一个数据结构记录这节课哪些人到,哪些人没到。

此时对于一个人来说要么到要么不到,不到就可以是0表示,到就是1表示。这种场景就适合BitMap。假设这个班有8个人,那么对应的BitMap就是一个bit[8]的空间。如下图所示。
在这里插入图片描述


1.6.2、BitMap的命令

  • set:setbit key offset valuevalue只能是0或1,其他值会报错。offset相当于是index
  • get: getbit key offset
  • 统计value为1的个数:bitcount key start endstartend是闭区间,忽略startend则不计范围。这个命令关于范围的参数非常容易让人误解。比如bitcount bitmap 0 2很容易让人以为是统计bitmap[0]bitmap[2]总计三个比特位上,值为1的个数,但其实这个错误的。
    这里的0 2的单位是byte不是bit,一个byte是8个bit,所以这命令的含义是统计bitmap[0]bitmap[23]总计3个byte位,24bit位上值为1的个数,下面可看例子。
    我将0, 1, 8位设为1,bitcount bitmap 0 0统计前8位,即[0-7],所以返回结果为2;
    bitcount bitmap 0 1统计前16位,即[0 15],所以返回结果为3。
    在这里插入图片描述

1.6.3、布隆过滤器(Bloom Filter)

BitMap还能引申出一个新的数据模型叫布隆过滤器(Bloom Filter),他可以用来模糊判断一个元素是否在集合中。

之所以说是模糊判断是因为如果布隆过滤器告诉你一个元素不在集合中,那这个元素肯定不在,但如果布隆过滤器告诉你在,那么就可能在可能不在。

那为什么不用set呢,能明确知道在还是不在。布隆过滤器的优势就是极小的存储空间,更适合一些场景。下面来看看数据结构。

1.6.3.1、数据结构

BitMap类似,它是一个bit类型的数组。如果bloomFilter[4] = 1,那表示哈希值为4的元素存在于集合中。

但是元素之间可能存在哈希冲突,比如说下图。CD的哈希值一样,他们指向着同一个位置。那么bloomFilter[5] = 1只能说明哈希值为5的元素在集合中,可能是C可能是D,可能都存在,反正至少存在一个。

但是不能明确知道C或者D在不在集合中。

但如果bloomFilter[5] = 0,那CD一定不在集合中。
请添加图片描述

1.6.3.2、应用场景

所以布隆过滤器可以快速判定一个元素不在元素中,并且空间极小。

他可以应用在缓存穿透中。

一般的模型当中,一次查询会优先到redis中查询,如果没有查询到才进行mysql查询。但如果mysql中也没有对应数据,那这两次查询就无功而返。

在这里插入图片描述
一般情况下以上查询没什么问题。但在高并发的场景下,如果有大量请求想查询同一字段,而这一字段又不存在,那就会在短时间内进行大量的mysql查询,造成数据库崩溃,这就是缓存穿透。

我们可以在查询前加入布隆过滤器。如果布隆过滤器查询没有数据,那就不用麻烦缓存和数据库了;如果有,那才继续查询缓存和数据库。

在这里插入图片描述


1.7、HyperLogLog

1.7.1、应用场景

一个大型网站需要统计每天的UV数据(UV,Unique-Visitor),即每天的用户访问量,但是得去重,同一个用户的多次访问只能算成一次。

HyperLogLog就是这种数据量很大,可以去重的数据结构。虽然它的去重有误差,不是百分百的去重,标准误差是0.81%,但这样的精准度已经能满足需求了。比如说实际值是100.81万,而统计值是100W,在百万数量级前,0.81万是可以忽略的。

最重要的一点是,相比于使用set来统计数据,它所需要的空间几乎可以忽略不计。

下面是对比图。

在这里插入图片描述

1.7.2、命令

  • 添加:pfadd key element,可以一次性添加多个。
  • 计数:pfcount key
  • 合并集合:pfmerge destKey sourceKey

1.7.3、原理

HyperLogLog基于概率论的伯努利实验,并结合极大似然估算方法,并做了分桶优化,所以占用空间才这么小。


1.8、GEO

GEO 3.2以后提供了GEO(地理信息定位)功能,支持存储地理信息用来实现诸如摇一摇附近位置等基于地理信息的功能。

地理信息使用二维的的经纬度表示。经度范围(-180,180),维度范围(-90,90)。

业界比较通用的地理距离计算排序算法是GeoHash算法,redis也是用该算法。


1.8.1、命令

  • 添加:geoadd key longtitude latitude location。在一个key当中添加经度和纬度,然后是地名。比如geoadd map 123.43 39.42 Beijinggeoadd map 132.49 49.29 Hebei
  • 获取位置:geopos key location,可一次性获取多个location的经纬度。请添加图片描述
  • 经纬度信息转成hash:geohash key location,可一次性转换多个。
  • 请添加图片描述



2、Redis全局命令

2.1、获取数据库大小

有一个命令是keys *,后面的*可以换成其他的正则表达式。这个命令用来显示符合正则表达式的所有键值对。请添加图片描述
但是不推荐使用这个命令,因为键值对很多的时候,这个命令会打印很多数据。比如说有十万条数据,那就要打印十万行数据,这个非常消耗内存。如果想知道数据库大小,可以使用dbsize命令,它是直接读取计数器,时间是O(1)。

请添加图片描述

2.2、设置有效时间

有下面三种设置有效时间的方式。

给指定key设置过期时间:expire key seconds,seconds秒后指定key失效。也可以指定时间单位是毫秒,pexpire key millionseconds.

另外就是设置key在什么时候失效expireat key timestamp.

查看当前key还剩多少有效时间:ttl key。如果正数,表示还有x秒后就过期;返回-1,表示永远不会过期;返回-2表示已经过期。

2.2.1、设置有效时间需要注意的坑

当对一个键值对设置时间后,不要去修改它的value(可以用rename修改key)。一旦修改后之前设置的过期时间会自动失效。

比如下面就是对一个键值对设置过期时间,然后改变它的value,最后会发现过期时间失效了。
请添加图片描述

2.1、存储与读取键值对

  1. 存储和读取:get和set。
  2. 批量读取和批量设值:mget和mset,比如mset key1 value key2 value2,这里就是设置了两个键值对,key1 -> value1key2 -> value2
  3. 先读取后写入:getset key value。该指令返回key原有的值,如果这个key为null或者value为null,那指令会返回null。之后key的value会刷新成新的值。
  4. 清除指定键值对:move key
  5. 查询当前数据库是否存有指定的key:exists key,返回1存在,返回0则不存在。
  6. 列出当前数据库中的所有key:key *
  7. 查看当前key的存储的数据类型:type key
  8. 重命名key:rename key newKey、需要注意的是,如果新的key是已经存在的,那他会覆盖已经存在的那个key。所以重命名最好使用renamenx key newkey,如果newkey没有被使用,那修改成功返回1;如果newkey已经被使用,修改失败,返回0。

2.1.1、高级的set和get

  1. 如果key存在(一个键值对过期了也算是不存在)则set(并且可以设置过期时间),不存在就不set:setex key n value。n是过期时间,单位是秒。

  2. 如果key不存在才set,存在就set失败:setnx key n value

  3. 批量的msetexmsetnx:他们是原子性的操作,只要有一个key没设值成功,那所有的key都不会设值成功。

  4. 自增和自减:incr keydecr key。key类型可以是字符串。

  5. 加减n:incrby key ndecrby key n

  6. 先get,然后立刻set新值:getset key value。 这个效果和set一样,不同的是该命令会返回以前的值。

  7. 清空当前数据库的所有数据:flushdb

  8. 清空所有数据库的所有数据:flushall

  9. 查看当前数据库的大小:dbsize,这是查看当前数据库,不是查看所有数据库。

  10. 选择数据库:select n,选择第几个数据库,从0开始编号,默认选择第0个数据库,总共有16个数据库。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redis学习笔记:数据结构和命令 的相关文章

  • StackExchange.Redis Get 函数抛出 TimeoutException

    我在用着StackExchange Redis与 C 和StackExchangeRedisCacheClient Get函数抛出以下异常 myCacheClient Database StringGet txtKey Text myCac
  • Scala 使用的 Redis 客户端库建议

    我正在计划使用 Scala 中的 Redis 实例进行一些工作 并正在寻找有关使用哪些客户端库的建议 理想情况下 如果存在一个好的库 我希望有一个为 Scala 而不是 Java 设计的库 但如果现在这是更好的方法 那么仅使用 Java 客
  • Amazon Elasticache Redis 集群 - 无法获取端点

    我需要获取 Amazon Elasticache 中 Redis 集群的终端节点 以下代码适用于 Memcached 集群 但不适用于 Redis import com amazonaws auth AWSCredentials impor
  • 如何使用 Redis 自动删除与模式匹配的键

    在我的 Redis DB 中 我有很多prefix
  • 节点应用程序之间共享会话?

    我目前有两个独立的节点应用程序在两个不同的端口上运行 但共享相同的后端数据存储 我需要在两个应用程序之间共享用户会话 以便当用户通过一个应用程序登录时 他们的会话可用 并且他们似乎已登录到另一个应用程序 在本例中 它是一个面向公众的网站和一
  • 超出 Redis 连接/缓冲区大小限制

    在对我们的应用程序服务器进行压力测试时 我们从 Redis 中得到以下异常 ServiceStack Redis RedisException 无法连接到 redis host 6379 处的 redis 实例 gt System Net
  • ServiceStack.Redis:无法连接:sPort:

    我经常得到 ServiceStack Redis 无法连接 sPort 0 或 ServiceStack Redis 无法连接 sPort 50071 或其他端口号 当我们的网站比较繁忙时 就会出现这种情况 Redis 本身看起来很好 CP
  • 如何通过ARM模板输出返回Redis的primaryKey?

    我正在尝试借助下面列出的 ARM 模板来部署 Redis 然后返回其主密钥 Azure 门户中 Redis 的 访问密钥 gt 主 下可用的秘密字符串 但是 我从管道 AzureResourceManagerTemplateDeployme
  • 为什么我们需要 Redis 来运行 CKAN?

    我想知道为什么我们需要 Redis 服务器来运行 CKAN 如果需要 为什么 我如何使用 CKAN 配置它 附注 我正在 RHEL7 中运行我的 ckan 实例 Update Redis 已成为一项要求从CKAN 2 7开始 https d
  • redis能完全取代mysql吗?

    简单的问题 我是否可以使用 redis 而不是 mysql 来处理各种 Web 应用程序 社交网络 地理位置服务等 IT 领域没有什么是不可能的 但有些事情可能会变得极其复杂 将键值存储用于全文搜索之类的事情可能会非常痛苦 另外 据我所知
  • JedisPoolConfig 不可分配给 GenericObjectPoolConfig

    我有一个基于 Spring 的 Java Web 应用程序托管在 Heroku 上 我正在尝试使用 Redis 实现来利用 Spring 缓存抽象 当服务器启动时 我收到一条错误消息 Type redis clients jedis Jed
  • 如何高效地将数十亿数据插入Redis?

    我有大约 20 亿个键值对 我想将它们有效地加载到 Redis 中 我目前正在使用 Python 并使用 Pipe 如redis py https redis py readthedocs io en latest redis Redis
  • Redis - 错误:值不是有效的浮点数

    我在 Redis 中有一个排序集 我试图通过在Python代码中使用zincrby来更新特定元素的计数器值 例如 conn zincrby usersSet float 1 user1 但它显示错误为 错误 值不是有效的浮点数 我在 cli
  • spring中如何使用jackson代替JdkSerializationRedisSerializer

    我在我的一个 Java 应用程序中使用 Redis 并且正在序列化要存储在 Redis 中的对象列表 但是 我注意到使用 RedisTemplate 会使用 JdkSerializationRedisSerializer 相反 我想使用 J
  • 为什么Redis SET性能优于GET?

    根据Redis基准 http redis io topics benchmarkss Redis 可以执行 100 000 SET 操作 秒和 80 000 GET 操作 秒 Redis 是一种内存数据库 这似乎令人惊讶 因为通常人们会认为
  • 如果没有过期的内容,Redis maxmemory-policy volatile-lru 是否会被驱逐?

    我有一个 redis 服务器 设置了maxmemory policy set to volatile lru 文档表明 当达到内存限制时 这将从设置过期的条目集中逐出 在这种情况下 redis 是否只驱逐过期的项目 如果内存中的所有内容都设
  • 如何暂停或恢复 celery 任务?

    我的项目中有一项要求 客户可以暂停或恢复正在挂起的流程 而不是流程流程 我在用网络套接字显示芹菜任务结果 但在暂停 恢复时我不明白如何设计代码 我想到的唯一方法就是revoke暂停请求中的任务 同时保留数据撤销的过程在缓存中 并稍后在res
  • Spring-boot中将redis-cache反序列化为对象的问题

    我在 Client 类中使用 JsonNode 来处理 MySQL 8 数据库中 JSON 类型的字段 即使对于 API 请求 它也能很好地工作 但是当我使用 Redis 启用缓存 我确实需要它 时 我注意到 Redis 无法序列化 Jso
  • 如何在Redis中存储聚合目录树搜索结果

    我有一个很大的产品目录树 目前包含约 36000 个类别和约 100 万个产品 即叶子 它的结构如下 最大深度为 5 Cat1 Cat11 Cat111 Cat1111 Product1 Cat1112 Product1 Cat1113 P
  • 使用 MongoDB 作为我们的主数据库,我应该使用单独的图数据库来实现实体之间的关系吗?

    我们目前正在为一家专业公司内部实施类似 CRM 的解决方案 由于存储信息的性质以及信息的不同值和键 我们决定使用文档存储数据库 因为它完全适合目的 在本例中我们选择 MongoDB 作为此 CRM 解决方案的一部分 我们希望存储实体之间的关

随机推荐

  • C#辗转相除法求最大公约数与最小公倍数

    class Program static void Main string args int num1 num2 mm Console WriteLine 请输入第一个数 num1 Convert ToInt32 Console ReadL
  • 【Flutter 1-6】Flutter项目目录结构

    文章首发地址 Flutter项目结构 了解Flutter的目录结构 可以帮助我们更好的管理和开发项目 这样我们在开发的过程中就会很清楚的知道 iOS代码该放在那里 Android代码该放在那里 Flutter代码该放在哪里 测试代码放在哪里
  • Linux操作系统加固

    如何尽可能地加强Linux的安全性和隐私性 以下列出的所有命令都将需要root特权 以 符号开头的单词表示一个变量 不同终端之间可能会有所不同 一 选择正确的Linux发行版 选择一个好的Linux发行版有很多因素 避免分发冻结程序包 因为
  • ubuntu16.04重新编译linux内核

    首先的首先 如果用的是虚拟机 那硬盘至少要分个40G 硬盘太小的后果 你可以试试 一 下载内核 首先到kernel官网获取linux源代码包 我用的ubuntu版本是16 04 因此下载的包可以采用4 x 如果从官网下载速度过慢 我这下载需
  • 日志注入 ctf.show_web4

    使用php input 不行 使用日志注入 查看日志的默认目录 得到了日志文件 url var log nginx access log 进行日志注入 使用蚁剑连接得到flag
  • Acwing 1264. 动态求连续区间和(树状数组版)

    lowbit x x x 返回2 k k为x的二进制表示中末尾0的个数 c x 存的是 x lowbit x x 之间这些数的和 include
  • Django电商项目(四)用户中心、FastDFS

    Django电商项目 用户中心逻辑 登录装饰器和登录后跳转 判断用户是否已登录 退出登录 用户中心 地址页 模型管理器类方法封装 用户中心 个人信息 分布式图片服务器FastDFS 什么是FastDFS 文件上传流程 文件下载流程 简易Fa
  • 区块链在物联网中的应用态势分析

    摘 要 目的 物联网是物体之间共享资源和交流信息的平台 其上的数据价值不断被挖掘显现 而区块链作为一种新型的数据存储管理模式 在体系去中心化 数据溯源和防篡改等方面拥有良好的效果 近来 不少研究都探索了区块链在物联网中的应用 方法 利用文献
  • PaddleHub人体姿态检测模型pose_resnet50_mpii

    姿态检测还是挺有意思的 在 paddlehub 上有直接可以拿来用的模型 pose resnet50 mpii 随便网上找了张图片试了一下效果还行 代码非常简单 import paddlehub as hub module hub Modu
  • Android逆向之旅---爆破一款资讯类应用「最右」防抓包策略原理分析

    一 逆向分析 首先感谢王同学提供的样本 因为王同学那天找到我咨询我说有一个应用Fiddler抓包失败 其实对于这类问题 我一般都会这么回答 第一你是否安装Fiddler证书了 他说他安装了 第二你是否用了我之前说的那个Xposed框架Jus
  • JAVA list加锁_list类里面的东西加锁 (手动加锁方法)

    package privateclass import java util Collection import java util Iterator import java util List import java util ListIt
  • 【计算机组成原理】——原码,反码,补码,移码怎样计算

    机器数与真值 把符号 数字化 的数称为机器数 而把带 或 的数称为真值 正负号用二进制的0 1表示 0 1 x 001 机器数 第一位表示符号 x 1 x 101 真值 直接用 表示 x 5 原码 反码 补码 移码的计算 正数的原码 反码
  • Pycharm绘图时显示额外的“figure”浮窗

    如图所示 不想图片显示在右边 而是单独的一个窗口 这样可以进行点击交互 1 File gt Settings gt 2 找到Tools gt Python Scientific 找到 Python Scientific 去除右边候选框中的勾
  • SpringCache使用

    SpringCache使用 1 引入依赖 引入springcache依赖
  • three.js坐标轴辅助器AxesHelper

    一 效果图 二 添加坐标轴辅助器 使用three js 通过以下代码可以添加坐标轴辅助器 创建坐标轴辅助器 var axesHelper new THREE AxesHelper 5 添加到场景中 scene add axesHelper
  • 私有云平台管理

    更改主机名 controller hostnamectl set hostname controller compute hostnamectl set hostname compute 更改hosts文件 vi etc hosts 插入以
  • Java NIO通信编程

    NIO即非同步非阻塞式IO 有如下几个特点 1 创建一个线程负责处理IO事件和IO事件的分发 2 事件驱动机制 事件到达之后触发 3 线程之间通过wait notify等方式通信 减少线程间切换 NIO客户端和服务端需都维护一个管理通道的对
  • flutter加载不同分辨率本地图片

    flutter移动开发怎么加载本地图片 首先在该项目根目录也就是和ios android同级创建一个images文件夹用来存放图片资源 然后放入需要加载的图片资源例如ic phone png 然后在项目目录下找到pubspec yaml文件
  • 【定量分析、量化金融与统计学】统计推断基础 番外(1)---T table与Z table的值

    目录 一 前言 二 T table 三 Z table 一 前言 为了方便之后的例题讲解 这里放上T tabel和Z table的值 怎么查表 本篇中会直接讲 所以这里就只看表格就行 本篇为工具篇 二 T table 我们给两个版本 适合用
  • Redis学习笔记:数据结构和命令

    本文是自己的学习笔记 主要参考资料如下 马士兵 4 Redis的五大数据类型 1 1 String 1 1 1 String 类型的命令 1 1 2 存储对象 1 2 List 1 2 1 List基本命令 1 2 2 List高级命令 1