Redis学习---大数据技术之Redis(NoSQL简介、Redis简介、Redis安装、五大数据类型、相关配置、持久化)

news2024/11/17 5:46:44

在这里插入图片描述
                       星光下的赶路人star的个人主页

                      毅力是永久的享受

文章目录

  • 1、NoSQL
    • 1.1 NoSQL数据库
      • 1.1.1 NoSQL是什么
      • 1.1.2 NoSQL的特点
      • 1.1.3 NoSQL的适用场景
      • 1.1.4 NoSQL的不适场景
    • 1.2 NoSQL家族
  • 2、Redis简介
    • 2.1 Redis官网
    • 2.2 Redis是什么
    • 2.3 Redis的应用场景
      • 2.3.1 配合关系型数据库做高速缓存
      • 2.3.2 大数据场景
      • 2.3.3 利用其多样的数据结构储存特定的数据
  • 3、Redis安装
    • 3.1 关于Redis版本
    • 3.2 安装
    • 3.3 查看安装目录/home/zhm/bin
    • 3.4 Redis的启动
    • 3.5 客户端访问
    • 3.6 关闭Redis服务
      • 3.7 Redis默认16个库
  • 4、Redis的五大数据类型
    • 4.1 帮助手册
    • 4.2 Redis键(key)
    • 4.3 String
      • 4.3.1 特点
      • 4.3.2 常用操作
    • 4.4 List
      • 4.4.1 特点
      • 4.4.2 常用操作
    • 4.5 set
      • 4.5 1 特点
      • 4.5.2 常用操作
    • 4.6 Hash
      • 4.6.1 特点
      • 4.6.2 分析一个问题: 现有一个User 对象,在Redis中如何存?
      • 4.6.3 常用操作
    • 4.7 zset
      • 4.7.1 特点
      • 4.7.2 常用操作
  • 5、Redis的相关配置
  • 6、Jedis
    • 6.1 环境准备
    • 6.2 基本测试
  • 7、Redis持久化
    • 7.1 两种方式
    • 7.2 RDB(Redis DataBase)
      • 7.2.1 RDB是什么
      • 7.2.2 如何执行持久化
      • 7.2.3 RDB文件
      • 7.2.4 RDB保存策略
      • 7.2.5 手动保存
      • 7.2.6 RDB备份恢复
      • 7.2.7 RDB其他配置
      • 7.2.8 RDB优缺点
    • 7.3 AOF(Append Only File)
      • 7.3.1 AOF是什么
      • 7.3.2 开启AOF
      • 7.3.3 AOF同步频率
      • 7.3.4 AOF文件损坏恢复
      • 7.3.5 AOF备份
      • 7.3.6 Rewrite
      • 7.3.7 AOF的优缺点
    • 7.4 持久化的优先级
    • 7.5 RDB和AOF用哪个号

1、NoSQL

1.1 NoSQL数据库

1.1.1 NoSQL是什么

1、NoSQL(Not Only SQL),意思是“不仅仅是SQL”,泛指非关系型的数据库。
2、NoSQL不拘泥于关系型数据库的设计范式,放弃了通用的技术标准,为某一领域特定场景而设计,从而使性能、容量、扩展性达到了一定程度的突破。

1.1.2 NoSQL的特点

1、不遵循SQL标准
2、不支持ACID
3、远超于SQL的性能

1.1.3 NoSQL的适用场景

1、对数据高并发的读写
2、海量数据的读写
3、对数据高可扩展的

1.1.4 NoSQL的不适场景

1、需要事务支持
2、基于sql的结构化查询储存,处理复杂的关系,需要即时查询
3、用不着sql的和·用了sql也不行的情况,清考虑用NoSQL。

1.2 NoSQL家族

1、Memcached
(1)很早出现的NoSQL数据库
(2)数据都在内存中,一般不持久化
(3)支持简单的key-value模式,数据类型支持单一
(4)一般是作为缓存数据库辅助持久化的数据库

2、Redis
(1)几乎覆盖了Memcached的绝大部分功能
(2)数据都在内存中,支持持久化,主要用作备份恢复
(3)支持丰富的数据类型(value,因为所有key都是String类型),例如string,list,set,zset,hash等

3、mongoDB
(1)高性能、开源、模式自由的文档型数据库
(2)数据都在内存中,如果内存不足,把不常用的数据保存到硬盘
(3)虽然是key-value模式,但是对value(尤其是json)提供了丰富的查询功能
(4)支持二进制数据及大型对象
(5)可以根据数据的特点替代RDBMS(关系数据库管理系统),成为独立的数据库。或者配合RDBMS,存储特定的数据

4、HBase
(1)HBase是Haddop项目的数据库,主要用于对大量数据进行随机、实时的读写操作。
(2)HBase能支持到数十亿行×百万列的数据表

5、Cassandra
(1)Cassandra用于管理由大量商用服务器构建起来的庞大集群上的海量数据集(PB级)

6、Neo4j
(1)Neo4j是基于图结构的数据库,一般用于构建社交网络、交通网络、地图等

2、Redis简介

2.1 Redis官网

1、Redis官方网站 http://Redis.io
2、Redis中文官方网站 http://www.Redis.net.cn

2.2 Redis是什么

1、Redis是一个开源的key-value储存系统。
2、它支持储存的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set)和hash(哈希类型)
3、Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件
4、支持高可用和集群模式

2.3 Redis的应用场景

2.3.1 配合关系型数据库做高速缓存

1、高频次,热门访问的数据,降低数据库IO
2、经典的Cache Aside Pattern(旁路缓存模式)
在这里插入图片描述

2.3.2 大数据场景

1、缓存数据
(1)需要高频次访问
(2)持久化数据访问较慢
在这里插入图片描述
2、临时数据
(1)高频次
(2)读写时效高
(3)总数据量不大
(4)临时性
(5)用key查询
在这里插入图片描述
3、计算结果
(1)高频次写入
(2)高频次查询
(3)总数据量不大
在这里插入图片描述

2.3.3 利用其多样的数据结构储存特定的数据

(1)最新N个数据—>通过List实现按自然事件排序的数据
(2)排行榜,TopN—>利用zset(有序集合)
(3)时效性的数据,比如手机验证码—>Expire过期
(4)计数器,秒杀—>原子性,自增方法INCR、DECR
(5)去除大量数据中的重复数据—>利用set集合
(6)构建队列—>利用list集合
(7)发布订阅消息系统—>pub/sub模式

3、Redis安装

3.1 关于Redis版本

不用考虑在Windows环境下对Redis的支持,Redis官方没有提供对Windows环境的支持,是微软的开源小组开发了对Redis对Windows的支持。

3.2 安装

1、安装新版gcc编译器

 sudo yum -y install gcc-c++ 

2、上传redis-6.2.1.tar.gz安装包到/opt/software目录下
3、解压redis-6.2.1.tar.gz到/opt/module目录下
4、之后进入安装包的src目录,编辑Makefile文件,修改软件安装路径如下:

#修改如下
PREFIX?=/home/zhm

#然后执行如下命令
 make && make install

3.3 查看安装目录/home/zhm/bin

(1)Redis-benchmark:性能测试工具,可以在自己本子运行,看看自己本子性能如何(服务启动起来后执行)
(2)Redis-check-aof:修复有问题的AOF文件
(3)Redis-check-dump:修复有问题的RDB文件
(4)Redis-sentinel:启动Redis哨兵服务
(5)redis-server:Redis服务器启动命令
(6)redis-cli:客户端,操作入口

3.4 Redis的启动

1、拷贝一份redis.conf配置文件到工作目录

 mkdir myredis
 cd myredis
 cp /opt/module/redis-6.2.1/redis.conf .

2、绑定主机IP,修改bind属性

 vim redis.conf

 bind 0.0.0.0

3、指定配置文件进行启动

redis-server redis.conf

3.5 客户端访问

1、使用redis-cli 命令访问启动好的Redis,默认端口为6379

redis-cli 

2、如果有多个Redis客户端同时启动,或者端口做了修改,则需要指定端口号访问

redis-cli -p 6379

3、如果访问非本机的Redis,需要指定host来访问

redis-cli -h 127.0.0.1 -p 6379

4、通过ping命令测试验证

127.0.0.1:6379> ping
PONG

3.6 关闭Redis服务

如果还未通过客户端访问,可直接redis-cli shutdown

redis-cli shutdown

如果已经进入客户端,直接shutdown即可

127.0.0.1:6379> shutdown

3.7 Redis默认16个库

1、Redis默认创建16个库,每个库对应一个下标,从0开始。
通过客户端连接默认进入到0号库,推荐只使用0号库
2、使用命令select库的下标来切换数据库

127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]>

4、Redis的五大数据类型

4.1 帮助手册

http://redisdoc.com/

4.2 Redis键(key)

1、查看当前库的所有键

127.0.0.1:6379> keys *

2、判断某个键是否存在

127.0.0.1:6379> exists <key>

3、查看键对应的value的类型

127.0.0.1:6379> type <key>

4、删除某个键

127.0.0.1:6379> del <key>

5、设置过期时间

expire <key> <second>

6、查看过期时间,-1表示永不过期,-2表示已过期

ttl <key>

7、查看当前库中key的数量

dbsize

8、清空当前库

flushdb

9、清空所以库

flushall

4.3 String

4.3.1 特点

1、String是Redis最基本的类型,适合保存单值类型,即一个key对应一个value。
2、String类型是二进制安全的,意味着Redis的String可以包含任何数据。比如jpg图片或者序列化得对象。
3、一个Redis中字符串value最多可以是512M。

4.3.2 常用操作

1、添加键值对

set <key> <value>

2、获取键的值

get <key>

3、将给定的追加到原值的末尾

append <key> <value>

4、获取值的长度

strlen <key>

5、当key不存在时设置key的值

setnx <key> <value>

6、将key中储存的数据值增1

incr <key>

7、将key中储存的数字值减一

decr <key>

8、将key中储存的数字值安装指定步长增长

incrby <key> <步长>

9、将key中储存的数字值按照指定步长减

decrby <key> <步长>

10、同时添加一个或者多个key

mset <k1> <v1> <k2> <v2>

11、同时获取一个或者多个key的值

mget <k1> <k2> <k3>

12、同时添加一个或者多个key,当且仅当所有给定的key都不存在

msetnx <k1> <v1> <k2> <v2>

13、获取值的子串

getrange <key>  <start> <end>

14、从指定的开始位置覆盖旧值

setrange <key> <start> <value>

15、同时设置值和过期时间

setex <key> <seconds> <value>

16、设置新值的同时获取旧值

getset <key> <value>

4.4 List

4.4.1 特点

1、单键多值
2、Redis List是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
3、它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。
在这里插入图片描述

4.4.2 常用操作

1、从左边插入一个或多值

lpush <key> <element...>

2、从右边插入一个或多个值

rpush <key> <element...>

3、从左边删除一个值(值在健在,值光键亡)

lpop <key>

4、从右边删除一个值

rpop <key>

5、从key1列表右边删除一个值,插入到key2列表左边

rpoplpush <key1> <key2>

6、按照索引下标范围获取元素(从左到右)

lrange <key> <start> <stop>

7、按照索引下标获取元素(从左到右)

lindex <key> <index>

8、获取列表长度

llen <key>

9、在指定 的前面或者后面插入

llinsert <key> before|after <pivot> <element>

10、从左边删除count个指定的value

lrem <key> <count> <element>

4.5 set

4.5 1 特点

1、set中的元素是无序不重复的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口。
2、Redis的Set是string类型的无序集合。它底层其实是一个value为null的hash表,所以添加,删除,查找的复杂度都是O(1)。

4.5.2 常用操作

1、将一个或者多个member元素加入到集合中,已经存在的member将被忽略

sadd <key> <member…>

2、取出集合的所有值

smemebers  <key>

3、判断集合是否包含指定的member,包含返回1,不包含返回0

sismember <key> <member>

4、返回集合的元素个数

scard <key>

5、从集合中删除指定的元素

srem <key> <member…>

6、随机从集合中删除一个值,会从集合中删除值

spop <key>

7、随机从集合中取出n个值,不会从集合中删除

srandmember <key> <count>

8、返回多个集合的交集元素

sinter <key…>

9、返回多个集合的并集元素

sunion <key…> 

10、返回多个集合的差集元素

sdiff <key…> 

4.6 Hash

4.6.1 特点

1、Redis hash是一个键值对集合
2、Redis hash的值是由多个field和value组成的映射表
3、类似Java里面的Map<String,String>

4.6.2 分析一个问题: 现有一个User 对象,在Redis中如何存?

1、第一种方案: 用户ID为key ,VALUE为JavaBean序列化后的字符串
在这里插入图片描述
2、第二种方案: 用户ID+属性名作为key, 属性值作为Value.

在这里插入图片描述
3、第三种方案: 通过 key(用户ID) + field(属性标签) 就可以操作对应属性数据了,既不需要重复存储数据,也不会带来序列化和并发修改控制的问题
在这里插入图片描述

4.6.3 常用操作

1、给集合中添加指定的 -

hset <key>  [<field> <value>]

2、给集合中添加指定的 - ,当指定的field不存在时

 hsetnx <key> <field> <value>

3、取出集合中指定field的value

hget <key> <field> 

4、判断集合中是否存在指定的field

hexists <key> <field> 

5、列出集合中所有的field

hkeys <key> 

6、列出集合中所有的value

hvals <key> 

7、给集合中指定filed的value值增加increment

 hincrby  <key> <field> <increment> 

4.7 zset

4.7.1 特点

1、Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。不同之处是有序集合的每个成员都关联了一个评分(score) ,这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了 。
2、因为元素是有序的, 所以你也可以很快的根据评分(score)或者次序(position)来获取一个范围的元素。访问有序集合的中间元素也是非常快的,因此你能够使用有序集合作为一个没有重复成员的智能列表。

4.7.2 常用操作

1、往集合中添加指定的 member 及score

zadd <key> [<score> <member>]

2、从集合中取出指定下标范围的数据,正序取

zrange <key> <start> <stop> [WITHSCORES] 

3、从集合中取出指定下标范围的数据,倒序取

 zrevrange <key> <start> <stop> [WITHSCORES] 

4、从集合中取出指定score范围的数据,默认从小到大

 zrangebyscore <key> <min> <max> [WITHSCORES]

5、从集合中取出指定score范围的数据,从大到小

zrevrangebyscore  <key>  <max> <min> [WITHSCORES]

6、给集合中指定member的score增加increment

zincrby <key> <increment> <member>

7、删除集合中指定的member

zrem <key> <member…>

8、统计指定score范围的元素个数

 zcount <key> <min> <max>

9、返回集合中指定member的排名,排名从0开始

zrank   <key>  <member>

5、Redis的相关配置

1、计量单位说明,大小写不敏感

# 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 1024*1024 bytes
# 1g => 1000000000 bytes
# 1gb => 1024*1024*1024 bytes
#
# units are case insensitive so 1GB 1Gb 1gB are all the same.

2、bind
默认情况bind=127.0.0.1只能接受本机的访问请求
不写的情况下,无限制接受任何ip地址的访问,产环境肯定要写你应用服务器的地址
如果开启了protected-mode,那么在没有设定bind ip且没有设密码的情况下,Redis只允许接受本机的请求

#bind 127.0.0.1
protected-mode no

3、port服务端口号

port 6379

4、damonize
是否为后台进程

port 6379

5、pidfile
存放pid文件的位置,每个实例会产生一个不同的pid文件

pidfile /var/run/redis_6379.pid

6、log file
日志文件存储位置

logfile ""

7、Database
设定库的数量默认16

databases 16

8、requirepass
设置密码

requirepass 123456

127.0.0.1:6379> set k1 v1
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth "123456"
OK
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> get k1 
"v1"

9、maxmemory
设置Redis可以使用的内存量。一 旦到达内存使用上限,Redis将会试图移除内部数据,移除规则可以通过maxmemory-policy来指定。如果Redis无法根据移除规则来移除内存中的数据,或者设置了“不允许移除”,
那么Redis则会针对那些需要申请内存的指令返回错误信息,比如SET、LPUSH等。

# maxmemory <bytes>

10、maxmemory-policy
移除策略

# maxmemory-policy noeviction 

#volatile-lru:使用LRU算法移除key,只对设置了过期时间的键
#allkeys-lru:使用LRU算法移除key
#volatile-lfu :使用LFU策略移除key,只对设置了过期时间的键.
#allkeys-lfu  :使用LFU策略移除key
#volatile-random:在过期集合中移除随机的key,只对设置了过期时间的键
#allkeys-random:移除随机的key
#volatile-ttl:移除那些TTL值最小的key,即那些最近要过期的key
#noeviction:不进行移除。针对写操作,只是返回错误信息

11、Maxmemory-samples
设置样本数量,LRU算法和最小TTL算法都并非是精确的算法,而是估算值,所以你可以设置样本的大小。一般设置3到7的数字,数值越小样本越不准确,但是性能消耗也越小。

# maxmemory-samples 5

6、Jedis

Jedis是Redis的Java客户端,可以通过Java代码的方式操作Redis

6.1 环境准备

1、添加依赖

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.3.0</version>
</dependency>

6.2 基本测试

1、测试连通


public class JedisTest {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("hadoop102",6379);
        String ping = jedis.ping();
        System.out.println(ping);
    }
}

2、连接池

连接池主要用来节省每次连接redis服务带来的连接消耗,将连接好的实例反复利用

public static JedisPool pool =  null ;

public static Jedis getJedis(){
    if(pool == null ){
        //主要配置
        JedisPoolConfig jedisPoolConfig =new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(10); //最大可用连接数
        jedisPoolConfig.setMaxIdle(5); //最大闲置连接数
        jedisPoolConfig.setMinIdle(5); //最小闲置连接数
        jedisPoolConfig.setBlockWhenExhausted(true); //连接耗尽是否等待
        jedisPoolConfig.setMaxWaitMillis(2000); //等待时间
        jedisPoolConfig.setTestOnBorrow(true); //取连接的时候进行一下测试 ping pong
        pool = new JedisPool(jedisPoolConfig,"hadoop102",6379) ;
    }

    return pool.getResource();
}   
 public static void main(String[] args) {
        //Jedis jedis = new Jedis("hadoop202",6379);
        Jedis jedis = getJedis();
        String ping = jedis.ping();
        System.out.println(ping);
 }

7、Redis持久化

7.1 两种方式

Redis提供了两个不同形式的持久化方式RDB和AOF。
RDB为快照备份,会在备份时将内容中的所有数据持久化到磁盘的一个文件中。
AOF为日志备份,会将所有写操作命令记录在一个日志文件中。

7.2 RDB(Redis DataBase)

7.2.1 RDB是什么

在指定的时间间隔将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,
它恢复时是将快照文件直接读到内存里。

7.2.2 如何执行持久化

Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行然后IO操作的,这就确保了极高的性能如果需要进行大规模数据的恢复,且对数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺点是最后一次持久化的数据可能丢失。

7.2.3 RDB文件

1、RDB保存的文件
在redis.conf中配置文件名称,默认为dump.rdb
2、RDB文件的保存路径
默认为Redis启动时命令行所在的目录下,也可以修改

7.2.4 RDB保存策略

#   save <seconds> <changes>

#   Will save the DB if both the given number of seconds and the given
#   number of write operations against the DB occurred.
#
#   In the example below the behaviour will be to save:
#   after 900 sec (15 min) if at least 1 key changed
#   after 300 sec (5 min) if at least 10 keys changed
#   after 60 sec if at least 10000 keys changed
#   Note: you can disable saving completely by commenting out all "save" lines.
save 900 1
save 300 10
save 60 10000

7.2.5 手动保存

1、save: 只管保存,其它不管,全部阻塞
2、bgsave:按照保存策略自动保存
3、shutdown时服务会立刻执行备份后再关闭
4、flushall时会将清空后的数据备份

7.2.6 RDB备份恢复

1、备份
将dump.rdb文件拷贝到要备份的位置
2、恢复
关闭Redis,把备份的文件拷贝到工作目录下,启动redis,备份数据会直接加载。

7.2.7 RDB其他配置

1、进行rdb保存时,将文件压缩

rdbcompression yes

2、文件校验
在存储快照后,还可以让Redis使用CRC64算法来进行数据校验,但是这样做会增加大约10%的性能消耗,如果希望获取到最大的性能提升,可以关闭此功能

rdbchecksum yes

7.2.8 RDB优缺点

1、优点
节省磁盘空间,恢复速度快.
2、缺点
虽然Redis在fork时使用了写时拷贝技术,但是如果数据庞大时还是比较消耗性能。在备份周期在一定间隔时间做一次备份,所以如果Redis意外down掉的话,就会丢失最后一次快照后的所有修改

7.3 AOF(Append Only File)

7.3.1 AOF是什么

以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,Redis启动之初会读取该文件重新构建数据,换言之,Redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。

7.3.2 开启AOF

1、AOF默认不开启,需要手动在配置文件中配置

appendonly no

2、AOF文件

appendfilename "appendonly.aof"

3、AOF文件保存的位置与RDB的路径一致

dir ./

7.3.3 AOF同步频率

# no: don't fsync, just let the OS flush the data when it wants. Faster.
# always: fsync after every write to the append only log. Slow, Safest.
# everysec: fsync only one time every second. Compromise.

7.3.4 AOF文件损坏恢复

redis-check-aof  --fix  appendonly.aof  

7.3.5 AOF备份

AOF的备份机制和性能虽然和RDB不同, 但是备份和恢复的操作同RDB一样,都是拷贝备份文件,需要恢复时再拷贝到Redis工作目录下,启动系统即加载

7.3.6 Rewrite

AOF采用文件追加方式,文件会越来越大为避免出现此种情况,新增了重写机制,当AOF文件的大小超过所设定的阈值时,Redis就会启动AOF文件的重写,只保留可以恢复数据的最小指令集.可以使用命令bgrewriteaof手动开始重写。
重写虽然可以节约大量磁盘空间,减少恢复时间。但是每次重写还是有一定的负担的,因此设定Redis要满足一定条件才会进行重写。
系统载入时或者上次重写完毕时,Redis会记录此时AOF大小,设为base_size,如果Redis的AOF当前大小>= base_size +base_size*100% (默认)且当前大小>=64mb(默认)的情况下,Redis会对AOF进行重写。

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

7.3.7 AOF的优缺点

1、优点:
(1)备份机制更稳健,丢失数据概率更低。
(2)可读的日志文本,通过操作AOF文件,可以处理误操作。
2、缺点:
(1)比起RDB占用更多的磁盘空间
(2)恢复备份速度要慢
(3)每次写都同步的话,有一定的性能压力
(4)存在个别bug,造成恢复不能

7.4 持久化的优先级

AOF的优先级大于RDB,如果同时开启了AOF和RDB,Redis服务启动时恢复数据以AOF为准.

7.5 RDB和AOF用哪个号

1、官方推荐两个都启用。
2、如果对数据不敏感,可以选单独用RDB
3、不建议单独用 AOF,因为可能会出现Bug。
4、如果只是做纯内存缓存,可以都不用

在这里插入图片描述
                      您的支持是我创作的无限动力

在这里插入图片描述
                      希望我能为您的未来尽绵薄之力

在这里插入图片描述
                      如有错误,谢谢指正;若有收获,谢谢赞美

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

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

相关文章

java复盘

这一题中外部类是Outer。外部类不能直接使用内部类的成员变量和方法&#xff0c;需要内部类的对象来访问他的成员变量和方法。所以该题只是new了一个外部类&#xff0c;内部类无法访问&#xff0c;所以没有输出。 wait后进入等待锁定池&#xff0c;只有针对此对象发出notify或者…

TCP网络通信编程之字节流

目录 【TCP字节流编程】 // 网络编程中&#xff0c;一定是server端先运行 【案例1】 【思路分析】 【客户端代码】 【服务端代码】 【结果展示】 【案例2】 【题目描述】 【注意事项】 【服务端代码】 【客户端代码】 【代码结果】 【TCP字节流编程】 // 网络编程中&a…

list与流迭代器stream_iterator

运行代码&#xff1a; //list与流迭代器 #include"std_lib_facilities.h" //声明Item类 struct Item {string name;int iid;double value;Item():name(" "),iid(0),value(0.0){}Item(string ss,int ii,double vv):name(ss),iid(ii),value(vv){}friend ist…

【计算机视觉 | 图像分割】arxiv 计算机视觉关于图像分割的学术速递(7 月 26 日论文合集)

文章目录 一、分割|语义相关(7篇)1.1 Learning Transferable Object-Centric Diffeomorphic Transformations for Data Augmentation in Medical Image Segmentation1.2 Optical Flow boosts Unsupervised Localization and Segmentation1.3 Spectrum-guided Multi-granularity…

latex论文----写作代码

一般来说论文机构会给定latex模板代码&#xff0c;我们只需要知道怎么写就行&#xff0c;格式机构都给你调好了 1 各类标题 section是最大的标题&#xff0c;后边每一级小标题&#xff0c;都在前边加个sub就行 \section{Method} \subsection{Dataset} \subsubsection{Dataset…

2014年全国硕士研究生入学统一考试管理类专业学位联考写作试题——解析版

2014年1月真题: 四、写作:第56~57小题&#xff0c;共65分。其中论证有效性分析30 分&#xff0c;论说文35分。 56.论证有效性分析: 分析下述论证中存在的缺陷和漏洞&#xff0c;选择若干要点&#xff0c;写一篇600字左右的文章&#xff0c;对该论证的有效性进行分析和评论。…

error: cannot call member function ‘void me::sendMessage()‘ without object

error: cannot call member function void me::sendMessage&#xff08;&#xff09; without object 原因分析解决方案 原因分析 在connect中&#xff0c;传递函数地址不用带括号。&#xff08;参考函数指针的赋值&#xff09; #include <iostream> // 包含头…

redis线程模型

文章目录 一、redis单线程模型1.1 为什么redis命令处理是单线程&#xff0c;而不采用多线程1.2 单线程的局限及redis的优化方式 二、redis单线程为什么这么快2.1 采用的机制2.2 优化的措施 三、redis的IO多线程模型3.1 redis 为什么引入IO多线程模型3.2 配置io-threads-do-read…

安全测试国家标准解读——数据库管理和文件管理

下面的系列文章主要围绕《GB/T 38674—2020 信息安全技术 应用软件安全编程指南》进行讲解&#xff0c;该标准是2020年4月28日&#xff0c;由国家市场监督管理总局、国家标准化管理委员会发布&#xff0c;2020年11月01日开始实施。我们对该标准中一些常见的漏洞进行了梳理&…

SQL-每日一题【1045.买下所有产品的客户】

题目 Customer 表&#xff1a; Product 表&#xff1a; 写一条 SQL 查询语句&#xff0c;从 Customer 表中查询购买了 Product 表中所有产品的客户的 id。 示例&#xff1a; 解题思路 1.题目要求我们 从 Customer 表中查询购买了 Product 表中所有产品的客户的 id。我们可以先…

Memcached服务分布式集群如何实现?

Memcached服务分布式集群如何实现? 在分布式系统中&#xff0c;为了提高可用性、性能和扩展性&#xff0c;通常会使用多台服务器来构建一个Memcached集群。Memcached是一个高性能的分布式内存缓存系统&#xff0c;可以用于缓存数据以减轻数据库或其他后端存储的负载。 以下我们…

网络防御之防病毒网关

1. 什么是恶意软件&#xff1f; 恶意软件是任何软件故意设计造成损害计算机、服务器、客户端或计算机网络&#xff08;相比之下&#xff0c;软件导致无意的伤害由于一些缺陷通常被描述为一个软件错误&#xff09;。各种各样的类型的恶意软件存在的&#xff0c;包括计算机病毒、…

一次性彻底讲透Python中pd.concat与pd.merge

目录 数据拼接&#xff1a;pd.concat数据关联:pd.merge两者区别 数据的合并与关联是数据处理过程中经常遇到的问题&#xff0c;在SQL、HQL中大家可能都有用到 join、uion all 等 &#xff0c;在 Pandas 中也有同样的功能&#xff0c;来满足数据处理需求&#xff0c;个人感觉 …

感谢@中原一点红提供的华为OD机试真题2023Q1 100分“座位调整”,一看nike标志,就稳了

目录 专栏导读一、鸣谢二、题目描述三、输入描述四、输出描述五、思路分析解题思路 六、Java算法源码七、效果展示1、输入2、输出 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷…

【动态规划part12】| 309.买卖股票的最佳时机含冷冻期、714.买卖股票的最佳时机含手续费

目录 &#x1f388;LeetCode309.最佳买卖股票时机含冷冻期 &#x1f388;LeetCode714.买卖股票的最佳时机含手续费 &#x1f388;LeetCode309.最佳买卖股票时机含冷冻期 给定一个整数数组prices&#xff0c;其中第 prices[i] 表示第 i 天的股票价格 。​ 设计一个算法计…

【Mysql】万字长文带你快速掌握数据库基础概念及SQL基本操作

文章目录 前言一、数据库相关概念1. 什么是数据库2. 数据库的种类3. Mysql 简介4. SQL简介5. 数据库中常见的数据类型 二、SQL基础1. SQL通用语法2. SQL的主要分类3. DDL&#xff08;数据库&#xff0c;表&#xff0c;索引&#xff0c;视图&#xff09;4. DML&#xff08;数据的…

无涯教程-jQuery - Explode方法函数

爆炸效果可以与show/hide/toggle一起使用。这会将元素爆炸或分解为许多碎片。 Explode - 语法 selector.hide|show|toggle( "explode", {arguments}, speed ); 这是所有参数的描述- pieces - exploded/imploded次数。model - 动画的模式。可以设置为"…

需求分析案例:消息配置中心

本文介绍了一个很常见的消息推送需求&#xff0c;在系统需要短信、微信、邮件之类的消息推送时&#xff0c;边界如何划分和如何设计技术方案。 1、需求 一个系统&#xff0c;一般会区分多个业务模块&#xff0c;并拆分成不同的业务系统&#xff0c;例如一个商城的架构如下&am…

FreeRTOS之计数型信号量

什么是计数型信号量&#xff1f; 计数型信号量相当于队列长度大于1 的队列&#xff0c;因此计数型信号量能够容纳多个资源&#xff0c;这在计数型 信号量被创建的时候确定的。 计数型信号量相关 API SemaphoreHandle_t xSemaphoreCreateCounting( UBaseType_t uxMaxCount, U…

iOS开发-下拉刷新动画CAShapeLayer的strokeStart与strokeEnd指示器动画效果

iOS开发-下拉刷新动画CAShapeLayer的strokeStart与strokeEnd刷新指示器效果 之前开发中实现下拉刷新动画CAShapeLayer的strokeStart与strokeEnd指示器动画效果 一、效果图 二、基础动画 CABasicAnimation类的使用方式就是基本的关键帧动画。 所谓关键帧动画&#xff0c;就是…