Redis操作的常用命令手册

Redis操作命令总结
一、key pattern 查询相应的key
redis允许模糊查询key  有3个通配符 *、?、[]
randomkey:返回随机key  
type key:返回key存储的类型 如hash string …
exists key:判断某个key是否存在
del key:删除key
rename key newkey:改名
renamenx key newkey:如果newkey不存在则修改成功
move key 1:将key移动到1数据库
ttl key:查询key的生命周期(秒)
expire key 整数值:设置key的生命周期以秒为单位
pexpire key 整数值:设置key的生命周期以毫秒为单位
pttl key:查询key 的生命周期(毫秒)
perisist key:把指定key设置为永久有效

二、字符串类型的操作
set key value [ex 秒数] [px 毫秒数] [nx/xx]  
如果ex和px同时写,则以后面的有效期为准
nx:如果key不存在则建立
xx:如果key存在则修改其值

get key:取值
mset key1 value1 key2 value2 一次设置多个值
mget key1 key2 :一次获取多个值
setrange key offset value:把字符串的offset偏移字节改成value
如果偏移量 > 字符串长度,该字符自动补0x00
append key value :把value追加到key 的原值上
getrange key start stop:获取字符串中[start, stop]范围的值
对于字符串的下标,左数从0开始,右数从-1开始
当start>length,则返回空字符串
当stop>=length,则截取至字符串尾
如果start所处位置在stop右边,则返回空字符串
getset key nrevalue:获取并返回旧值,在设置新值

incr key:自增,返回新值,如果incr一个不是int的value则返回错误,incr一个不存在的key,则设置key为1
incrby key 2:跳2自增
incrbyfloat by 0.7: 自增浮点数 
setbit key offset value:设置offset对应二进制上的值,返回该位上的旧值
注意:如果offset过大,则会在中间填充0
offset最大到多少
2^32-1,即可推出最大的字符串为512M
bitop operation destkey key1 [key2…] 对key1 key2做opecation并将结果保存在destkey上
opecation可以是AND OR NOT XOR
strlen key:取指定key的value值的长度
setex key time value:设置key对应的值value,并设置有效期为time秒

三、链表操作
Redis的list类型其实就是一个每个子元素都是string类型的双向链表,链表的最大长度是2^32。list既可以用做栈,也可以用做队列。
list的pop操作还有阻塞版本,主要是为了避免轮询
lpush key value:把值插入到链表头部
rpush key value:把值插入到链表尾部
lpop key :返回并删除链表头部元素
rpop key: 返回并删除链表尾部元素
lrange key start stop:返回链表中[start, stop]中的元素
lrem key count value:从链表中删除value值,删除count的绝对值个value后结束
count > 0 从表头删除  count < 0 从表尾删除  count=0 全部删除
ltrim key start stop:剪切key对应的链接,切[start, stop]一段并把改制重新赋给key
lindex key index:返回index索引上的值
llen key:计算链表的元素个数
linsert key after|before search value:在key 链表中寻找search,并在search值之前|之后插入value
rpoplpush source dest:把source 的末尾拿出,放到dest头部,并返回单元值
应用场景: task + bak 双链表完成安全队列

业务逻辑: rpoplpush task bak
接收返回值并做业务处理
如果成功则rpop bak清除任务,如果不成功,下次从bak表取任务
brpop,blpop key timeout:等待弹出key的尾/头元素
timeout为等待超时时间,如果timeout为0则一直等待下去
应用场景:长轮询ajax,在线聊天时能用到

四、hashes类型及操作
Redis hash 是一个string类型的field和value的映射表,它的添加、删除操作都是O(1)(平均)。hash特别适用于存储对象,将一个对象存储在hash类型中会占用更少的内存,并且可以方便的存取整个对象。
配置: hash_max_zipmap_entries 64 #配置字段最多64个
hash_max_zipmap_value 512 #配置value最大为512字节
hset myhash field value:设置myhash的field为value
hsetnx myhash field value:不存在的情况下设置myhash的field为value
hmset myhash field1 value1 field2 value2:同时设置多个field
hget myhash field:获取指定的hash field
hmget myhash field1 field2:一次获取多个field
hincrby myhash field 5:指定的hash field加上给定的值
hexists myhash field:测试指定的field是否存在
hlen myhash:返回hash的field数量
hdel myhash field:删除指定的field
hkeys myhash:返回hash所有的field
hvals myhash:返回hash所有的value
hgetall myhash:获取某个hash中全部的field及value

五、集合结构操作
特点:无序性、确定性、唯一性
sadd key value1 value2:往集合里面添加元素
smembers key:获取集合所有的元素
srem key value:删除集合某个元素
spop key:返回并删除集合中1个随机元素(可以坐抽奖,不会重复抽到某人)   
srandmember key:随机取一个元素
sismember key value:判断集合是否有某个值
scard key:返回集合元素的个数
smove source dest value:把source的value移动到dest集合中
sinter key1 key2 key3:求key1 key2 key3的交集
sunion key1 key2:求key1 key2 的并集
sdiff key1 key2:求key1 key2的差集
sinterstore res key1 key2:求key1 key2的交集并存在res里

六、有序集合
概念:它是在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动按新的值调整顺序。可以理解为有两列的mysql表,一列存储value,一列存储顺序,操作中key理解为zset的名字。

和set一样sorted,sets也是string类型元素的集合,不同的是每个元素都会关联一个double型的score。sorted set的实现是skip list和hash table的混合体。
当元素被添加到集合中时,一个元素到score的映射被添加到hash table中,所以给定一个元素获取score的开销是O(1)。另一个score到元素的映射被添加的skip list,并按照score排序,所以就可以有序地获取集合中的元素。添加、删除操作开销都是O(logN)和skip list的开销一致,redis的skip list 实现是双向链表,这样就可以逆序从尾部去元素。sorted set最经常使用方式应该就是作为索引来使用,我们可以把要排序的字段作为score存储,对象的ID当元素存储。
zadd key score1 value1:添加元素
zrange key start stop [withscore]:把集合排序后,返回名次[start,stop]的元素 默认是升续排列 withscores 是把score也打印出来
zrank key member:查询member的排名(升序0名开始)
zrangebyscore key min max [withscores] limit offset N:集合(升序)排序后取score在[min, max]内的元素,并跳过offset个,取出N个
zrevrank key member:查询member排名(降序 0名开始)
zremrangebyscore key min max:按照score来删除元素,删除score在[min, max]之间
zrem key value1 value2:删除集合中的元素
zremrangebyrank key start end:按排名删除元素,删除名次在[start, end]之间的
zcard key:返回集合元素的个数
zcount key min max:返回[min, max]区间内元素数量
zinterstore dest numkeys key1[key2…] [WEIGHTS weight1 [weight2…]] [AGGREGATE SUM|MIN|MAX]
求key1,key2的交集,key1,key2的权值分别是weight1,weight2
聚合方法用 sum|min|max
聚合结果 保存子dest集合内
注意:weights,aggregate如何理解?
答:如果有交集,交集元素又有score,score怎么处理?aggregate num->score相加,min最小score,max最大score,另外可以通过weights设置不同的key的权重,交集时 score*weight

七、服务器相关命令
ping:测定连接是否存活
echo:在命令行打印一些内容
select:选择数据库
quit:退出连接
dbsize:返回当前数据库中key的数目
info:获取服务器的信息和统计
monitor:实时转储收到的请求
config get 配置项:获取服务器配置的信息
config set 配置项 值:设置配置项信息
flushdb:删除当前选择数据库中所有的key
flushall:删除所有数据库中的所有的key
time:显示服务器时间,时间戳(秒),微秒数
bgrewriteaof:后台保存rdb快照
bgsave:后台保存rdb快照
save:保存rdb快照
lastsave:上次保存时间
shutdown [save/nosave]
注意:如果不小心运行了flushall,立即shutdown nosave,关闭服务器,然后手工编辑aof文件,去掉文件中的flushall相关行,然后开启服务器,就可以倒回原来是数据。如果flushall之后,系统恰好bgwriteaof了,那么aof就清空了,数据丢失。

showlog:显示慢查询
多慢才叫慢?
由slowlog-log-slower-than 10000,来指定(单位为微秒)
服务器存储多少条慢查询记录
由slowlog-max-len 128,来做限制

后台启动redis 并指定配置文件
redis-server ./redis.conf &

连接本机的redis
redis-cli -p 6380

连接非本机的redis 并指定密码
redis-cli -h yourIp-p yourPort -a youPassword

查看所有的key
keys * all
keys n* n开头
查看key是否存在 ,存在返回 1, 不存在返回 0
exists key

redis下,数据库是由一个整数索引标识,而不是由一个数据库名称。默认情况下,
一个客户端连接到数据库0。redis配置文件中下面的参数来控制数据库总数:
/etc/redis/redis.conf
文件中,有个配置项 databases = 16 //默认有16个数据库

来切换到不同的数据库
select 0,1,2,3, …
每个数据库都有属于自己的空间,不必担心之间的key冲突

Redis 持久化之RDB和AOF
RDB 是 Redis 默认的持久化方案。在指定的时间间隔内,执行指定次数的写操作,
则会将内存中的数据写入到磁盘中。即在指定目录下生成一个dump.rdb文件。Redis
重启会通过加载dump.rdb文件恢复数据。

优点:
1 适合大规模的数据恢复。
2 如果业务对数据完整性和一致性要求不高,RDB是很好的选择。

缺点:
1 数据的完整性和一致性不高,因为RDB可能在最后一次备份时宕机了。
2 备份时占用内存,因为Redis 在备份时会独立创建一个子进程,将数据写入到一个临时文件(此时内存中的数据是原来的两倍哦),最后再将临时文件替换之前的备份文件。
所以Redis 的持久化和数据的恢复要选择在夜深人静的时候执行是比较合理的。

AOF :Redis 默认不开启。它的出现是为了弥补RDB的不足(数据的不一致性),
所以它采用日志的形式来记录每个写操作,并追加到文件中。Redis 重启的会根据日志文件的
内容将写指令从前到后执行一次以完成数据的恢复工作

Redis 默认开启RDB持久化方式,在指定的时间间隔内,执行指定次数的写操作,则将内存中的数据写入到磁盘中。
RDB 持久化适合大规模的数据恢复但它的数据一致性和完整性较差。
Redis 需要手动开启AOF持久化方式,默认是每秒将写操作日志追加到AOF文件中。
AOF 的数据完整性比RDB高,但记录内容多了,会影响数据恢复的效率。
Redis 针对 AOF文件大的问题,提供重写的瘦身机制。
若只打算用Redis 做缓存,可以关闭持久化。
若打算使用Redis 的持久化。建议RDB和AOF都开启。其实RDB更适合做数据的备份,留一后手。AOF出问题了,还有RDB。
到这里Redis 的持久化就介绍完了,有什么不对的地方可以指出。

通过复制可以避免master全量写硬盘的消耗:只要配置 master 的配置文件redis.conf来
“避免保存”(注释掉所有”save”命令),然后连接一个用来持久化数据的slave即可。但是这
样要确保masters 不会自动重启

但也可以通过设置从数据库的配置文件中的slave-read-only=no,以使从数据库可写,但
是因为对从数据库的任何更改都不会同步给任何其他数据库,并且一旦主数据库中的更新了
赌赢的数据就会覆盖从数据库中的改动,所以通常场景下不应该设置从数据库可写,以免导致
易被忽略的潜在应用逻辑错误。

另一个相对耗时的操作是持久化,为了提高性能,可以通过复制功能建立一个或多个从数据库,
并在从数据库中启用持久化,同时在主数据库禁用持久化,当从数据库崩溃重启后主数据库会
自动将时间同步过来,所以无需担心数据丢失

然后当主数据库崩溃时,情况就稍显复杂了。手工通过从数据库数据恢复主数据库数据时,需要严格按照以下两步进行:
1)在从数据库中使用SLAVEOF NO ONE命令将从数据库提升为主数据库继续服务。
2)启动之前崩溃的主数据库,然后使用SLAVEOF命令将其设置成新的主数据库的从数据库,即可将数据同步回来

//分布式锁
SETNX xxx true //返回1代表获取成功
SETNX xxx true //返回0代表获取失败

//分布式系统全局序列号
INCRBY xxxxx 10000

//STACK(栈) LPUSH+LPOP -FILO
QUEUE LPUSH rpop
Blocking MQ 阻塞队列 LPUSH + BRPOP

END

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值