redis 常见命令

基础命令

开启服务器

redis-server  redis.conf

登录客户端

redis-cli –h 127.0.0.1 –p 6379

关闭服务器

127.0.0.1:6379> shutdown
not connected> quit

关闭指定服务器

单实例关闭:redis-cli  -a 111111  shutdown
多实例关闭指定端口关闭:redis-cli  -p 6379  shutdown

查看当前库的所有key

keys *

判断某个key是否存在,如果键存在则返回整数类型1,否则返回0。

exists key 

查看你的key是什么类型

type key

删除指定的key,数据可以删除一个或者多个键,多个键用空格隔开,返回值是删除的键的个数。

del key

查看还有多少秒过期,-1表示永不过期,-2表示已过期

ttl key 

expire 为给定的key设置过期时间,单位秒

expire  key  60

pexpire 为给定的key设置过期时间,单位毫秒

pexpire  key  600

persist 取消时长设置

persist  key

切换数据库到1,默认支持16个数据库(0-15),可以通过参数database来修改默认数据库个数,默认为0号数据库。

select 1

清空当前数据库。

flushdb

清空所有数据库

flushall

1 redis字符串(String)

应用场景:比如抖音无限点赞某个视频或者商品,点一下加一次
set赋值 / get取值

set  key  value
get  key

同时mset设置 / mget获取多个键值

mset  a  1  b  2  c  3
mget  a  b  c

msetnx:同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。返回1创建成功,0则失败

msetnx  a  1  b  2  c  3

分布式锁:setex(set with expire设置带过期时间的key)、setnx(set if not exist只有在 key 不存在时设置 key 的值)

setex  key  10  value
setnx  key  value

getrange:获取指定区间范围内的值

getrange  key  0  2

incr:递增数字,incrby:递增指定系数

incr  key
incrby  key  2

decr:递减数字,decrby:递减指定系数

decr  key
decrby  key  2

append:向尾部追加值。如果键不存在则创建该键,其值为写的value,即相当于SET key value。返回值是追加后字符串的总长度。

append  key  "hi"

strlen:字符串长度,返回数据的长度,如果键不存在则返回0。注意,如果键值为空串,返回也是0。

strlen  key

2 redis哈希表(Hash)

应用场景:JD购物车早期设计目前不再采用,当前小中厂可用
hset赋值 / hget取值

hset user username chenchen
hget user username

同时hmset设置 / hmget获取多个键值

hmset person username tony age 18
hmget person age username

hsetnx(hset if not exist),当且仅当所有给定对象属性都不存在。返回1创建成功,0则失败

hsetnx  person username tony

hgetall:获取所有对象的属性和值

hgetall  person

hdel:删除对象的某个属性

hdel  person  age

hexists:判断对象的某个属性是否存在

hexists  person  age

hkeys:只获取字段名,hvals:只获取字段值

hkeys  person  
hvals  person  

hlen:获取对象属性的个数

hlen  person  

3 redis列表(List)

应用场景:微信公众号订阅的消息、动态更新商品的销量列表(卖的好的排名靠前一些,linsert)
lpush头部 / rpush尾部添加字符串元素

lpush  mylist  "value1"
rpush  mylist  "value2"

lpop头部 / rpop尾部删除字符串元素

lpop  mylist [count]
rpop  mylist [count]

lrange:返回列表中指定区间内的元素,1 表示列表的第二个元素,以此类推;-1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推

lrange  mylist  0 -1

linsert:在key对应list的特定位置之前(before)或之后(after)添加字符串元素

linsert  mylist  after "value2"  "value3"

lset:设置list中指定下标的元素值(一般用于修改操作)

lset  mylist  2  "value4"

lrem:从key对应list中删除count个和value相同的元素,count>0时,按从头到尾的顺序删除;count<0时,按从尾到头的顺序删除;count=0时,删除全部

lrem  mylist  2  "value2"

ltrim:保留指定key 的值范围内的数据,如下为保留从下标第二到最后一个下标的元素

ltrim  mylist  1 -1

llen:返回key对应list的长度

llen  mylist

lindex:返回名称为key的list中index位置的元素

lindex  mylist  1

rpoplpush:从第一个list的尾部移除元素并添加到第二个list的头部,最后返回被移除的元素值,整个操作是原子的.如果第一个list是空或者不存在返回nil

rpoplpush  list1  list2

4 redis集合(Set)

应用场景:微信朋友圈点赞查看同赞朋友、QQ内推可能认识的人、网站投票统计程序
sadd:添加元素,添加成功返回1;重复元素添加失败,返回0

sadd  key member [member ...]

srem:删除元素

srem  key member [member ...]

smembers:获取内容

smembers  key

判断元素是否在集合中

sismember  key  member

scard:获取成员个数

scard  key

spop:移除并返回集合中的一个随机元素

spop  key

smove:移动一个元素到另外一个集合

smove  list1  list2   value1

sdiff:集合的差集运算A - B,属于A但不属于B的元素构成的集合

sdiff  key1  [key2...]

sunion:集合的并集运算A U B,属于A或者属于B的元素合并后的集合

sunion  key1  [key2...] 

sinter:集合的交集运算A∩B,属于A同时也属于B的共同拥有的元素构成的集合

sinter  key1  [key2...] 

5 redis有序集合(sorted Set)

应用场景:根据商品销售对商品进行排序显示
zadd:添加元素

zadd key score member [score member ...]
例:zadd myset  75 v1  80 v2  60 v3

zrange:按照元素分数从小到大的顺序,返回索引从start到stop之间的所有元素

zrange key start stop [WITHSCORES]

zrevrange:按照元素分数从大到小的顺序,返回索引从start到stop之间的所有元素

zrevrange key start stop [WITHSCORES]

zrangebyscore:获取指定分数范围的元素

zrangebyscore key min max [WITHSCORES][LIMIT offset count]
例:zrangebyscore key 70 80 limit 2 1

zcard :获取集合中元素个数

zcard key

zcount :获取指定范围分数区间内元素个数

zcount key 60 80

zrank: 获取value在集合中的下标位置

zrank  key  v2

zscore:按照值获得对应的分数

zscore  key  v2

zincrby:增加某个值的分数

zincrby key 20 v6

zrem:删除元素,格式是zrem zset的key 项的值,项的值可以是多个

zrem  key  v2

6 redis位图(bitmap)

    由0和1状态表现的二进制位的bit数组
应用场景:钉钉打卡上下班,签到统计
setbit 语法:setbit key offset(偏移量) value(只能为0或1)

sebit  key  365  1

getbit语法:getbit key offset(偏移量)

gebit  key  365

strlen:统计字节数占用多少

strlen  key

bitcount:全部键里面含有1的有多少个

bitcount  key  [start, end]

bitop语法:bitop operation destkey sourcekey [sourcekey …],对不同的二进制存储数据进行位运算(AND、OR、NOT、XOR)返回给目标键

bitop  and  destkey  key1  key2
bitcount  destkey

7 redis基数统计(HyperLogLog)

    在Redis里面,每个HyperLogLog键只需要花费12KB内存,就可以计算接近2^64个不同元素的基数,这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。但是,因为HyperLogLog只会根据输入元素来计算基数,而不会储存输入元素本身,所以HyperLogLog 不能像集合那样,返回输的各个元素。
应用场景:统计某个网站的UV(Unique Visitor,独立访客,一般理解为客户端lP)
pfadd:添加元素

pfadd  key  1 1 2 2 3 4

pfcount:返回基数估算值

pfcount  key

pfmerge语法:pfmerge destkey sourcekey [sourcekey …]将多个HyperLogLog合并为一个HyperLogLog

pfmerge  resultkey  key1  key2
pfcount  resultkey

8 redis地理空间(GEO)

geoadd:添加经纬度坐标

geoadd  city  116.403963 39.915119 "天安门"  116.403414 39.924091 "故宫"  116.024067 40.362639 "长城"
补充:type实际上是个zsort类型,返回元素可以使用zrange命令。(出现乱码重启使用命令进入:redis-cli --raw)

geopos:返回经纬度坐标

geopos  city  天安门  故宫  长城

geohash:通过geohash算法生成的base32编码值返回一维经纬度坐标

geohash  city  天安门  故宫  长城

geodist:用于返回两个给定位置之间的距离。

geodist  city  天安门  长城  m [m|km|ft(英尺)|mi(英里)]

georadius / georadiusbymember:以半径为中心,查找附近的XXX

georadius city 116.418017 39.914402 10 km withdist withcoord withhash count 10 desc
georadiusbymember city 天安门 10 km withdist withcoord withhash count 10 desc

补充:
WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。 距离的单位和用户给定的范围单位保持一致。
WITHCOORD: 将位置元素的经度和维度也一并返回。
WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大
COUNT 限定返回的记录数。

9 redis流(Stream)

在这里插入图片描述
一个消息链表,将所有加入的消息都串起来,每个消息都有一个唯一的 ID 和对应的内容
Message Content:消息内容
Consumer group:消费组,通过XGROUP CREATE 命令创建,同一个消费组可以有多个消费者
Last_delivered_id:游标,每个消费组会有个游标 last_delivered_id,任意一个消费者读取了消息都会使游标last_delivered_id 往前移动。
Consumer:消费者,消费组中的消费者
Pending_ids:消费者会有一个状态变量,用于记录被当前消费已读取但未ack的消息Id,如果客户端没有ack,这个变量里面的消息ID会越来越多,一旦某个消息被ack它就开始减少。这个pending_ids变量在Redis官方被称之为 PEL(Pending Entries List),记录了当前已经被客户端读取的消息,但是还没有 ack (Acknowledge character:确认字符),它用来确保客户端至少消费了消息一次,而不会在网络传输的中途丢失了没处理

队列相关命令

1、xadd:添加消息到消息队列末尾

例:xadd  mystream  *  field1 value1 field2 value2

补充:①mystream :队列名称,如果不存在就创建
*:消息 id,我们使用 * 表示由 redis 生成,可以自定义,但是要自己保证递增性。

2、xlen:获取消息队列长度

例:xlen mystream

3、xtrim:用于裁剪消息队列的长度

例:xtrim mystream maxlen 1000 (注:数字前面不用加count)

注意:(lrem llist 5 “hello” 删掉五条和"hello"相同的元素,数字前面也不用加count)

4、xrange:指定id区间用于读取消息数据

例:xrange mystream - + count 2

补充:①- +:表示从头查到尾
②count 2:表示查两条

5、xread:读取消息队列中的消息数据

例:xread count 2 block 1000 streams mystream 0-0 (注:streams别遗忘了s)

补充:①count :后面的数字是约束要返回的条数
①block :用于设置xread为阻塞模式,单位毫秒,默认为非阻塞模式。非阻塞模式下,读取完毕(即使没有任何消息)立即返回,而在阻塞模式下,若读取不到内容,则阻塞等待。如果在这个时间内没有新的数据流入,那么输出(nil) (1.05s)
注:使用Block模式,配合$作为ID,表示读取最新的消息(在非阻塞模式$无意义),若没有消息,命令阻塞!等待过程中,其他客户端向队列追加消息,则会立即读取到。
例:xread block 1000 streams mystream $

6、xdel:用于从消息队列中删除指定 ID 的消息数据

例:xdel mystream 1640160834658-0

消息组相关命令

1、xgroup create:创建消费者组

xgroup create mystream mygroup1  $ 创建一个接收最新消息的组
xgroup create mystream mygroup2  0 创建一个接收所有消息的组

2、xgroup destroy / xgroup delconsumer:删除消费者组

例:xgroup destroy mystream mygroup2    
注意:执行该指令会删除所有分组相关信息,包括 group 和 consumer 信息。
例:xgroup delconsumer mystream mygroup1 myconsumer1
注意:删除mygroup1组内的myconsumer1消费者

3、xreadgroup group:读取消费者组中的消息。

例:xreadgroup group mygroup1 myconsumer1 count 100 block 1000 streams mystream >

注意:这里面有个特殊的符号 >,在这里也是一个 ID 的表现形式,意思是说读取没有被同一组其他消费者消费的消息(如果是不同消费组的消费者可以消费同一条消息),只能读取一次,之后进入到该 stream 的未确认队列(pending entries list (PEL))。进入到 PEL 的消息是可以被重复消费的,只需要将 ID 由 > 替换为任意合法的ID即可,比如 0,则可以将该 stream 的消息再消费一次。
例:xreadgroup group mygroup1 myconsumer1 streams mystream 0

4、xpending :显示待处理消息的相关信息

127.0.0.1:6379> xpending mystream mygroup2
1) (integer) 4  #5个已读取但未处理的消息
2) "1640333537285-0" #起始id
3) "1640761839280-0" #结束id
4) 1) 1) "myconsumer1" #消费者112) "1"
   2) 1) "myconsumer2" #消费者212) "1"
   3) 1) "myconsumer3" #消费者322) "2"

例:xpending mystream mygroup1 - + 10 myconsumer1
显示myconsumer1十条待处理消息的相关信息

5、xack:将已读取但未处理的消息完成处理

例:xack mystream mygroup2 1640333537285-0

6、info命令

xinfo `stream` mystream  查看队列信息
xinfo `groups` mystream  消费组信息
xinfo `consumers` mystream mygroup1  消费者组成员信息

注意:stream后面没s,groups和consumers后面有s

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值