Redis常用命令

查看当前所有的KEY

KEYS *

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


查看当前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 64

set-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 功能,保存路径,最大内存上线,页面多少,页面大小,最大工作线程;

点赞