一、全局命令
1、查询键
keys * 查询所有的键,会遍历所有的键值,复杂度O(n)
2、键总数
dbsize 查询键总数,直接获取redis内置的键总数变量,复杂度O(1)
3、检查键是否存在
exists key 存在返回1,不存在返回0
4、删除键O(k)
del key [key...] 返回结果为成功删除键的个数
5、键过期
expire key seconds 当超过过期时间,会自动删除,key在seconds秒后过期
expireat key timestamp 键在秒级时间戳timestamp后过期
pexpire key milliseconds 当超过过期时间,会自动删除,key在milliseconds毫秒后过期
pexpireat key milliseconds-timestamp key在豪秒级时间戳timestamp后过期
ttl 命令可以查看键hello的剩余过期时间,单位:秒(>0剩余过期时间;-1没设置过期时间;-2键不存在)
pttl是毫秒
192.168.225.129:6379> expire k2 100
(integer) 1
192.168.225.129:6379> ttl k2
(integer) 91
192.168.225.129:6379> ttl ma
(integer) -1
192.168.225.129:6379>
6、键的数据结构类型
type key 如果键hello是字符串类型,则返回string;如果键不存在,则返回none
7、键重命名
rename key newkey
renamenx key newkey 只有newkey不存在时才会被覆盖
8、随机返回一个键
randomkey
9、迁移键
(1)move key db (不建议再生产环境中使用)把指定的键从源数据库移动到目标数据库
(2)dump+restore
dump key
Restore key ttl value
Dump+restore可以实现在不同的redis实例之间进行数据迁移的功能,整个迁移的过程分为两步;
1)在源redis上,dump命令会将键值序列化,格式采用的是RDB格式
2)在目标redis上,restore命令将上面序列化的值进行复原,其中ttl参数代表过期时间,ttl=0代表没有过期时间
例子:
源redis
192.168.225.129:6379> get redis
"world"
192.168.225.129:6379> dump redis
"\x00\x05world\a\x00\xe6\xe3\xe9w\xd8c\xa7\xd8"
目标redis
192.168.225.128:6379> get redis
(nil)
192.168.225.128:6379> restore redis 0 "\x00\x05world\a\x00\xe6\xe3\xe9w\xd8c\xa7\xd8"
OK
192.168.225.128:6379> get redis
"world"
(3)migrate
migrate实际上是吧dump、restore、del 3个命令进行组合,从而简化了操作步骤。
Migrate host port key [ key ......] destination-db timeout [replace]
源redis中执行
192.168.225.129:6379> migrate 192.168.225.128 6379 flower 0 1000 replace
(将键flower迁移至目标192.168.225.128:6379的库0中,超时时间为1000毫秒,replace表示目标库如果存在键flower,则覆盖)
10、遍历键
(1)全量遍历键
keys pattern
例如:keys h , keys [r,l]edis ,keys 等等
(2)渐进式遍历
scan 它可以有效的解决keys命令存在的阻塞问题,scan每次的额复杂度是O(1)
数据库管理
1、切换数据库
select dbIndex
默认16个数据库:0-15,进入redis后默认是0库。不建议使用多个数据库
2、flushdb / flushall
用于清除数据库,flushdb只清除当前数据库,flushall清除所有数据库。
二、针对key的操作
1、设置值 O(1)
set key value [ex] [px] [nx|xx]
ex为键值设置秒级过期时间
px为键值设置毫秒级过期时间
nx键必须不存在,才可以设置成功,用于添加
xx与nx相反,键必须存在,才可以设置成功,用于更新
setnx、setex 与上面的nx、ex作用相同
2、获取值O(1)
get key 不存在则返回nil
3、批量设置值O(k)
mset key value [key value ......]
mset a 1 b 2 c 3 d 4
4、批量获取值O(k),k是键的个数
mget key [key ......]
5、计数O(1)
incr key
decr key /inceby key increment /decrby key increment
返回结果分为3中情况:
值不是整数,返回错误;
值是整数,返回自增后的结果;
键不存在,按照值为0自增,返回结果为1。
6、追加值O(1)
append key value 可以向字符串尾部追加值
7、字符串长度O(1)
strlen key
每个汉字占用3个字字节
8、设置并返回原值O(1)
getset key value
``
9、设置指定位置的字符O(n),n是字符串长度
setrange key offeset value
192.168.225.129:6379> get liming
"class4"
192.168.225.129:6379> setrange liming 0 m
(integer) 6
192.168.225.129:6379> get liming
"mlass4"
192.168.225.129:6379>
10、获取部分字符串
getrange key start end start和end分别为开始和结束的偏移量,偏移量从0开始
三、 Hash操作
1、设置值
hset key field value
还提供了hsetnx命令
Eg:hset user:1 name tom
2、获取值
hget key field
192.168.225.129:6379> hset user:1 name Tom
(integer) 1
192.168.225.129:6379> hget user:1 name
"Tom"
192.168.225.129:6379> hget user:1 age
(nil)
3、删除field
hdel key field [field ......] 会删除一个或多个field,返回结果为成功删除fiel的个数
4、计算field的个数
hlen key
5、批量设置或获取field-value
Hmget key field [field ......]
Hmset key field value [field value]
6、判断field是否存在
hexists key field
7、获取所有field
hkeys key
192.168.225.129:6379> hkeys user:1
1) "name"
2) "age"
3) "grand"
4) "city"
8、获取所有value
hvals key
192.168.225.129:6379> hvals user:1
- "Tom"
- "20"
- "3"
- "beijing"
9、获取所有的field、value
hgetall key
10、hincrby hincrbyfloat 作用域是field
hincrby key field
hincrbyfloat key field
11、计算value字符串的长度
hstrlen key field
四、列表List操作
列表类型原来存储多个有序的字符串,可以重复
列表的4中操作类型
操作类型 操作
添加 rpush 、lpush、linsert
查 lrange、lindex、llen
删除 lpop 、rpop、 lrem、ltrim
修改 lset
阻塞操作 blpop、brpop
1、添加
(1)从右边插入元素
rpush key value [value......]
(2)从左边插入元素
lpush key value [value......]
(3)向某个元素前或者后插入元素
linsert key before|after pivot value
linsert命令会从列表中找到等于pivot的元素,在其前或者后插入一个新的元素value
192.168.225.129:6379> rpush mylist a b c d e f b a
(integer) 8
192.168.225.129:6379> linsert mylist after f g
(integer) 9
192.168.225.129:6379> lrange mylist 0 -1
- "a"
- "b"
- "c"
- "d"
- "e"
- "f"
- "g"
- "b"
- "a"
2、查找
(1)获取指定范围内的元素列表
lrange key start end 索引下标从左到右分别是0到N-1,从右到左分别是-1到-N;end选项包含了自身
lrange key 0 -1 可以从左到右获取列表的所有元素
lrange mylist 1 3 获取列表中第2个到第4个元素
(2)获取列表指定下标的元素
lindex key index
(3)获取列表长度
llen key
3、删除
(1)从列表右侧弹出元素
rpop key
(2)从列表左侧弹出元素
lpop key
(3)删除指定元素
lrem key count value
Lrem命令会从列表中找到=value的元素进行删除,根据count的不同分为3中情况
Count>0,从左到有,删除最多count个元素
Count<0,从右到左,删除最多count绝对值个元素
Count=0,删除所有
列表listaaa为a a a a java php b a b
192.168.225.129:6379> lrem listaaa 5 a
(integer) 5
192.168.225.129:6379> lrange listaaa 0 -1
- "java"
- "php"
- "b"
- "b"
192.168.225.129:6379> lrem listaaa 3 php
(integer) 1
192.168.225.129:6379> lrange listaaa 0 -1 - "java"
- "b"
- "b"
4、修改
lset key index newValue 修改指定索引下标的元素
Eg:lset listaaa 1 python 输出为java python b
5、阻塞操作
blpop key [key ...] timeout
brpop key [key ...] timeout
blpop和brpop是lpop、rpop的阻塞版本,除了弹出方式不同,使用方法基本相同,timeout阻塞时间
(1)列表为空
brpop list:test 3 3秒后返回
brpop list:test 0 一直处于阻塞中
(2)列表不为空
brpop mylist 0 立刻返回
192.168.225.129:6379> brpop mylist 0
1) "mylist"
2) "a"
五、Set操作(不可重复)
集合内的操作
1、添加元素
sadd key element [element .....] 返回结果为添加成功的元素个数
2、删除元素
srem key element [element .....] 返回结果为删除成功的元素个数
3、计算元素个数
Scard key scard的时间复杂度为O(1),直接用redis内部的变量
4、判断元素是否在集合中
Sismember key element 在集合中则返回1,否则返回0
5、随机从集合返回指定个数元素
Srandmember key [count] count可不写,默认为1
6、从集合随机弹出元素
Spop key [count] 3.2版本开始支持[count]
7、获取所有元素
Smembers key 它和lrange、hgetall都属于比较重的命令,有时候可以使用sscan来完成
集合间的操作
1、求多个集合的交集 sinter key [ key ......]
2、求多个集合的并集 sunion key [key ......]
3、求多个集合的差集 sdiff key [key ......] 第一个key里面有的,第二个key里面没有的
4、将交集、并集、差集的结果保存
sinterstore destination key [ key ......]
sunionstore destination key [ key ......]
sdiffstore destination key [ key ......]
例如:sinterstore user:1_2:inter user:1 user:2 user:1_2:incr也是集合类型
六、ZADD操作(有序集合)
集合内
1、添加成员 时间复杂度O(log(n)), sadd为O(1)
zadd key score member[score member .....] 返回结果为添加成功的元素个数
2、计算成员个数
zcard key scard的时间复杂度为O(1),直接用redis内部的变量
3、计算某个成员分数
zsore key member
4、计算成员的排名
zrank key member
5、删除成员
zrem key member [member .......]
6、增加成员的分数
zincrby key increment member
7、返回指定排名范围的成员
zrange key start end [withscores] 从低分到高分
zrevrange key start end [withscores] 从高分到低分
8、返回指定分数范围的成员
zrange key min max [withscores] [limit offset count ] 按照分数从低分到高分
zrevrange key max min [withscores] [limit offset count ] 按照分数从高分到低分
9、返回指定分数范围的成员个数
zcount key min max
10、删除指定排名内的升序元素
zremrangebyrank key start end
11、删除指定分数范围的成员
zremrangebystore key min max
七、pub/sub(发布、订阅)
1、publish channel message 发布消息 eg:publish channel:sports 'I want to go eatting'
2、subscribe channel [channel .....] 订阅消息 eg: subscribe channel:sports
3、unsubscribe channel [channel .....] 取消订阅
4、psubscribe pattern [pattern ......] 按照模式订阅
5、unpsubscribe pattern [pattern ......] 按照模式取消订阅
6、查询订阅
pubsub channels 查看活跃的频道
192.168.225.128:6379> pubsub channels
1) "channel:sports"
2) "__sentinel__:hello"
pubsub numsub [channel ......] 查看频道订阅数 pubsub numsub channel:sports
pubsub numpat 查看模式订阅数
7、说明:
客户端在执行订阅命令之后进入了订阅状态,只能接收四个命令:subscribe、psubscribe、unsubscribe、punsubscribe;
新开启的订阅客户端,无法收到该频道之前的消息,因为redis不会对发布的消息进行持久化。
八、Transaction(事务)
8.1 discard , 取消执行事务块内的所有命令
8.2 exec , 执行事务块内的命令
8.3 multi , 标记一个事务块的开始
8.4 unwatch , 取消watch命令对所有key的监视
8.5 watch key [key ...] , 监视一个或者多个key,如果事务执行之前,这个kye被其它命令所动,则事务被打断
九、Connection(连接)
9.1 auth password , 登录redis时输入密码
9.2 echo message , 打印一个特定的信息message,测试时使用
9.3 ping , 测试与服务器的连接,如果正常则返回pong
9.4 quit , 请求服务器关闭与当前客户端的连接
9.5 select index , 切换到指定的数据库
十、Server(服务器)
10.1 bgsave , 后台异步保存数据到硬盘
10.2 client setname/client getname , 为连接设置、获取名字
10.3 client kill ip:port , 关闭地址为 ip:port的客户端
10.4 client list , 以人类可读的方式,返回所有的连接客户端信息和统计数据
10.5 config get parameter , 取得运行redis服务器的配置参数
10.6 config set parameter value , 设置redis服务器的配置参数
10.7 config resetstat , 重置info命令的某些统计数据
10.8 dbsize , 返回当前数据库中key的数量
10.9 flushall , 清空整个redis服务器的数据(删除所有数据库的所有 key)
10.10 flushdb , 清空当前数据库中的所有key
10.11 info [section] , 返回redis服务器的各种信息和统计数据
10.12 lastsave , 返回最近一次redis成功将数据保存到磁盘时的时间
10.13 monitor , 实时打印出redis服务器接收到的指令
10.14 save , 将当前 Redis 实例的所有数据快照(snapshot)以 RDB 文件的形式保存到硬盘
10.15 slaveof host port , 将当前服务器转变为指定服务器的从属服务器
10.16 slowlog subcommand [argument] , Redis 用来记录查询执行时间的日志系统
十一、导入导出
安装redis-dump
gem install redis-dump -V
导入与导出
redis-dump导出
[root@ ~]# redis-dump -u :password@172.20.0.1:6379 > 172.20.0.1.json
redis-load导入
[root@ ~]# cat 172.20.0.1.json | redis-load -u :password@172.20.0.2:6379
image.png
网友评论