专栏首页linda【Redis】Redis常用命令

【Redis】Redis常用命令

IP:192.168.225.128 环境:centos7

一、全局命令

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
1) "Tom"
2) "20"
3) "3"
4) "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
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"
7) "g"
8) "b"
9) "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
1) "java"
2) "php"
3) "b"
4) "b"
192.168.225.129:6379> lrem listaaa 3 php
(integer) 1
192.168.225.129:6379> lrange listaaa 0 -1
1) "java"
2) "b"
3) "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

集合间的操作

1、交集

2、并集

3、差集

4、将交集、并集、差集的结果保存

七、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 用来记录查询执行时间的日志系统

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Redis-脚本-获取某个大key的值

    在redis中,对于一个很大的key,例如hash类型,直接查看其值会非常慢,于是想到写个脚本通过增量迭代来获取

    用户5522200
  • Redis-脚本-获取某个前缀的key

    在平时的维护中,经常会遇到要统计某个前缀的key有多少,在请求比较多的redis中,keys * 会直接导致阻塞。 可以采用scan的方式进行增量迭代,查询使用...

    用户5522200
  • 【MySQL】Mysql锁机制简介

    InnoDB存储引擎不仅会在行级别上对表数据上锁,还会在数据库内部其他多个地方使用锁,从而允许对多种不同资源提供并发访问。如:操作缓冲池中LRU列表,删除、添加...

    用户5522200
  • Redis-Nosql数据库入门

    简介 Redis是Nosql数据库的一种,可基于内存亦可持久化的日志型、是一个Key-Value数据库,多用在缓存方面 安装 Windows 下载地址, 最...

    李家酒馆酒保
  • redis配置信息以及常用命令

    本来不打算写这篇的,因为网上有很多这种的,最后想想,既然打算做一个redis系列,还是把这一篇补上,刚好这段时间有个同事做了一个redis的基础培训,整理的很好...

    程序员爱酸奶
  • Java 快速排序 关于起始方向的选择问题 为什么一定要从右边开始

    最后i、j 停留的位置的值肯定是要 小于 key 的 此时交换索引 j 和最左边元素key 符合将小于key的值放到key左边这一条件

    heasy3
  • 如何处理redis集群的hot key和big key

    redis 集群部署方式大部分采用类 Twemproxy 的方式进行部署。即通过 Twemproxy 对 redis key 进行分片计算,将 redis ke...

    akayzhang
  • 高并发系统设计-redis技术梳理

    架构师就是梳理技术,整理文档,落地技术方案,首先架构师需要梳理下redis能为我们解决什么问题,以及redis的技术门槛,redis的优势和缺点。

    用户6969969
  • redis

    1)Redis:REmote DIctionary Server(远程字典服务器)

    用户2337871
  • redis 学习(3)-- String 类型

    当我们通过 id 查找相关信息,redis 做中间层,当数据缓存在 redis 中时,我们直接返回该数据,如果 redis 中不存在,就到 MYSQL 中查...

    希希里之海

扫码关注云+社区

领取腾讯云代金券