写最好的最新Redis6(redis-6.2.7)在云服务器Centos7安装部署教程(参考官方文档)

2023-05-16

一、前言

 
  Redis官方下载地址:https://redis.io/download/#redis-downloads
 
  本教程参考官方文档,在云服务器Centos7上安装部署 Redis6 最新版 Redis-6.2.7 ,有些地方有坑,笔者也是一边踩坑一边填坑,教程内容里面会有说明。笔者在此之前写过两篇博客,有关最新稳定版Redis-7.0.5在Docker和Centos7安装教程,读者有需要可以去看看,本文主要介绍如何在Centos7上安装部署Redis-6.2.7。
 
  如需了解Docker中的最新稳定版Redis6安装部署,可参考教程【Docker安装最新Redis6(redis-6.2.7)(参考官方文档)】。
 
  如需了解Docker中的最新稳定版Redis7安装部署,可参考教程【Docker安装最新稳定版Redis7(redis-7.0.5)(参考官方文档)】。
 
  如需了解Centos7下最新稳定版Redis7安装部署,可参考教程【写最好的最新稳定版Redis7(redis-7.0.5)在云服务器Centos7安装部署教程(参考官方文档)】。
 
  本文由 @大白有点菜 原创,请勿盗用,转载请说明出处!如果觉得文章还不错,请点点赞,加关注,谢谢!
 

二、安装部署

 
  连接云服务器需要一些工具,笔者用的是 Xshell 7 ,如需要安装,可参考教程【Xshell7安装教程】。
 
  Redis官方安装文档教程:https://redis.io/docs/getting-started/
 

1、下载源码包方法一(不推荐):通过上传源码包方式,上传 redis-stable.tar.gz 到目录 /usr/software/redis/

(1)参数 -p 代表多级目录递归,指令 mkdir 代表新建目录,存在 software 和 redis 目录就忽略,不存在就新建:

mkdir -p /usr/software/redis

(2)切换到 /usr/software/redis/

cd /usr/software/redis/

(3)上传命令:

rz

如果提示 rz 命令不存在,需要安装相应组件:

yum -y install lrzsz

新建/usr/software/redis多级目录
 
上传redis-6.2.7.tar.gz安装包
 

2、下载源码包方法二(推荐):通过wgetcurl下载源码包 。

(1)参数 -p 代表多级目录递归,指令 mkdir 代表新建目录,存在 software 和 redis 目录就忽略,不存在就新建:

mkdir -p /usr/software/redis

(2)切换到 /usr/software/redis/

cd /usr/software/redis/

(3)wgetcurl 两种方式下载源码包,选其中一种即可。

wget https://download.redis.io/releases/redis-6.2.7.tar.gz

curl -O https://download.redis.io/releases/redis-6.2.7.tar.gz

wget下载redis安装包
 
curl下载redis安装包
 

3、解压到 /usr/local/ 目录,解压出来的文件夹为 redis-6.2.7

tar -xzf /usr/software/redis/redis-6.2.7.tar.gz -C /usr/local/

解压redis-6.2.7.tar.gz到指定目录
 

4、编译源码。这里有两种方式,笔者推荐方式一。方式二当然也没有问题,只不过后面教程有些步骤稍微麻烦一点点,需要多一步处理。官方源码包中有个 README.md 说明文件,里面介绍了如何编译源码。

(1)看看 README.md 文件里有关编译源码的注意事项。

vim /usr/local/redis-6.2.7/README.md
  • 直接使用 make 命令编译 Redis 源码,会在 src 目录下生成 redis-serverredis-cli 可执行文件。
  • 如果在 make 命令后面添加 install 参数编译 Redis 源码,则会在 /usr/local/bin/ 目录下生成 redis-serverredis-cli 可执行文件,而不是在 src 目录下生成。

查看README.md文件关于redis编译源码的有关注意事项 
直接使用 make 命令编译 Redis 源码,会在 src 目录下生成 redis-server 和 redis-cli 可执行文件 
如果在 make 命令后面添加 install 参数编译 Redis 源码,则会在 /usr/local/bin/ 目录下生成 redis-server 和 redis-cli 可执行文件,而不是在 src 目录下生成。 
(2)方式一(推荐:会在 /usr/local/bin 目录下生成可执行文件 redis-serverredis-cli ,即编译成功的同时进行安装(install)。
 
 1)查看 /usr/local/bin 目录的文件情况,redis-serverredis-cli 可执行文件是不存在的。

ll /usr/local/bin

查看 /usr/local/bin 目录的文件情况,redis-server 和 redis-cli 可执行文件是不存在的
 
 2)使用 make install 编译Redis源码所在的目录 /usr/local/redis-6.2.7/ ,会在 /usr/local/bin 目录下编译生成 redis-serverredis-cli 可执行文件。笔者发现,同时也会在Redis源码包下 src 目录下生成同样的文件。

make -C /usr/local/redis-6.2.7/ install

使用 make install 编译Redis源码所在的目录 /usr/local/redis-6.2.7/  
在 /usr/local/bin 目录下编译生成 redis-server 和 redis-cli 可执行文件
 
编译Redis源码在src目录下生成redis-server和redis-cli可执行文件2
 
(3)方式二(也可以,没有方式一优:只在 redis-6.2.7 目录下的 src 目录生成主要的 redis-cliredis-server 可执行文件,并不进行安装(install)。

make -C /usr/local/redis-6.2.7/

编译Redis源码在src目录下生成redis-server和redis-cli可执行文件2
 

5、【重要】创建一个用于存储 Redis 配置文件目录(/etc/redis)和数据目录(/var/redis)。

sudo mkdir /etc/redis
sudo mkdir /var/redis

创建一个用于存储 Redis 配置文件目录(/etc/redis)和数据目录(/var/redis)
 

6、新建开机自启脚本文件 redis_6379 。官方教程是从 utils 目录里拷贝 redis_init_script 并重命名为 redis_6379 文件,在某些情况下存在问题,笔者在此基础上对其进行了修改,并说明要修改的地方和原因。

 
(1)如果前面编译源码是按照方式一进行的,可以忽略此处说明,只有按照方式二进行才需要仔细看。先来说明 redis_6379 脚本文件中 EXECCLIEXEC 这两个参数要注意的地方。
 
  官方初始化脚本 redis_init_script 中, EXEC 代表要执行二进制文件 redis-server 的绝对路径CLIEXEC 代表要执行二进制文件 redis-cli 的绝对路径。 默认 EXEC 的值为 /usr/local/bin/redis-server ,默认 CLIEXEC 的值为 /usr/local/bin/redis-cli 。如下:

EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli

redis_init_script 中EXEC和CLIEXEC默认参数配置

 
  但是,默认在 /usr/local/bin/ 目录下没有 redis-server 和 redis-cli 这两个可执行文件,如果使用该 redis_6379 脚本文件去运行 redis-server 和 redis-cli ,肯定会报错。那怎么解决呢?官方教程中也说到,需要从前面编译出来的 redis-server 和 redis-cli 复制到 /usr/local/bin/ 目录。官方为什么要在 /usr/local/bin/ 去执行 redis-server 和 redis-cli 呢?因为这样配置后,在任何目录都能运行 redis-server 和 redis-cli ,和配置全局路径的效果一样!

cp /usr/local/redis-6.2.7/src/redis-server /usr/local/bin/
cp /usr/local/redis-6.2.7/src/redis-cli /usr/local/bin/

官方教程中说到需要从前面编译出来的 redis-server 和 redis-cli 复制到 /usr/local/bin/ 目录
 
查看 /usr/local/bin 目录的文件情况,redis-server 和 redis-cli 可执行文件是不存在的
 
从Redis源码包下src目录编译出来的 redis-server 和 redis-cli 复制到 /usr/local/bin/ 目录
 
  有些博文是直接配置 redis-server 和 redis-cli 的绝对路径,虽然这种方法可行,但是不建议这么做,有两点原因:1、限制了 redis-server 和 redis-cli 只能在它们所在的目录下运行,无法做到全路径运行,当然啦,可以在 profile 文件中配置全局路径实现全路径运行,这样太麻烦,维护困难。2、如果升级Redis版本,还得修改脚本文件 redis_6379 中 EXECCLIEXEC 这两个参数值,耦合度高,维护麻烦。

EXEC=/usr/local/redis-6.2.7/src/redis-server
CLIEXEC=/usr/local/6.2.7/src/redis-cli

不推荐的修改EXEC和CLIEXEC参数值方式
 
(2)官方的做法(不推荐,存在问题
 
 1)将 redis-6.2.7 目录下的 utils 目录下的初始化脚本 redis_init_script 复制一份到 /etc/init.d 目录里,同时修改为 redis_6379

sudo cp /usr/local/redis-6.2.7/utils/redis_init_script /etc/init.d/redis_6379

官方复制 utils 目录里面的redis_init_script脚本文件到并修改为redis_6379方式1
 
官方复制 utils 目录里面的redis_init_script脚本文件到并修改为redis_6379方式2
 
 2)从 redis_init_script 脚本文件模板复制出来 redis_6379 脚本文件有哪些隐藏的问题?

  • 只有启动(start)和 停止(stop)两种方式,没有重启(restart)方式,而我们更多会用到重启(restart)。
  • 在后面的步骤中会设置 6379.conf 配置文件,如果设置到密码(参数 requirepass)允许 redis-cli 去连接 redis-server ,官方使用 sudo /etc/init.d/redis_6379 start 命令启动 redis-cli 和 redis-server,按道理使用 sudo /etc/init.d/redis_6379 stop 命令去停止 redis-cli 和 redis-server 运行没有任何问题。
     
    redis_6379只有启动(start)和 停止(stop)两种方式,没有重启(restart)方式
  • 但是,笔者在测试时,发现报错了,报错日志大概意思是错误的认证,等待 Redis 关闭。就是说,如果没有设置到密码,是不会报下面的错误的。
    Redis停止需要认证报错

 
(3)笔者在原始脚本上做了修改(推荐:不用按官方的方式复制一份 redis_init_script 并重命名,直接新建 redis_6379 初始化脚本文件,分为 没有设置密码 和 设置密码 两种情况。最后给 redis_6379 可执行权限。

vim /etc/init.d/redis_6379
  • 没有设置Redis默认用户密码的情况。新增 restart 脚本内容。
    没有设置Redis默认用户密码的情况。新增 restart 脚本内容。
#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.

### BEGIN INIT INFO
# Provides:     redis_6379
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    Redis data structure server
# Description:          Redis data structure server. See https://redis.io
### END INIT INFO

REDISPORT=6379
EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli

PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/etc/redis/${REDISPORT}.conf"

case "$1" in
   start)
       if [ -f $PIDFILE ]
       then
               echo "$PIDFILE exists, process is already running or crashed"
       else
               echo "Starting Redis server..."
               $EXEC $CONF
       fi
       ;;
   stop)
       if [ ! -f $PIDFILE ]
       then
               echo "$PIDFILE does not exist, process is not running"
       else
               PID=$(cat $PIDFILE)
               echo "Stopping ..."
               $CLIEXEC -p $REDISPORT shutdown
               while [ -x /proc/${PID} ]
               do
                   echo "Waiting for Redis to shutdown ..."
                   sleep 1
               done
               echo "Redis stopped"
       fi
       ;;
   restart)
       "$0" stop
   	   sleep 3
   	   "$0" start
   	   ;;
   *)
       echo "Please use start or stop as first argument"
       ;;
esac
  • 设置Redis默认用户密码的情况。新增 restart 脚本内容。文件内容中【$CLIEXEC -p $REDISPORT shutdown】修改为【$CLIEXEC -p $REDISPORT -a 123456 shutdown】,参数 -a 代表认证,123456 代表Redis默认用户密码,后面步骤会修改配置文件 6379.conf 对应的 requirepass 参数的值,密码只是举例,实际上不要设置这么简单,不安全 。
    设置Redis默认用户密码的情况。新增 restart 脚本内容,增加密码内容。
#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.

### BEGIN INIT INFO
# Provides:     redis_6379
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    Redis data structure server
# Description:          Redis data structure server. See https://redis.io
### END INIT INFO

REDISPORT=6379
EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli

PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/etc/redis/${REDISPORT}.conf"

case "$1" in
   start)
       if [ -f $PIDFILE ]
       then
               echo "$PIDFILE exists, process is already running or crashed"
       else
               echo "Starting Redis server..."
               $EXEC $CONF
       fi
       ;;
   stop)
       if [ ! -f $PIDFILE ]
       then
               echo "$PIDFILE does not exist, process is not running"
       else
               PID=$(cat $PIDFILE)
               echo "Stopping ..."
               $CLIEXEC -p $REDISPORT -a 123456 shutdown
               while [ -x /proc/${PID} ]
               do
                   echo "Waiting for Redis to shutdown ..."
                   sleep 1
               done
               echo "Redis stopped"
       fi
       ;;
   restart)
   	   "$0" stop
   	   sleep 3
   	   "$0" start
   	   ;;
   *)
       echo "Please use start or stop as first argument"
       ;;
esac

(4)给 redis_6379 初始化脚本赋可执行的权限。

chmod +x /etc/init.d/redis_6379

给 redis_6379 初始化脚本赋可执行的权限
 

7、复制 redis-6.2.7 目录下的模板配置文件 redis.conf/etc/redis 目录下,同时重命名为 6379.conf

sudo cp /usr/local/redis-6.2.7/redis.conf /etc/redis/6379.conf

复制 redis-stable 目录下的模板配置文件 redis.conf 到 /etc/redis 目录下,同时重命名为 6379.conf
 

8、在 /var/redis 目录中创建一个目录 6379,该目录将用作 Redis 的数据和工作目录。

sudo mkdir /var/redis/6379

在 /var/redis 目录中创建一个目录 6379,该目录将用作 Redis 的数据和工作目录
 

9、方法一(参数细节说明值得一看,操作麻烦些)修改配置文件6379.conf参数默认值:使用vim修改配置文件 /etc/redis/6379.conf

(1)编辑 6379.conf 文件。

vim /etc/redis/6379.conf

(2)修改参数值。注意:6379.conf 配置文件有2053行,要找到指定参数位置不方便,可以通过行号快速跳转。要想了解如何设置显示行号和跳转,请参考教程【Linux中vim编辑文件显示行号(临时和永久两种方式)】和【Linux中vim编辑文件跳转指定的行和列】。此处有操作个小技巧:按 i 键进入到编辑模式,修改内容后,再按 Esc 键切换到正常模式,输入 ngg 跳转到第n行(n代表行号),例如跳转到第66行,即 66gg ,继续按 i 键进入到编辑模式修改下一部分内容。最后记得输入 :wq 保存并退出。

  • 行号 75 ,原内容【bind 127.0.0.1 -::1】。默认只支持 redis-cli 本地连接 redis-server ,不支持远程连接,例如第三方工可视化具 RESP(旧版叫 Redis Desktop Manager)。【支持远程连接参数值修改如下】
bind * -::*

修改75行bind参数值

 

  • 行号 98 ,原内容【port 6379】。官方默认端口号就是 6379 ,此处可以改为别的端口,但是不建议这么做,使用官方的默认值是最好的。如果修改端口,记得也要修改 /etc/init.d/ 下的 redis_6379 文件里面的参数“REDISPORT”的值为要修改的端口。【这个参数不用修改,如果修改端口了,需要修改一大堆关联的文件的参数值!】
port 6379

不用修改98行port参数值

 

  • 行号 259 ,原内容【daemonize no】。默认值 no 会禁止 redis-server 在守护进程(后台)中运行。【需要修改为 yes】
daemonize yes

修改259行daemonize参数值

 

  • 行号 291 ,原内容【pidfile /var/run/redis_6379.pid】。当 server 是在守护进程中运行才会使用到 redis_6379.pid 文件,会将程序的 pid 写入到此文件中,可以用来停止 redis-sever 进程。注意:如果上面的端口6379修改了,这个pid文件也要修改为 redis_修改的端口.pid 样式的文件,因为 /etc/init.d/ 下的 redis_6379 文件中,参数“PIDFILE”的作用和此处的参数配置作用是一样的,两者需要配置统一,所以不要随意修改端口!】【这个参数不用修改】
pidfile /var/run/redis_6379.pid

不用修改291行pidfile参数值

 

  • 行号 299 ,原内容【loglevel notice】。有4个日志级别:debug(调试)、verbose(冗长的)、notice(公告)、warning(警告),默认是notice级别的,生产环境使用notice级别。需要调试就使用 debug 或 verbos 级别。【这个参数不用修改】
loglevel notice

不用修改299行loglevel参数值

 

  • 行号 304 ,原内容【logfile “”】。【这个参数修改为日志文件的路径】
logfile /var/log/redis_6379.log

修改304行logfile参数值

 

  • 行号 456 ,原内容【dir ./】。【这个参数修改为要存放的数据目录】
dir /var/redis/6379

修改456行dir参数值

 

  • 行号 903 ,原内容【# requirepass foobared】。给默认用户设置密码,主要是使用 redis-cli 连接 redis-server时,需要通过密码校验。配置文件默认是注释这个参数的,代表无密码连接。在云服务器上安装Redis,肯定要设置Redis用户密码。此处 123456 密码过于简单,不建议这么做,很不安全。 【此处参数修改为指定的密码,设置的密码不能包含一些特殊字符,如 # & $ 三个,因为初始化脚本 redis_6379 使用这些字符会使Redis服务的stop功能失效,笔者在这里踩了坑。经过验证,包含 @ % * 这三个字符是没有问题的】
requirepass 123456

修改903行requirepass参数值

 

10、方法二(参数细节说明请看方法一,操作简单)修改配置文件6379.conf参数默认值:使用sed替换配置文件 /etc/redis/6379.conf 中参数默认的值。反斜杠“\”代表转义符,即将某些特殊字符转义。

(1)行号 75 ,原内容【bind 127.0.0.1 -::1】。

sed -i 's/bind 127.0.0.1 -::1/bind * -::*/' /etc/redis/6379.conf

(2)行号 259 ,原内容【daemonize no】。

sed -i 's/daemonize no/daemonize yes/' /etc/redis/6379.conf

(3)行号 304 ,原内容【logfile “”】。

sed -i 's/logfile \"\"/logfile \/var\/log\/redis_6379.log/' /etc/redis/6379.conf

(4)行号 456 ,原内容【dir ./】。

sed -i 's/dir \.\//dir \/var\/redis\/6379/' /etc/redis/6379.conf

(5)行号 903 ,原内容【# requirepass foobared】。如果Redis是部署到云服务器上,不要设置 123456 这么简单的密码,不安全。此处最好看看方法一中的红色字体注意事项。

sed -i 's/\# requirepass foobared/requirepass 123456/' /etc/redis/6379.conf

 

11、设置开机启动执行 redis_6379 初始化脚本文件,方式有两种,官方的方式在Centos系统下会报错。

(1)推荐的一种方式(Centos下可行:rc.local 文件里写入执行redis_6379初始化脚本的指令。一定要更改 /etc/rc.d/rc.local 文件为 可执行(x)权限,默认 /etc/rc.d/rc.local 没有可执行(x)权限,即使软链接 /etc/rc.local 有可执行(x)权限也没有用,不然开机是无法自启动Redis服务的,笔者在这里踩了坑。其实 /etc/rc.local 只是 /etc/rc.d/rc.local 的软链接

  • rc.local 文件里写入执行redis_6379初始化脚本的指令:
echo "sudo /etc/init.d/redis_6379 start &" >> /etc/rc.local

rc.local 文件里写入执行redis_6379初始化脚本的指令

  • 更改 /etc/rc.d/rc.local 文件为 可执行(x)权限,默认是没有的:
chmod +x /etc/rc.d/rc.local

更改 /etc/rc.d/rc.local 文件为 可执行(x)权限
 
(2)官方文档提到的方式(Centos下似乎不可行:使用 update-rc.d 命令添加Redis初始化脚本(redis_6379)到默认运行级别。需要安装包含 update-rc.d 功能的相关组件,查阅资料得知,file-rc、sysv-rc、init-system-helpers 都存在 update-rc.d ,可能只限于Debian系统和Ubuntu系统,笔者试过使用 yum 来下载,提示没有可用的包。

sudo update-rc.d redis_6379 defaults

使用 update-rc.d 命令添加Redis初始化脚本(redis_6379)到默认运行级别
 
使用yum下载组件file-rc、sysv-rc、init-system-helpers 都提示无效的包
 

12、执行 redis_6379 初始化脚本文件:启动(start)、重启(restart)、停止(stop)。

(1)启动(start)

sudo /etc/init.d/redis_6379 start

redis_6379 初始化脚本文件执行启动(start)1
 
redis_6379 初始化脚本文件执行启动(start)2

 
(2)重启(restart)

sudo /etc/init.d/redis_6379 restart

redis_6379 初始化脚本文件执行重启(restart)

 
(3)停止(stop)

sudo /etc/init.d/redis_6379 stop

redis_6379 初始化脚本文件执行停止(stop)

 

四、连接测试

1、使用 redis-cli 本地连接测试

(1)使用 redis-cli 命令连接 redis-server,使用 ping 测试,发现需要密码验证。

redis-cli

(2)输入 auth 123456 ,验证密码,返回OK代表验证通过。

auth 123456

(3)继续 ping ,返回 PONG 代表验证和 redis-server 正常连接。

auth 123456

使用 redis-cli 本地连接测试

 

2、使用第三方可视化工具 RESP(旧版叫 Redis Desktop Manager) 远程连接测试

(1)因为使用的是云服务器Centos7,所以需要在安全组中**开放 6379 端口,读者可以根据自己的云服务器的安全组规则来设置,不同品牌的云服务器设置不一样,但原理是相通的。如果使用虚拟机安装的Centos7,可以关闭防火墙或者设置过滤端口,虚拟机中的Centos7建议不要关闭防火墙。云服务器Centos7禁止关闭防火墙。可参考教程【Centos中防火墙(Firewall)操作(允许端口、删除端口、查看端口列表、重启、停止、开机启动等)**】。
 
云服务器Centos7安全组开发6379端口1
 
云服务器Centos7安全组开发6379端口2
 
(2)使用 RESP 工具连接,输入IP和密码,测试连接是正常。
 
使用 RESP 工具连接,输入IP和密码,测试连接是正常 

五、总结

1、安装部署中都很详细地说明Redis安装细节和注意事项,特别是设置Redis默认用户密码那一块,不能包含某些特殊字符,目前笔者只验证那特殊6个字符。

2、如果使用 kill -9 pid 的方式强制关闭 redis-server,再次启动会报 pid 文件存在的错误,使用 rm -rf 命令强制删除redis_6379.pid 即可。

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

写最好的最新Redis6(redis-6.2.7)在云服务器Centos7安装部署教程(参考官方文档) 的相关文章

  • Android-注解篇

    1 什么是注解 从JDK 5 开始 xff0c Java 增加了注解 xff0c 注解是代码里的特殊标记 xff0c 这些标记可以在编译 类加载 运 行时被读取 xff0c 并执行相应的处理 通过使用注解 xff0c 开发人员可以在不改变原
  • 新品BCM6755A1KFEBG/MT7921LE/MT7921AU WiFi芯片

    博通在WiFi市场具有相当的实力 在WiFi6上有下面这几个解决方案 xff1a 型号 xff1a BCM6755 BCM6755A1KFEBG 类型 xff1a 四核1 5GHz CPU 封装 xff1a BGA 批次 xff1a 新 B
  • Ubuntu : GPG签名验证错误 解决之道sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 6DFBCBAE

    Ubuntu GPG签名验证错误 解决之道 转载 sudo apt key adv keyserver keyserver ubuntu com recv keys Key Where key 61 61 the gpg key id Th
  • T265深度图像输出

    1 T265深度图像输出 1 1 环境依赖 T265摄像头python3pip3opencv pythonpyrealsense2 1 2 安装运行环境 安装秘钥 span class token function sudo span ap
  • Linux版本号串记录(ubuntu系列)

    Linux version 4 4 0 112 generic buildd 64 lgw01 amd64 010 gcc version 5 4 0 20160609 Ubuntu 5 4 0 6ubuntu1 16 04 5 135 U
  • 死锁的四个必要条件

    死锁 在高并发中是一个常见的名词 产生的四个必要条件如下 xff1a 互斥条件 xff1a 一个资源同一时间能且只能被一个线程访问 xff1b 不可掠夺 xff1a 当资源被一个线程占用时 xff0c 其他线程不可抢夺该资源 xff1b 请
  • Sphinx index.rst

    假设我们有两个文本file1 rst和file2 rst他们的内容如下 file1 rst span class hljs header file1 title1 61 61 61 61 61 61 61 61 61 61 61 61 sp
  • Git - 图形化界面操作

    目录 1 新建仓库 2 代码提交 3 代码回滚 4 新建分支 5 合并分支 6 重置合并 7 分支变基 8 分支优选 Git 的图形化界面操作 xff0c 使用 Idea 进行演示 1 新建仓库 对于一个代码仓库 Create Git re
  • CMakeLists

    1 指定 cmake 的最小版本 cmake minimum required VERSION 3 4 1 2 设置项目名称 xff0c 它会引入两个变量 demo BINARY DIR 和 demo SOURCE DIR xff0c 同时
  • 七步实现STM32MP157多核协同工作(Cortex-A7与Cortex-M4通信)

    写在前面 xff1a STM32MP157是ST进军Linux的首款微处理器 xff0c 采用MCU 43 MPU的组合 xff0c 集成两颗主频微800MHz的Cortex A7应用处理器内核 xff08 支持开源linux操作系统 xf
  • 【实战】STM32 FreeRTOS移植系列教程4:FreeRTOS 软件定时器

    写在前面 xff1a 本文章为 STM32MP157开发教程之FreeRTOS操作系统篇 系列中的一篇 xff0c 笔者使用的开发平台为华清远见FS MP1A开发板 xff08 STM32MP157开发板 xff09 stm32mp157是
  • 【实战】STM32 FreeRTOS移植系列教程5:FreeRTOS消息队列

    写在前面 xff1a 本文章为 STM32MP157开发教程之FreeRTOS操作系统篇 系列中的一篇 xff0c 笔者使用的开发平台为华清远见FS MP1A开发板 xff08 STM32MP157开发板 xff09 stm32mp157是
  • 学习嵌入式linux为什么推荐stm32mp157开发板?

    stm32mp157是ST推出的一款双A7 43 M4多核异构处理器 xff0c 既可以学习linux xff0c 又可以学习stm32单片机开发 xff0c 还可以拓展物联网 人工智能方向技术学习 xff0c 并极大丰富linux应用场景
  • STM32 Linux开发板——教程+视频+项目+硬件

    STM32 Linux开发板 适合入门进阶学习的Linux开发板 xff1a 华清远见FS MP1A开发板 xff08 STM32MP157开发板 xff09 开发板介绍 FS MP1A开发板是华清远见自主研发的一款高品质 高性价比的Lin
  • 编程语言对比 面向对象

    C 43 43 面向对象 java面向对象 python面向对象 java中是public int a 61 10 C 43 43 中是 public int a 61 10 C 43 43 中有拷贝构造
  • 嵌入式linux物联网毕业设计项目智能语音识别基于stm32mp157开发板

    stm32mp157开发板FS MP1A是华清远见自主研发的一款高品质 高性价比的Linux 43 单片机二合一的嵌入式教学级开发板 开发板搭载ST的STM32MP157高性能微处理器 xff0c 集成2个Cortex A7核和1个Cort
  • CMake(一)

    CMake xff08 一 xff09 简述 在之前的文章中介绍了 qmake的使用 相比qmake xff0c CMake稍微复杂一点 xff0c 它使用CMakeList txt文件来定制整个编译流程 同时 xff0c CMake会根据
  • LTE网元功能

    LTE 网元功能 2015 03 30 22 33 31 分类 xff1a NetworkProtocols 举报 字号 订阅 下载LOFTER 我的照片书 主要网元功能 eNodeB Radio Resou
  • [C++] 32位C++程序,计算sizeof的值

    sizeof str 61 6 字符串数组 xff0c 大小是六个字节 加上 39 0 39 共六个 sizeof p 61 4 指针的内容就是一个指向目标地址的整数 xff0c 所以不管指向char int还是其他 xff0c 32位机指
  • 串口打印printf

    串口打印printf 1 配置串口2 添加代码3 使用MDK勾选Mircro LIB 1 配置串口 打开STM32CubeMX xff0c 创建工程 xff0c 配置串口 2 添加代码 重写fputc函数 xff0c 需要包含头文件 inc

随机推荐

  • 22.Ubuntu出现“由于没有公钥,无法验证下列签名”

    由于没有公钥 xff0c 无法验证下列签名 1 无公钥错误2 输入命令导入公钥3 注意 1 无公钥错误 使用sudo apt update时出现以下错误 xff1a 我图中的公钥就是 xff1a 3B4FE6ACC0B21F32 xff08
  • nyist 27 水池数目(dfs搜索)

    xfeff xfeff 水池数目 时间限制 xff1a 3000 ms 内存限制 xff1a 65535 KB 难度 xff1a 4 描述 南阳理工学院校园里有一些小河和一些湖泊 xff0c 现在 xff0c 我们把它们通一看成水池 xff
  • XTUOJ 1176 I Love Military Chess(模拟)

    xfeff xfeff I Love Military Chess Accepted 45 Submit 141Time Limit 1000 MS Memory Limit 65536 KB 题目描述 陆军棋 xff0c 又称陆战棋 xf
  • 数据结构课程设计之一元多项式的计算

    数据结构不是听会的 xff0c 也不是看会的 xff0c 是练会的 xff0c 对于写这么长的代码还是心有余也力不足啊 xff0c 对于指针的一些操作 xff0c 也还是不熟练 xff0c 总出现一些异常错误 xff0c 对于数据结构掌握还
  • Unity官方文档(英文)

    地址 xff1a https docs unity3d com Manual UnityManual html
  • 数据结构课程设计之通讯录管理系统

    数据结构的第二个课程设计 xff0c 在c语言课程设计的基础上加以改进 xff0c xff08 加强版 xff09 xff0c 保存一下代码 xff0c 对文件的处理 xff0c 还是有一点一问题 xff0c 还有待改进 include l
  • 在网页中添加音乐

    最近在折腾一个网页 xff0c 对于一个有强迫症的人来说 xff0c 就想在网页中插入音乐 xff0c xff08 当做背景音乐 xff09 xff0c 然后自己百度了好多资料 xff1b 就在这里总结一下 xff1a 第一步 xff1a
  • nyist oj 214 单调递增子序列(二) (动态规划经典)

    单调递增子序列 二 时间限制 xff1a 1000 ms 内存限制 xff1a 65535 KB 难度 xff1a 4 描述 给定一整型数列 a1 a2 an xff08 0 lt n lt 61 100000 xff09 xff0c 找出
  • 思科CCNA第一学期期末考试答案

    1 第 3 层头部包含的哪一项信息可帮助数据传输 xff1f 端口号 设备物理地址 目的主机逻辑地址 虚拟连接标识符 2 IP 依靠 OSI 哪一层的协议来确定数据包是否已丢失并请求重传 xff1f 应用层 表示层 会话层 传输层 3 请参
  • hexo博客出现command not found解决方案

    由于前一段时间忙于考试 xff0c 也有好久没有去更新博客了 xff0c 今天去添加友链的时候 xff0c 突然发现用不了了 xff0c 出现了conmand not found的提示 xff1a 按照字面上的翻译就是 找不到所使用的命令
  • 思科CCNA第二学期期末考试答案

    1 关于数据包通过路由器传输时的封装和解封的叙述 xff0c 下列哪三项是正确的 xff1f xff08 选择三项 xff09 路由器修改 TTL 字段 xff0c 将其值减 1 路由器将源 IP 更改为送出接口的 IP 路由器保持相同的源
  • Hexo版本升级和Next主题升级之坑

    缘起 差不多用了一年hexo的3 2 0版本 xff0c next主题版本也用的5 0的 xff0c 本来用的好好的 xff0c 但是最近访问其他人的博客 xff0c 发现访问速度比我的提升了不止一点点 xff0c 遂决定折腾一番 过程 H
  • Python中JSON的基本使用

    JSON JavaScript Object Notation 是一种轻量级的数据交换格式 Python3 中可以使用 json 模块来对 JSON 数据进行编解码 xff0c 它主要提供了四个方法 xff1a dumps dump loa
  • 卷积和快速傅里叶变换(FFT)的实现

    卷积运算 卷积可以说是图像处理中最基本的操作 线性滤波通过不同的卷积核 xff0c 可以产生很多不同的效果 假如有一个要处理的二维图像 xff0c 通过二维的滤波矩阵 xff08 卷积核 xff09 xff0c 对于图像的每一个像素点 xf
  • 每个程序员和设计师可做的10项运动

    本文转载自 码农网 程序员 和设计师大部分时间都坐在电脑前 有效的锻炼有助于他们更好地工作 传统的 xff1a 当坐在电脑桌前的时候 脚触地 双手在肘部弯曲 打字时手应搁在桌子上 键盘和鼠标应在触手可及的地方 显示屏应在视线水平上 xff0
  • OKhttpUtils

    public class OkUtils static final int GET EXCUTE 61 111 static final int GET ENQUEUE 61 222 static final int POST EXCUTE
  • 性能调优之JMH必知必会4:JMH的高级用法

    性能调优之JMH必知必会4 xff1a JMH的高级用法 JMH必知必会系列文章 xff08 持续更新 xff09 一 前言二 JMH的高级用法1 添加JMH依赖包2 Asymmetric Benchmark3 Interrupts Ben
  • 性能调优之JMH必知必会5:JMH的Profiler

    性能调优之JMH必知必会5 xff1a JMH的Profiler JMH必知必会系列文章 xff08 持续更新 xff09 一 前言二 JMH的Profiler1 添加JMH依赖包2 StackProfiler3 GcProfiler4 C
  • 性能调优之JMH必知必会3:编写正确的微基准测试用例

    性能调优之JMH必知必会3 xff1a 编写正确的微基准测试用例 JMH必知必会系列文章 xff08 持续更新 xff09 一 前言二 编写正确的微基准测试用例1 添加JMH依赖包2 避免DCE xff08 Dead Code Elimin
  • 写最好的最新Redis6(redis-6.2.7)在云服务器Centos7安装部署教程(参考官方文档)

    一 前言 Redis官方下载地址 xff1a https redis io download redis downloads 本教程参考官方文档 xff0c 在云服务器Centos7上安装部署 Redis6 最新版 Redis 6 2 7