当前位置: 首页 > 编程日记 > 正文

Redis安装与源码调试

linux版本:64位CentOS 6.5

Redis版本:redis-3.0.6  (更新到2016年1月22日)

Redis官网:http://redis.io/

Redis常用命令:http://redis.io/commands

1.安装Redis

# wget http://download.redis.io/releases/redis-3.2.6.tar.gz

tar xzf redis-3.2.6.tar.gz

cd redis-3.2.6

make && make install


如果报错

zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory
zmalloc.h:55:2: error: #error "Newer version of jemalloc required"
make[1]: *** [adlist.o] Error 1
make[1]: Leaving directory `/data0/src/redis-2.6.2/src'
make: *** [all] Error 2

解决办法是:

make MALLOC=libc


注意:Redis并没有自己实现内存池,没有在标准的系统内存分配器上再加上自己的东西。

redis-2.4以上自带jemalloc,你不需要加任何参数,通过zmalloc.c源码中我们可以看到,Redis在编译时,会先判断是否使用tcmalloc,如果是,会用tcmalloc对应的函数替换掉标准的libc中的函数实现。其次会判断jemalloc是否使得,最后如果都没有使用才会用标准的libc中的内存管理函数。所以用tcmalloc优化请谨慎使用,这两着分配器碎片率相差不大,建议用自带jemalloc。


如果要安装tcmalloc可以这样:

# make USE_TCMALLOC=yes

参考:利用TCMalloc替换Nginx和Redis默认glibc库的malloc内存分配


为了调试需要修改CFLAGS参数

# make CFLAGS="-g -O0" 

make命令执行完成后,会在src目录下生成5个可执行文件,分别是redis-server、redis-cli、redis-benchmark、redis-check-aof、redis-check-dump,它们的作用如下:
redis-server:Redis服务器的daemon启动程序
redis-cli:Redis命令行操作工具。当然,你也可以用telnet根据其纯文本协议来操作
redis-benchmark:Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能
redis-check-aof:更新日志检查

redis-check-dump:用于本地数据库检查

为什么没用标准的Linux安装三板斧呢?官方维基是这样说的:Redis can run just fine without a configuration file (when executed without a config file a standard configuration is used). With thedefault configuration Redis will log to the standard output so you can check what happens. Later, you canchange the default settings.

也可以make install,这样就是把可运行文件复制到/usr/local/bin里而已。

make之后,会出现一句提示:

Hint: To run 'make test' is a good idea ;)


-----------------------------------------------------------------

其实不测试,一般都可以用。但是既然人家建议了,咱们就走一下make test吧。

运行#make test

报错,提示没有You need 'tclsh8.5' in order to run the Redis test

然后到Tcl的官方网站http://www.tcl.tk/下载8.5版本

然后安装tcl8.5:

(configure和make的位置比较特殊,在安装目录的unix下,所以下面是tcl官方安装法)

#tar xvzf tcl8.5.12-src.tar.gz

#cd tcl8.5.13/unix/

#./configure

#make

#make test

#make install

注:当然,也可以简单一点,用 yum install tcl 来安装。

好了,安装好tcl之后,可以去redis目录下运行make test了,这次正常跑通。提示:

\o/ All tests passed without errors!
Cleanup: may take some time... OK

说明redis安装正常。可以运行。

-----------------------------------------------------------------

安装

# make install


2.运行Redis

redis-server被放到了src文件夹下。

启动Redis服务端

# /usr/redis-3.2.6/src/redis-server

如果没有更改daemonize no配置,会看见运行的信息。



说明:下面是2.8.17的启动界面:


注释:

▲redis的默认端口号是6379,(据redis的作者antirez的博文说,6379在是手机按键上MERZ对应的号码,而MERZ取自意大利歌女Alessia Merz的名字。而MERZ长期以来被antirez及其朋友当作愚蠢的代名词。)

▲Redis有两种存储方式,默认是snapshot方式,实现方法是定时将内存的快照(snapshot)持久化到硬盘,这种方法缺点是持久化之后如果出现crash则会丢失一段数据。因此在完美主义者的推动下作者增加了aof方式。aof即append only mode,在写入内存数据的同时将操作命令保存到日志文件。


redis.conf配置文件

就在根目录下

################################ GENERAL  ###################################### By default Redis does not run as a daemon. Use 'yes' if you need it.
# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
daemonize yes# When running daemonized, Redis writes a pid file in /var/run/redis.pid by
# default. You can specify a custom pid file location here.
pidfile /var/run/redis.pid# Accept connections on the specified port, default is 6379.
# If port 0 is specified Redis will not listen on a TCP socket.
port 6380# TCP listen() backlog.


以后台形式运行Redis

需要读取配置文件方式启动

注意,默认复制过去的redis.conf文件的daemonize参数为no,所以redis不会在后台运行,我们可以修改redis.conf文件,这个文件就是解压后的redis根目录下

daemonize yes

If you want to provide your redis.conf, you have to run it using an additional
parameter (the path of the configuration file):

% cd src
    % ./redis-server /path/to/redis.conf

# /usr/redis-3.2.6/src/redis-server /usr/redis-3.2.6/redis.conf

查看redis进程

#ps aux |grep redis


启动多个redis实例

拷贝默认的redis.conf改为redis6383.conf,打开redis6383.conf配置文件,找到port 6379这行,把6379改为6383

# /usr/redis-2.8.17/src/redis-server

启动特定配置文件

# /usr/redis-2.8.17/src/redis-server /usr/redis-2.8.17/redis6383.conf

按照默认配置文件启动

/usr/redis-3.0.6/src/redis-server /usr/redis-3.0.6/redis.conf


调用服务

默认的redis-cli是启动6379端口,如果需要连接指定服务器和端口需要这样

# /usr/redis-3.2.6/src/redis-cli -h 127.0.0.1 -p 6380



连接默认机器端口

/usr/redis-2.8.17/src/redis-cli

新增

redis> set foo bar

获取

redis> get foo"bar"

删除

redis>del foo



模糊查找

redis>keys f*

redis>keys f?o?


查看info信息

输入# info命令,可以看出内存碎片率:mem_fragmentation_ratio=2.59

默认使用的是jemalloc内存分配器



3.配置 Redis

redis的配置文件在你的安装目录里。名为:redis.conf。

简单说几点redis.conf:

redis默认不是用守护进程的,如果需要更改,把daemonize no改成daemonize yes。(测试的时候可以不改,看看打印信息。)

如果对redis默认6379端口不爽的,可以更改port 6379

如果想把数据文件放到一个指定文件夹,更改dir /opt/data/

默认是dir ./ 也就是默认放到安装目录下。

连接超时时间,timeout 300,没什么改头……

dir 是数据文件路径。默认在安装目录下。

*下面的配置二选一,详见本文注释部分2。

###### SNAPSHOTTING ######内存快照方式:

默认的内存快照策略是,

在900秒(15分钟)内,至少有1次数据变更;

或者300秒内,有至少10次数据变更;

或者60秒内,有至少1000次数据变更;时间+数据变更次数,共同影响内存快照的出现。

###### APPEND ONLY MODE ###### AOF方式

appendfsync everysec 每秒同步。这里可以注释掉,打开下面的选项appendfsync no

其余的配置,conf里面的注释写的挺清楚,我就不多废话了。大家看着自己配就行了。

可以拷贝配置文件到etc

mkdir /etc/redis

cp redis.conf /etc/redis/redis.conf

mkdir  /var/lib/redis

1. redis.conf 配置参数:

#是否作为守护进程运行

daemonize yes

#如以后台进程运行,则需指定一个pid,默认为/var/run/redis.pid

pidfile redis.pid

#绑定主机IP,默认值为127.0.0.1

#bind 127.0.0.1

#Redis默认监听端口

port 6379

#客户端闲置多少秒后,断开连接,默认为300(秒)

timeout 300

#日志记录等级,有4个可选值,debug,verbose(默认值),notice,warning

loglevel verbose

#指定日志输出的文件名,默认值为stdout,也可设为/dev/null屏蔽日志

logfile stdout

#可用数据库数,默认值为16,默认数据库为0

databases 16

#保存数据到disk的策略

#当有一条Keys数据被改变是,900秒刷新到disk一次

save 900 1

#当有10条Keys数据被改变时,300秒刷新到disk一次

save 300 10

#当有1w条keys数据被改变时,60秒刷新到disk一次

save 60 10000

#当dump .rdb数据库的时候是否压缩数据对象

rdbcompression yes

#本地数据库文件名,默认值为dump.rdb

dbfilename dump.rdb

#本地数据库存放路径,默认值为 ./

dir /var/lib/redis/

########### Replication #####################

#Redis的复制配置

# slaveof <masterip> <masterport> 当本机为从服务时,设置主服务的IP及端口

# masterauth <master-password> 当本机为从服务时,设置主服务的连接密码

#连接密码

# requirepass foobared

#最大客户端连接数,默认不限制

# maxclients 128

#最大内存使用设置,达到最大内存设置后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理后,任到达最大内存设置,将无法再进行写入操作。

# maxmemory <bytes>

maxmemory 2000000000  启用2G内存

#是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认值为no

appendonly no

#更新日志文件名,默认值为appendonly.aof

#appendfilename

#更新日志条件,共有3个可选值。no表示等操作系统进行数据缓存同步到磁盘,always表示每次更新操作后手动调用fsync()将数据写到磁盘,everysec表示每秒同步一次(默认值)。

# appendfsync always

appendfsync everysec

# appendfsync no   推荐

################ VIRTUAL MEMORY ###########

#是否开启VM功能,默认值为no

vm-enabled no

# vm-enabled yes

#虚拟内存文件路径,默认值为/tmp/redis.swap,不可多个Redis实例共享

vm-swap-file /tmp/redis.swap

#将所有大于vm-max-memory的数据存入虚拟内存,无论vm-max-memory设置多小,所有索引数据都是内存存储的 (Redis的索引数据就是keys),也就是说,当vm-max-memory设置为0的时候,其实是所有value都存在于磁盘。默认值为0。

vm-max-memory 0

vm-page-size 32

vm-pages 134217728

vm-max-threads 4

############# ADVANCED CONFIG ###############

glueoutputbuf yes

hash-max-zipmap-entries 64

hash-max-zipmap-value 512

#是否重置Hash表

activerehashing yes

注意:Redis官方文档对VM的使用提出了一些建议:

  • 当你的key很小而value很大时,使用VM的效果会比较好.因为这样节约的内存比较大.
  • 当你的key不小时,可以考虑使用一些非常方法将很大的key变成很大的value,比如你可以考虑将key,value组合成一个新的value.
  • 最好使用linux ext3 等对稀疏文件支持比较好的文件系统保存你的swap文件.
  • vm-max-threads这个参数,可以设置访问swap文件的线程数,设置最好不要超过机器的核数.如果设置为0,那么所有对swap文件的操作都是串行的.可能会造成比较长时间的延迟,但是对数据完整性有很好的保证.

2. 调整系统内核参数

如果内存情况比较紧张的话,需要设定内核参数:

echo 1 > /proc/sys/vm/overcommit_memory

这里说一下这个配置的含义:/proc/sys/vm/overcommit_memory
该文件指定了内核针对内存分配的策略,其值可以是0、1、2。
0,表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1,表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2,表示内核允许分配超过所有物理内存和交换空间总和的内存
Redis在dump数据的时候,会fork出一个子进程,理论上child进程所占用的内存和parent是一样的,比如parent占用的内存为 8G,这个时候也要同样分配8G的内存给child, 如果内存无法负担,往往会造成redis服务器的down机或者IO负载过高,效率下降。所以这里比较优化的内存分配策略应该设置为 1(表示内核允许分配所有的物理内存,而不管当前的内存状态如何)

4.调试debug

注意由于redis默认是启用了内存优化的,所以必须修改编译选项。不然,在gdb内打印变量时提示"<value optimized out>",这多半是因为gcc的优化导致,我们可以加上-O0选项来强制禁用gcc的编译优化。

Compiling Redis without optimizations

By default Redis is compiled with the -O2 switch, this means that compiler        optimizations are enabled. This makes the Redis executable faster, but at the        same time it makes Redis (like any other program) harder to inspect using GDB.

所以要修改Makefile文件,该文件在/src目录下,修改OPTIMIZATION?=-O2选项即可,修改为O0

OPTIMIZATION?=-O0

删掉原来的redis重新修改makefile重新make,启动redis

具体调试技巧,查看指针变量

查看redis进程

# ps  aux|grep redis

gdb附加到进程

# gdb -p  进程id

(gdb)r     重新开始不然不会从main函数开始

(gdb)break main                  设置断点

(gdb)list                  查看代码

(gdb)p  变量名       查看变量内容,使用p查看变量,这个时候已经可以查看

redis调试技巧

redis会在ae.c的aeMain这个函数处循环处理事件:

// 事件处理器的主循环
void aeMain(aeEventLoop *eventLoop) {eventLoop->stop = 0;while (!eventLoop->stop) {// 如果有需要在事件处理前执行的函数,那么运行它if (eventLoop->beforesleep != NULL)eventLoop->beforesleep(eventLoop);// 开始处理事件aeProcessEvents(eventLoop, AE_ALL_EVENTS);}
}

/usr/redis-2.6.14/src/redis-cli

redis> set foo bar

OK

redis> get foo"bar"

aeMain函数会截获来自redis-cli的请求,也只有aeMain函数处理好该请求,redis-cli才会返回OK,不然就会一直等待


5.基准测试

第一先用启动命令启动redis

然后在任意目录使用命令:

# redis-benchmark-h localhost -p 6379 -c 100 -n 100000

模拟100个并发连接,100000个请求,检测host为localhost 端口为6379的redis服务器性能

原文地址:http://blog.csdn.net/unix21/article/details/9526295


6.访问限制

对redis做端口访问限制

-A INPUT -s 111.111.1.1 -p tcp --dport 6379 -j ACCEPT 
-A OUTPUT -d 111.111.1.1 -p tcp --sport 6379 -j ACCEPT


------------------------------------------------------------------------

更多参考

配置参考:CentOS下Redis 2.2.14安装配置详解

安装参考:Redis (一) 安装

调试参考:http://redis.io/topics/debugging 利用gdb调试redis-server

benchmark参数: Redis安装部署


另外需要在PHP中使用redis需要安装PHP扩展可以参考:

Redis以及Redis的php扩展安装无错版

phpredis使用方法

redis常用命令参考


相关文章:

system pause in C#

方法一&#xff1a; Console.Write("Press any key to continue . . . "); Console.ReadKey(true); 注&#xff1a;也可用ReadLine()或Read()&#xff0c;但是只能对回车进行响应&#xff0c;不能达到anykey的效果。 方法二&#xff1a; 1) 在源文件using处加入using…

C#设置当前程序通过IE代理服务器上网

注意&#xff1a;以下设置只在当前程序中有效&#xff0c;对IE浏览器无效&#xff0c;且关闭程序后&#xff0c;自动释放代码。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices;public static …

计算机科学精彩帖子收集

linux源码 LXR 源自“the Linux Cross Referencer”&#xff0c;中间的“X”形象地代表了“Cross”。与 Source Navigator 类似&#xff0c;它也是分析阅读源代码的好工具。不同的是&#xff0c;它将源代码借助浏览器展示出来&#xff0c;文件间的跳转过程成了我熟悉的点击超链…

挑战王者荣耀“绝悟” AI,我输了!

作者 | 马超责编 | 伍杏玲出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;腾讯 AI Lab 与王者荣耀联合研发的策略协作型AI&#xff0c;“绝悟”首次开放大规模开放&#xff1a;5月1日至4日&#xff0c;玩家从王者荣耀大厅入口&#xff0c;进入“挑战绝悟”测试&…

java 注解类说明

一、类中注解 SuppressWarnings ("serial"); 关键字 用途deprecation使用了不赞成使用的类或方法时的警告unchecked执行了未检查的转换时的警告&#xff0c;例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型。fallthrough当 Switch 程序块直接通往下一种…

《ArcGIS Runtime SDK for Android开发笔记》——(13)、图层扩展方式加载Google地图...

1、前言 http://mt2.google.cn/vt/lyrsm225000000&hlzh-CN&glcn&x420&y193&z9&sGalil 通过图层扩展类的方式加载Google地图的是我们通常获取Google地图的一种方式&#xff0c;根据这种方式我们可以通过拼接地图瓦片Url字符串获取瓦片数据&#xff0c;关…

调试JDK源码-一步一步看HashMap怎么Hash和扩容

调试JDK源码-一步一步看HashMap怎么Hash和扩容 调试JDK源码-ConcurrentHashMap实现原理 调试JDK源码-HashSet实现原理 调试JDK源码-调试JDK源码-Hashtable实现原理以及线程安全的原因 还是调试源码最好。 开发环境 JDK1.8NetBeans8.1 说明&#xff1a;调试HashMap的 publ…

开源一年,阿里轻量级AI推理引擎MNN 1.0.0正式发布

在经过充分的行业调研后&#xff0c;阿里淘系技术部认为当时的推理引擎如TFLite不足以满足手机淘宝这样一个亿级用户与日活的超级App。于是&#xff0c;他们从零开始自己搭建了属于阿里巴巴的推理引擎MNN。1年前&#xff0c;MNN在Github上开源&#xff0c;截止目前获得了3.9k S…

人生在成败中进步

参考文献《佛经》 人生在成败中进步佛经中有云&#xff1a;“菩萨者&#xff0c;福慧深利&#xff0c;道观双流。”“福慧双修”、“福慧双全”是众生成佛的必由之道&#xff0c;也是众生修行的理想追求。人生中&#xff0c;虽然不可能人人都能成佛&#xff0c;但是佛经有云&am…

【原】YUI压缩与CSS media queries下的bug

大概是上个月&#xff0c;使用YUI压缩一个css文件后&#xff0c;发现只要是被压缩后的css文件有部分根本无法工作&#xff0c;一直都不知啥问题引起的&#xff0c;让我感到头疼。 今天发现了只要是在媒体查询中的样式无法起作用&#xff0c;于是才开始怀疑是media被压缩后引起的…

Spring源码分析【4】-Spring扫描basePackages注解

org.springframework.beans.factory.support.DefaultListableBeanFactory 重要数据结构 /** Map of bean definition objects, keyed by bean name */private final Map<String, BeanDefinition> beanDefinitionMap new ConcurrentHashMap<String, BeanDefinition&…

c语言c++语言中静态变量,函数详解

静态变量&#xff0c;静态函数对于一些c&#xff0c;c的初学者来说&#xff0c;造成了不少的困扰。昨晚和寝室的室友讨论到这 个问题&#xff0c;想了一下&#xff0c;作了一下总结&#xff1a;虽然说c和c在很多人的眼里就是孪生姐妹&#xff0c;其实还是有很大区别的。在这里分…

深度解析MegEngine亚线性显存优化技术

基于梯度检查点的亚线性显存优化方法[1]由于较高的计算/显存性价比受到关注。MegEngine经过工程扩展和优化&#xff0c;发展出一套行之有效的加强版亚线性显存优化技术&#xff0c;既可在计算存储资源受限的条件下&#xff0c;轻松训练更深的模型&#xff0c;又可使用更大batch…

2016-04-28

2019独角兽企业重金招聘Python工程师标准>>> 1.提交form表单之前的函数(校验不错):onsubmit"return A();".2.解析XML的方式:2.1.DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准,基于"树"(DocumentBuilderFactory).2.2.SAX的优点类似于…

Spring源码分析【8】-MyBatis注解方法不能重载

代码如下&#xff1a; 这是不可以的&#xff0c;会报错&#xff1a; 2016-08-18 11:36:00,267 [main] ERROR [org.mybatis.spring.mapper.MapperFactoryBean] - Error while adding the mapper interface com.unix21.mapper.UserMapper to configuration.java.lang.IllegalArgu…

不知道这 7 大 OpenCV 函数怎么向计算机视觉专家进阶?

作者 | Lazar Gugleta译者 | Arvin&#xff0c;责编 | 夕颜头图 | CSDN付费下载自视觉中国出品 | CSDN&#xff08;ID:CSDNnews&#xff09;计算机视觉和计算机图形学现在非常流行&#xff0c;因为它们与人工智能息息相关&#xff0c;它们主要的共同点是使用同一个OpenCV库&…

MySQL5.5复制新特性

MySQL5.5复制新特性一.MySQL5.5复制改进MySQL5.5版本对MySQL Replication进行了多项的改良&#xff0c;以提供数据的完整性&#xff0c;性能和应用灵活性更高水平。1.Semisynchronous Replication&#xff1a;主从之间的等待机制2.Slave fsync tuning:调整slave fsync包括sync-…

GitLab 8.7发布

日前&#xff0c;GitLab 8.7版发布。该版本中&#xff0c;添加了新功能和优化&#xff0c;并小幅提升了性能。\\8.7版本发布于8.6版本整整30天之后&#xff0c;跟上了每月22日次版本的进度。最新的版本增加了在单个问题上设置到期日期的支持以及以用户所在时区而不是UTC来显示所…

Java飞行记录器 JRockit Flight Recorder JFR诊断JVM的历史性能和操作

需要展开子树&#xff0c;复制堆栈跟踪&#xff0c;就可以查看到代码调用链&#xff0c;看到自己的业务代码&#xff0c;从而定位到最耗时的代码位置&#xff1a;

vi/vim: 使用taglist插件

本节所用命令的帮助入口&#xff1a; :help helptags :help taglist.txt 上篇文章介绍了在vim中如何使用tag文件&#xff0c;本文主要介绍如何使用taglist插件(plugin)。 想必用过Source Insight的人都记得这样一个功能&#xff1a;SI能够把当前文件中的宏、全局变量、函数等t…

学会这些Python美图技巧,就等女朋友夸我了

来源 | ZackSock&#xff08;ID: ZackSock&#xff09;Python中有许多用于图像处理的库&#xff0c;像是Pillow&#xff0c;或者是OpenCV。而很多时候感觉学完了这些图像处理模块没有什么用&#xff0c;其实只是你不知道怎么用罢了。今天就给大家带了一些美图技巧&#xff0c;让…

Linux下的softlink和hardlink(转)

Linux中包括两种链接&#xff1a;硬链接(hard link)和软链接(soft link)&#xff0c;软链接又称为符号链接&#xff08;symbolic link&#xff09;创建命令&#xff1a;ln -s destfile/directory softlink #建立软连接 ln destfile hardlink #建立硬连接in…

ubuntu安装之后的最初几天一路杂记

我就随便写了啊&#xff0c;没那么正式&#xff0c;想到什么就写什么。 由于大四的毕业设计要做一个牵扯到linux的项目&#xff0c;最近不得不再次玩起了ubuntu&#xff0c;其实前一次&#xff08;大二的时候吧&#xff09;就已经在电脑上安装过一个ubuntu了&#xff0c;只不过…

百万级访问量网站的技术准备工作[转帖]

当今从纯网站技术上来说&#xff0c;因为开源模式的发展&#xff0c;现在建一个小网站已经很简单也很便宜&#xff0c;所以很多人都把创业方向定位在互联网应用。这些人里大多数不是 很懂技术&#xff0c;或者不是那么精通&#xff0c;而网站开发维护方面的知识又很分散&#x…

智能驾驶L2的黄金时代,打磨地图是关键

作者 | 自动驾驶从业者&#xff0c;中寰卫星黄亮出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;智能驾驶L2&#xff0c;以我们通俗的定义是&#xff0c;以高级辅助驾驶的产品为主的各种巡航产品&#xff0c;包括定速巡航&#xff0c;自适应巡航ACC&#xff0c;预见性…

css中的垂直居中方法

单行文字 &#xff08;外行高度固定&#xff09; line-height 行高&#xff0c; 将line-height值与外部标签盒子的高度值设置成一致就可以了。 height:3em; line-height:3em; 多行文字 图文结合&#xff08;图和单行文字&#xff09; 图文结合&#xff08;图和多行文字&#xf…

U盘挂载,gedit,vi,文本模式中文乱码等等问题

U盘或硬盘挂载 首先&#xff0c;我们要查看一下磁盘的分区信息sudo fdisk -l (注意注意&#xff0c;是小写的L&#xff0c;不是1&#xff0c;也不是i&#xff09; 这里可以看到我的硬盘情况&#xff0c;前面几个是win7系统下的C,D ,E ,F 盘。我现在是在图书馆&#xff0c;没…

一次对语音技术的彻底批判

作者 | Alexander Veysov译者 | 孙薇&#xff0c;编辑 | 夕颜出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;ImageNet的出现带来计算机视觉领域的突破发展&#xff0c;掀起了一股预训练之风&#xff0c;这就是所谓的ImageNet时刻。但与计算机视觉同样重要…

Windows下编译Chrome V8

主要还是参考google的官方文档&#xff1a; How to Download and Build V8 Building on Windows 同时也参考了一些其它的中文博客&#xff1a; 脚本引擎小pk&#xff1a;SpiderMonkey vs V8 Windows 下编译V8引擎-with visual sudio 2010 将google V8 编译成 dll v8学习笔记 步…

mysql子查询

一句话就是子查询的结果作为外部查询的比较条件 所谓子查询是指一个查询语句嵌套在另一个查询语句的内部的查询&#xff0c;也就是select里面还有select。 在select语句中先计算子查询&#xff0c;子查询的结果作为外层另一个查询的过滤条件。 子查询中常用的操作符有&#xff…