【基础篇】Redis深入理解与实践指南(五)之Redis常用命令和配置

159 阅读9分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第10天,点击查看活动详情

常用命令

redis常用命令

查看当前所有的KEY

KEYS *
​
KEYS deepinsea*   #查看前缀为deepinsea的所有键;  

查看当前redis的配置信息

CONFIG GET *

强制停止redis快照导致redis用户没有权限写rdb文件或磁盘空间满了,解决方法

config set stop-writes-on-bgsave-error no

清除redis缓存

redis-cli
dbsize
flushall
exit

删除redis当前数据库中的所有KEY

flushdb

删除redis所有数据库中的KEY

flushall

配置参数详解

redis.conf 配置参数详解

daemonize  yes   #运行可以守护进程启动,放置于后台;
​
bind:x.x.x.x   #监听地址,建议只对本地127.0.0.1开放;
​
protect-mode yes   #redis的保护模式;
​
requirepass 密码   #设置密码;
​
timeout 0   #关闭超时;
​
tcp-keepalive 0   #在Linux上,指定值(秒)用于发送ACKs的时间,关闭连接需要双倍的时间,默认为0;
​
loglevle notice   #指定日志记录的级别。有四个级别:debug(记录很多信息,用于开发测试)、notice(常用与生产环境)、warning(只有非常重要或严重的信息才会记录到日志)、verbose(有用的信息,比debug少);
​
logfile  /var/log/redis/redis.log   #默认为stdout;
​
databases n   #可用数据库,范围在0 - (database-1);
​
save   #保存数据到磁盘(.rdb);
​
stop-writes-on-bgsave-error yes   #后台储存错误停止写;
​
rdbcompression yes   #储存到本地数据库时(持久化到rdb文件)是否压缩;
​
dbfilename dump.rdb   #本地持久化数据库文件名,默认dump.rdb;dir /var/db/redis/   #数据库文件路径,是目录;
​
salveof   #设置本机为从库,设置好master的ip及端口,它会自动从master进行数据同步;
​
masterauth   #设置主库认证的密码;
​
slave-read-only yes   #设置slave是否接受写;
​
slave-serve-stale-data yes   #从库同主库失去连接或复制正在进行时,从库是继续响应客户端请求还是否;
​
repl-disable-tcp-nodelay no   #发送到slave的延迟会降低,但将更过的带宽用于复制;
​
slave-priority 100   #master不能工作后,从众多slave中选出优先值最小的slave提升为master,优先值为0表示不能为master;
​
appendonly no   #是否开启AOF数据备份,redis会把所接收到的每一次写操作请求都追加到appendonly.aof文件,当此文件很大;
​
appendsync everysec   #AOF文件同步策略,后台会进行大量I/O;
​
no-appendfsync-on-rewrite no   #环境AOF大量I/O;
​
auto-aof-rewrite-percentage 100   #aof自动重写;
​
auto-aof-rewrite-min-size 64mb   #指定最小大小用于aof重写;
​
slowlog-log-slower-than 1000   #慢日志,记录超过特定执行时间的命令,不包括I/o;
​
slowlog-max-len 128   #slow log的长度,超过大小,最先进入队列的记录会被踢出;hash-max-zipmap-entries 512   #hash将以一种特殊的编码方式(大大减少内存使用)来储存,这是其中一个临界值;hash-max-zipmap-value 64   #另外一个临界值;list-max-ziplist-entries 512   #多个list以特定的方式编码来节省空间;list-max-ziplist-value 64set-max-intset-entries 512
​
zset-max-ziplist-entries 128
​
zset-max-ziplist-value 64
​
activerehashing yes   #Redis将在每100ms时使用1ms的CPU时间来对redis的hash表进行重新hash,可降低内存的使用;
​
client-output-buffer-limit normal 0 0 0   #限制输出缓存;
​
client-output-buffer-limit slave 256mb 64mb 60
​
client-output-buffer-limit pubsub 32mb 8mb 60
​
hz 10   #不是所有任务都以相同的频率执行,但redis按照指定的“hz”值执行检查任务;
​
aof-rewrite-incremental-fsync yes   #当一个子节点重写AOF文件时,则文件每生产32m数据进行同步;

Redis官方文档对VM的使用建议

当你的key很小但value很大时,使用VM的效果会比较好,因为这样节约内存比较大;

当key不小时,可以考虑使用一些非常方法将很大的key变成value,比如将key,value组合成一个新的value。

连接操作相关命令

quit:关闭连接;

auth:简单密码认证;

help cmd:查看命令帮助;

持久化

save:将数据同步保存到磁盘;

bgsave:将数据异步保存到磁盘;

lastsave:返回上次成功将数据保存到磁盘的Unix时戳;

远程服务控制

info:提供服务器的信息统计;

monitor:实时转储收到的请求;

slaveof:改变复制策略设置;

shundown:将数据同步保存到磁盘,然后关闭服务;

value操作命令

exists(key):判断一个key是否存在;

del(key):删除一个key;

type(key):返回值的类型;

keys(pattern):返回满足给定模式的所有key;

randomkey:随机返回key空间的一个;

keyrename(oldname,newname):重命名key;

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

expire:设定一个key的活动时间(s);

ttl:获得一个key的活动时间;

select(index):按索引查询;

move(key,dbindex):移动当前数据库中的key到dbindex数据库;

flushdb:删除当前选择的数据库中的所有key;

flushall:删除所有数据库中的所有key;

string操作命令

set(key,value):给数据库中名称为key的string赋值value;

get(key):返回数据库中名为key的string的value;

getset(key,value):给名称为key的string赋予上一次的value;

mget(key1,key2,...,key N):返回库中多个string的value;

setnx(key,value):添加string,名称为key,值为value;

setex(key,time,value):向库中添加string,设定过期时间time;

mset(key 1,value 1,...,key N,value N):批量设置多个string的值;

msetnx(key 1,value 1,...,key N,value N):如果所有名称为 key N的string都不存在,则向库中添加string,名称为 key N赋值value N;

incr(key):名称为key的string加 1 操作;

incrby(key,integer):名称为key的string增减integer;

decr(key):名称为key的string减1操作;

decrby(key,integer):名称为key的string的值附加value;

append(key,value):名称为key的值附加value;

substr(key,start,end):返回名称为key的string的value的子串;

list操作的命令

rpush(key,value):在名称为key的list尾部添加一个值为value的元素;

lpush(key,value):在名称为key的list首部添加一个值为value的元素;

llen(key)返回名称为key的list的长度;

lrange(key,start,end):返回名称为key的list中start至end之间的元素(下表从0开始);

ltrim(key,start,end):截取名称为key的list,保留start至end之间的元素;

lindex(key,index):返回名称为key的list中index位置的元素;

lset(key,index,value):给名称为key的list中index位置的元素赋值value;

lrem(key,count,value):删除count个名称为key的list中值为value的元素;

brpop(key1,key2,...,key N):rpop的block版本;

rpoplpush(srckey,dstkey):返回并删除名为srckey的list尾元素,并将该元素添加到名为dstkey的list的头部;

set操作的命令

sadd(key,member):向名为key的set中添加元素member;

srem(key,member):删除名为key的set中元素的member;

spop(key):随机返回并删除名为key的set中的一个元素;

smove(srckey,dstkey,member):将member元素从名为srckey的集合移动到名为dstkey的集合;

scard(key):返回名为key的set的基数;

sismember(key,member):测试member是否是名称为key的set的集合;

sinter(key1,key2,...,key N):求交集;

sinterstore(dstkey,key1,...,key N):求交集并将交集保存到dstkey的集合;

sunion(key1,...,key N):求并集;

sunionstore(dstkey,key 1,...,key N):求并集并将并集保存到dstkey的集合;

sdiff(key1,...,key N):求差集;

sdiffstore(dstkey,key 1,...,key N):求差集并将差集保存到dstkey的集合;

smembers(key):返回名为key的set的所有元素;

srandmember(key):随机返回名为key的set的一个元素;

zset(sorted set)操作的命令

zadd(key,score,member):向名为key的zset中添加元素member,score用于排序,如果该元素已经存在,则根据score更新该元素的顺序;

zrem(key,member):删除名为key的zset中的元素member;

zincrby(key,increment,member):如果在名为key的zset中已经存在元素member,则该元素的score增加increment,否则向集合中添加该元素,其score的值为increment;

zrank(key,member):返回名为key的zset,顺序;

zrevrank(key,member):返回名为key的zset,倒序;

zrange(key,start,end):返回名为key的zset,score顺序按index从start到end返回所有元素;

zrevrange(key,start,end):返回名为key的zset,score倒序按index从start到end返回所有元素;

zrangebyscore(key,min,max):返回名为key的zset中score大于等于min,小于等于max的所有元素;

hash操作命令

hset(key,field,value):向名为key的hash中添加元素filed----value;

hget(key,field):返回名为key的hash中field对应的value;

hmset(key,field1,value1,...,field N,value N):向名为key的hash中添加元素field----value;

hmget(key,field1,...,field N):返回名为key的hash中filed对应的value;

hincrby(key,field,integer):将名为key的hash中field的value增加integer;

hexists(key,field):名为key的hash中是否存在键为field的域;

hdel(key,field):删除名为key的hash中键为field的域;

hlen(key):返回名为key的hash中元素个数;

hkeys(key):返回名为key的hash中所有键;

hvals(key):返回名为key的hash中所有键对应的value;

hgetall(key):返回名为key的hash中所有的键(field)及其对应的value;

Redis高级特性

安全性

设置客户端连接后进行操作需要密码;

requirepass password;

redis-cli -a password 或者 进入后 auth password

主从复制

通过主从复制可以允许多个 slave 拥有和 master 相同的数据库副本;注意一下防火墙问题;

slaveof IP port;

masterauth password;

事务处理

redis对事务的支持还比较简单;

redis只能保证一个client发起的事务中的命令可以连续执行,而中间不会插入其他的client的命令;

当一个client在一个连接中发出multi命令时,这个连接会进入一个事务的上下文,连接后续命令不会不及执行,而是先放到一个队列中,当执行exec命令时,redis会顺序的执行队列中的所有命令;

持久化机制

redis持久化就是把数据从内存保存到硬盘;

redis是一个支持持久化的内存数据库;

snapshotting快照,默认的储存方式写入dump.rdb的二进制文件中,可以配置redis在 n秒内如果超过 m个key被修改就自动做快照;

appendonly file,aof方式redis会将每一次的函数都追加到文件中,当redis重启时会重新执行文件中保存的命令;

虚拟内存的使用

配置 VM 功能,保存路径,最大内存上线,页面多少,页面大小,最大工作线程。

欢迎关注白羊🐏,感谢观看ヾ(◍°∇°◍)ノ゙