千家信息网

NoSQL -- redis 安装 主从 配置详解 常用命令

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,Redis 也是key-value存储系统,官方站点 http://redis.io,但相对于memcache,有如下优势:1、支持更多地value类型(string、hash、lists、sets、
千家信息网最后更新 2026年11月03日NoSQL -- redis 安装 主从 配置详解 常用命令

Redis 也是key-value存储系统,官方站点 http://redis.io,但相对于memcache,有如下优势:

1、支持更多地value类型(string、hash、lists、sets、sorted sets等);

2、支持数据持久化,预防服务重启后需要重新存储;

redis 有两种文件格式:全量数据(RDB=redis database)、增量请求(aof=append only file)。

前者是将内存中的数据写进磁盘,便于下次读取文件时直接进行加载,快照形式;

后者是将redis执行的指令记录下来,重启时再执行一遍,类似于binlog存储;

两种方式可以同时用,此时重启,会优先采用AOF进行恢复;

两种方式都不用,redis就变成了内存数据库,像memcache;

redis 的存储:内存存储、磁盘存储、log文件三部分

安 装

首先wget下载源码包,https://code.google.com/archive/p/redis/downloads

举例:wget https://codeload.github.com/antirez/redis/tar.gz/2.8.21

解压:tar zxvf 2.8.21 && cd redis-2.8.21

yum install -y gcc epel-release; yum install -y jemalloc-devel //make 之前安装些工具

编译:make //因为makefile已经写好,不需要再编译,直接make就好

error:如果make出现错误,提示找不到一些东西 #我用的centos7,倒是没出现错误

解决:cd deps && make hiredis lua jemalloc linenoise && cd ../ && make

安装:make PREFIX=/usr/local/redis install //为方便管理,指定了下目录

创建:mkdir /usr/local/redis/etc && /usr/local/redis/var

wget http://www.apelearn.com/study_v2/.redis_init -O /etc/init.d/redis //老师的启动脚本

用户:useradd -s /sbin/nologin redis

权限:chmod 777 /usr/local/redis/var && chmod 755 /etc/init.d/redis

自启:chkconfig --add redis && chkconfig redis on && service redis start

数据类型

string:可以理解为memcache一样类型,一个key对应一个value,功能比mem丰富,最简单类型;

set:集合,常见于取交并差集,比如微博中的共同关注人、共同粉丝,qq的好友标签等功能;

lists:链表结构,功能push、pop、获取范围等,轻松实现排行等功能;

hash:哈希,mem中将结构化信息打包成hashmap,序列化后存储在一个字符中,比如年龄性别等;

sorted set:有序集合,比set多了权重参数score,使其能按score进行排列,插入时也有顺序;

配 置 文 件

###通用配置daemonize no            #默认情况下,redis并不是以daemon形式来运行的。pidfile /path/to/redis.pid     #当以daemon形式运行时,指向生成的pid文件bind 192.168.1.2 10.8.4.2     #指定绑定的ip,可以有多个,空格分隔port 6379              #指定监听端口unixsocket /tmp/redis.sock     #也可以监听socketunixsocketperm 755         #当监听socket时可以指定权限为755timeout 0              #客户端时间内没向服务端发请求,服务端通过此值关闭连接,0表示永不关闭tcp-keepalive 0           #TCP连接保活策略,检测客户端对否挂掉,0表示不开启loglevel notice           #日志级别,有四种debug, verbose, notice, warninglogfile ""            #定义日志路径,""表示默认syslog-ident redis         #通过syslog-enabled来控制打印到syslog,此值指定syslog里的日志标志syslog-facility local0       #指定syslog的设备,可以是USER或者local0-local7databases 16            #设置数据库的总数量###快照配置save 900 1                  #表示每15分钟且至少有1个key改变,就触发一次持久化 save 300 10                  #表示每5分钟且至少有10个key改变,就触发一次持久化save 60 10000                  #表示每60秒至少有10000个key改变,就触发一次持久save ""                    #这样可以禁用rdb持久化stop-writes-on-bgsave-error yes   #写入磁盘失败后,马上停止写操作rdbcompression yes           #是否要压缩rdbchecksum yes             #是否进行数据校验dbfilename dump.rdb            #定义快照文件的名字dir /usr/local/redis         #定义快照文件储存路劲###安全相关配置requirepass teng            #设置redis-server的密码  ##测试:redis-cli  && get key1  重启后:redis-cli -a teng  &&  get key1 会不一样输出rename-command CONFIG  teng.config     ##将CONFIG命令更名为teng.config,避免误操作,但如果使用了AOF持久化,建议不要启用该功能rename-command CONFIG ""      #也可以后面定义为空,这样就禁掉了该CONFIG命令###限制相关配置maxclients 10000            #限制最大客户端连接数maxmemory            #设定最大内存使用数,单位是bytemaxmemory-policy volatile-lru     #指定内存移除规则maxmemory-samples 3          #LRU和TTL算法都是估算值。所以你可以设置样本的大小。                    #快照key触发,那么你可以改变这个key样本的数量。###AOF持久化appendonly no             #如果是no,则开启aof持久化appendfilename "apponly.aof"      #指定aof文件名字appendfsync everysec          #三种模式,最快 no(不调用fsync),最安全always(每次写都会                     #调用fsync),默认everysec(每秒钟调用一次fsync)。no-appendfsync-on-rewrite no      # 设置yes,可避免当写入量非常大时的磁盘io阻塞auto-aof-rewrite-percentage 10    #10==当aof文件增幅达到10%时则会触发重写机制uto-aof-rewrite-min-size 64mb       #重写会有一个条件,就是不能低于64Mb###慢日志相关slowlog-log-slower-than 10000        #慢于10000ms则记录日志slowlog-max-len 128          #日志长度,大于128时删除最老的日志
### 线 上 举 例 #####daemonize yespidfile /usr/local/redis/var/redis.pidport 6379timeout 300loglevel debuglogfile /usr/local/redis/var/redis.logdatabases 16save 900 1save 300 10save 60 10000rdbcompression yesdbfilename dump.rdbdir /usr/local/redis/var/appendonly noappendfsync always

主 从 同 步

主 master192.168.1.1
从 slave192.168.1.2

按上述方式安装redis并启动,master配置文件不动,slave配置文件加下行:

slaveof 192.168.1.1 6379 //主的ip和端口

masterauth passwd //如果主上设置了密码,要加这一行

重启测试:

master >> redis-cli set key0 1 && redis-cli get key0 == 输出1

slave >> redis-cli get key0 == 输出1

slave-read-only yes       # 让从只读repl-ping-slave-period 10   # 设置slave向master发起ping的频率,每10s发起一次repl-timeout 60              # 设置slave ping不通master多少s后就超时repl-disable-tcp-nodelay no  # 开启后将会使用更少的带宽,但会有延迟,建议关闭repl-backlog-size 1mb      # 主从断开后,主先把数据写到缓冲区backuplog,再次连接从中读取数据repl-backlog-ttl 3600        # 主从断开后,缓冲区的有效期,默认1小时slave-priority 100          # 多个slave设置优先级,数值越小优先级越高,应用于集群中,min-slaves-to-write 3       # 和下面的一起使用,主发现有超过3个slave的延迟高于10s,min-slaves-max-lag 10        #那么主就会暂停写操作。这两个数值任何一个为0,则关闭该功能

常 用 命 令

string:

set key1 teng // set赋值

set key1 teng // 一个key对应一个value,多次赋值,会覆盖前面的value

get key1 // get取值

setnx key2 aaa // 返回1,get key2查看

setnx key2 bbb // 返回0,如果存在key,返回0,不会创建

setex key3 10 1 // 这个是用来给key设定过期时间的 查看时间ttl key3

mset key1 1 key2 2 c 3 // 同时设置多个key

mget key1 key2 c

Hash:

hset user1 name teng //建立hash,可以存储用户名字性别年龄等多个信息
hset user1 age 24
hset user1 job it
hgetall user1 //获取所有值

hmset user2 name teng age 24 job it //批量建立键值对
hmget user2 //获取所有值
hmget user2 name age //获取指定值

hdel user2 job //删除指定filed
hkeys user2 //打印所有的key
hvals user2 //打印所有的values
hlen user2 //查看hash有几个filed(键),返回数字

lists:
lpush lista a //从左侧压入一个元素
lpush lista b

rpush lista 1 //从右侧压入一个元素
rpush lista 2

lpop lista //从左侧取出,默认左第一个,取出之后此值就不存在了
rpop lista //从右侧取第一个元素

lrange lista 0 -1 //0 为头 左侧第一个,-1为尾 右侧第一个,没有rrange

linsert lista before 2 3 //在元素的值2的前面插入一个元素为3
lset lista 4 bbb //把第5个元素修改为bbb

lindex lista 0 //查看第1个元素,,数字为索引
lindex lista 3 //查看第4个元素
llen lista //查看链表中有几个元素

set:

sadd seta aaa //向集合seta中放入元素
smembers seta //查看集合中的所有元素
srem seta aaa //删除元素
spop seta //随机取出一个元素,删除

sdiff seta setb //求差集,以seta为标准

sinter seta setb //求交集

sunion seta setb //求并集

sdiffstore setc seta setb //求差集,并存储到了setc,查看 SMEMBMERS setc
sinterstore setd seta setb //求交集,并存储setd ,查看 SMEMBMERS setd
sunionstore sete seta setb //求并集,并存储到sete

sismember seta aaa //判断一个元素是否属于一个集合
srandmember seta //随机取出一个元素,但不删除

zset:

zadd zseta 11 123 //创建有序集合,大写ZADD 等命令的可以tab补全

zrange zseta 0 -1 //显示所有元素,按顺序显示

zrange zseta 0 -1 withscores //可以带上分值

zrangebyscore zseta 1 10 // 返回分值范围1-10的元素

zrank zseta 222 //返回元素的索引值,索引值从0开始,按score正向排序

zrevrank zseta 222 //同上,不同的是,按score反序排序

zrevrange zseta 0 -1 //反序显示所有元素,并带分值

zcard zseta //返回集合中所有元素的个数

zcount zseta 1 10 // 返回分值范围1-10的元素个数

zrem zseta 222 //删除指定元素

zremrangebyrank zseta 0 2 //删除索引范围0-2的元素,按score正向排序

zremrangebyscore zseta 1 10 //删除分值范围1-10的元素

键值相关:

keys * //取出所有key

keys m* //模糊匹配

EXPIRE key1 100 //设置key1 100s后过期

del key1 // 删除一个key ,成功返回1 ,否则返回0;

ttl key // 查看键 还有多长时间过期,单位是s,-2便是key不存在,-1没设生存时间

select 0 //代表选择当前数据库,默认进入0 数据库

exists name //有name键 返回1 ,否则返回0;

move age 1 // 把age 移动到1 数据库
persist key1 //取消key1的过期时间
randomkey //随机返回一个key

type key1 //返回键的类型

rename oldname newname //重命名key


info //返回redis数据库状态信息

dbsize //返回当前数据库中key的数目

flushdb //清空当前数据库中所有的键
flushall //清空所有数据库中的所有的key
-------------------------------------------------------------------------------------------------


元素 数据 存储 文件 数据库 日志 配置 功能 时间 内存 分值 快照 类型 范围 多个 磁盘 索引 命令 信息 右侧 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 小米移动互联网科技园 中智农互联网科技 互联网科技图片 云信互联网科技有限公司 重生之互联网科技帝国 互联网科技金融公司 万易互联网科技 四川狮子座互联网科技 深圳卡尔迅互联网科技有限公司怎么样 彤创互联网科技有限公司 浙江互联网科技研学营 速维有品互联网信息科技(苏州)有限公司 广州市恰铎互联网科技有限公司 呼和浩特新华互联网科技学院 中国互联网十大科技股排名 广州百诚互联网科技有限公司官网 下一代互联网重大应用科技园 广州三三互联网科技有限公司 互联网对科技影响 广东猫王互联网科技有限公司电话 互联网科技 科技信息互联网 上海挚品互联网科技 鑫亿盛互联网科技 威龙国际互联网科技公司 世界互联网领先科技成果获奖 厦门江牛科技互联网 九思连强互联网电子科技有限公司 兰石爱特工业互联网科技分公司 中国互联网公司的科技投入
0