查看当前所有的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 功能,保存路径,最大内存上线,页面多少,页面大小,最大工作线程;