Redis命令

Redis中文网站1(不可用了)

Redis中文网站2(有广告)

Redis中文网站3(简洁版)

1. 查看Redis进程


ps -ef | grep redis

 

2. Linux进入Redis客户端


2.1 连接

redis-cli 
常用参数(选项)说明
-h连那一台主机,默认127.0.0.1
-p哪一个端口,默认6379
-n哪一个数据库(redis有0~15 十六个数据库),默认0号库
  • redis-cli -p 6380 链接本机6380端口的redis的默认数据库

  • redis-cli -p 6380 --raw 链接本机6380端口的redis的默认数据库,按utf-8格式化汉字

注:redis是二进制安全的,数据库里存的只是字节流,字符流在不同编码下可能会出现乱码现象

redis存储的是客户端编译好的字节数组,不同的客户端可以在同一个redis上用不同的编码存储,redis不会重新编译客户端的数组

2.2 退出

exit

 

3. Redis 命令


3.1 帮助命令

3.1.1 help 命令

  • help set 查看set命令帮助文档

EX : 过期时间,单位秒

PX : 过期时间,单位毫秒

NX : k1不存在时才会给k1操作,只能新建,若k1存在,不会改变k1的值,用于分布式锁

XX : 只有k1存在时才会操作,只能更新

3.1.2 clear 命令

  • 将屏幕清空

3.1.3 type 命令

  • 查看key值的数据类型,redis一共有5中数据类型:
  1. String Byte:字符串、数值、bitmap
  2. List:
  3. Hash map(k-v):
  4. Set:
  5. sorted_set:
# 查看k1值的数据类型
type k1

3.1.4 object 命令

  • object help 查看object命令帮助文档

# 返回用于存储与键关联的值的内部表示形式的类型
OBJECT encoding key

  • 注:set k1 99 因为set是string组的,所以type k1 是string类型,set k2 hello type k2 是string类型; object encoding k2 是meb编码的string,object encoding k1 是int类型,说明k1使用的是int编码,可以进行string类型的数值操作。
  • 部分string操作命令会改变key的编码类型。

3.2 设置key的超时时间

1.设置key时就设置超时时间
设置k1 20秒后超时,值为aaa
set k1 aaaa ex 20

查看key的超时时间
ttl k1

2.单独给key添加超时时间
set k2 aaa

ttl k2

expire k2 50

3.倒计时设置key的超时时间

expireat key timestamp(时间戳)

  • 注:
  1. 有超时时间的key中途访问不会刷新key的超时时间
  2. 有超时时间的key超时标志是-2,没有超时时间的key是-1
  3. key在没有超时的时候重新赋值,会根据赋值命令重新计算时间,如命令为set k1 aaa 超时时间变为-1, set k1 ddd ex 200超时时间会变为200秒

3.3 String类型的面向字符串操作的常用命令

3.3.1 查看字符串造作命令

help @string

3.3.2 set 命令

  • 在默认的数据库设置k1和k1的值
SET key value [expiration EX seconds|PX milliseconds] [NX|XX]
SET key value [过期 EX 秒 | PX 毫秒] [NX key不存在时设置key的值|XX key存在时设置key的值]

set k1 hello

3.3.3 get 命令

  • 在默认的数据库获取k1的值
get k1

3.3.4 mset 命令

  • 设置多个key-value的值
mset k3 a k4 b

3.3.5 mget 命令

  • 获取多个key的值
mget k3 k4

3.3.6 msetnx 命令

  • 当k1、k2不存在时,设置他们的值
MSETNX k1 a k2 b

  • msetnx命令的原子性操作,当一个key设置失败,其他key也不会成功
MSETNX k2 c k3 d

3.3.7 getset 命令

  • 给key设置新值,并把老值返回回来
getset k1 rongyan

3.3.8 keys 命令

  • 查看当前库所有key
keys *

3.3.9 flushdb 命令

  • 清空当前数据库

3.3.10 flushall 命令

  • 清空所有数据库

3.3.11 select 命令

  • 切换到8号数据库
select 8

  • 在8号数据库无法获取默认数据库k1的值

3.3.12 append 命令

  • 在k1后面追加字符串
append k1 " world"

3.3.13 getrange 命令

GETRANGE k1 6 10

GETRANGE k1 6 -1 

3.3.14 setrange 命令

  • 从指定位置修改k1的值
SETRANGE k1 6 rongyan

3.3.15 strlen 命令

  • 获取k1 字符串的长度
strlen k1

3.4 String类型的面向数值操作的常用命令

3.4.1 incr 命令

  • k1的值+1,incr固定+1
incr k1

3.4.2 incrby 命令

  • k1的值+22
incrby k1 22

3.4.3 decr 命令

  • k1的值-1,decr固定-1
decr k1

3.4.4 decrby 命令

  • k1的值-21
decrby k1 21

3.4.5 incrbyfloat 命令

  • k1的值+1.5,可以加小数
INCRBYFLOAT k1 1.5

3.5 String类型的面向bitmap(位图)操作的常用命令

对二进制位操作的命令

3.5.1 setbit 命令

  • 设置k1的二进制码为01000000,8位二进制码为一个字节,所以k1值得长度为1,"@"符号的ASCII码是64(十六进制是40),二进制是01000000
setbit k1 1 1

  • 将k1值的二进制第8位设置为1,"A"的ASCII码是65(十六进制是41),二进制是01000001
setbit k1 7 1

  • 此时k1的长度为2,二进制码为0100 0001 0100 0000,k1的值为A@
setbit k1 9 1

  • 注:可以使用 man ascii 命令查看ASCII码
  • hex:十六进制 oct:八进制 dec:十进制 bin:二进制

3.5.2 bitpos 命令

Find first bit set or clear in a string

找到第一个二进制位,在字符串中设置或清除它

BITPOS key bit [start] [end]

命令 key 二进制位(0或1) 字节的起始 结束位置(是字节的位置,不是字符的位置)

k1的值为A@,二进制码为0100 0001 0100 0000,第一个字节是"A",第一个字节的二进制1所在位置是1;第二个字节是"@",第二个字节的二进制1所在在位置是9 

BITPOS k1 1 0 0

BITPOS k1 1 1 1

3.5.3 bitcount 命令

  • 统计k1指定字节位置的值的二进制1出现的次数
bitcount k1 0 1

3.5.4 bitop 命令

  • k1的值"A",二进制码0100 0001
  • k2的值"B",二进制码0100 0010
  • 将k1和k2的二进制码进行按位与操作,得到0100 0000 -> "@",将值存到andkey
bitop and andkey k1 k2

  • 将k1和k2的二进制码进行按位或操作,得到0100 0011 -> "C",将值存到andkey
bitop or andkey k1 k2

  • 应用场景举例

3.6 list类型操作命令

  • 相关命令

3.6.1 lpush 从左侧将元素放入集合

lpush k1 a b c d e f

3.6.2 rpush 从右侧将元素放入集合

  • 注:同向命令可以描述栈,反向命令可以描述队列
rpush k2 a b c d e f

3.6.3 lrange 查看集合指定位置的元素

  • 查看k1集合所有元素
lrange k1 0 -1

3.6.4 lindex 获取集合指定位置的元素

  • 取出从左侧数第3个元素,不会删除集合数据
lindex k1 2

3.6.5 lpop 从左侧将元素弹出集合

  • 弹出元素的同时会删除集合中的元素
lpop k1

3.6.6 rpop 从右侧将元素弹出集合

3.6.7 lset 修改从左侧数的指定元素

  • 将c修改为xxxxx
  • 注:对索引操作可以描述数组
lset k1 3 xxxxx

3.6.8 lrem 移除集合中的一些元素

  • 移除k3从左侧数两个'a',-2则是从右侧数两个'a'
lpush k3 1 a 2 b 3 a 4 c 5 a 6 d

lrem k3 2 a

3.6.9 linsert 在指定元素前后插入元素

  • 在元素6后面插入a
  • 注:如果有两个6,只会在在一个后面插入a。
linsert key after|before 指定元素 插入元素

linsert k3 after 6 a

3.6.10 blpop

  • 删除并获取列表中的第一个元素,或者阻止,直到有一个可用为止
  • 阻塞,单波队列 FIFO(先到先服务)
blpop k3 3

3.6.11 ltrim 删除两端指定位置的元素

ltrim k3 0 -1

ltrim k3 2 -3

3.7 Hash类型操作

  • 和String类型命令类似,只是以H开头
  • 相关命令

3.7.1 hset 命令

hset sean name dzf

3.7.2 hmset 命令

  • 注:插入时key和value是成对的
hmset sean age 18 address bj

3.7.3 hget 命令

hget sean name

3.7.4 hmget 命令

hmget sean name age

3.7.5 hkeys 命令

hkeys sean

3.7.6 hvals 命令

hvals sean

3.7.7 hgetall 命令

hgetall sean

3.7.8 hincrby 命令

  • 年龄加-1岁
hincrby sean age -1

3.7.9 hincrbyfloat 命令

  • 年龄加0.5岁
hincrbyfloat sean age 0.5

3.8 Set类型操作

  • set类型特点:无序、去重
  • 相关命令

3.8.1 sadd 向key中添加多个值

  • 向k1插入值,会自动去重
sadd k1 tom seam peter ooxx tom xxoo

3.8.2 smembers 查看key的值

  • 查看k1的值
smembers k1

3.8.3 srem 移除set中的元素

srem k1 ooxx xxoo

3.8.4 sinter 计算指定key的交集

  • 直接打印k2、k3的交集
sadd k2 1 2 3 4 5

sadd k3 4 5 6 7 8

sinter k2 k3

3.8.5 sinterstore 计算指定key的交集存放到新的key中

  • 将k2、k3的交集结果放到dest中
sinterstore dest k2 k3

smembers dest

3.8.6 sunion 计算指定key的并集,自动去重

sunion k2 k3

3.8.7 sdiff 计算指定key的差集

sdiff k2 k3

sdiff k3 k2

3.8.8 srandmember 随机取数

正数:取出一个去重的结果集(不能超过已有集)

负数:取出一个带重复的结果集,一定满足你要的数量

如果0,不返回

sadd k1 tom ooxx xxoo xoxo oxox xoox oxxo

srandmember key count

srandmember k1 5

3.8.9 spop 随机取数并删除集合中该数值

  • 适用于抽奖每次抽单人且不重复
spop k1

3.9 有序集操作(Sorted_Set)

  • 特点:会对数据排序且去重,物理排序左小右大
  • 相关命令

3.9.1 zadd 添加数据

  • 添加数据的时候需要给数据添加一个可以用以排序的数值(维度),如果维度相同则安字典排序
zadd k1 8 apple 2 banana 3 orange

3.9.2 zrange 按索引查看数据

zrange k1 0 -1

zrange k1 0 -1 withscores

3.9.3 zrevrange 反向按索引查看数据

  • 反向命令查询出来的数据会按从大到小排序
zrevrange k1 0 -1

3.9.4 zrangebyscore 按分值查看数据

  • 取分值在3到8的数据
zrangebyscore k1 3 8

3.9.5 zscore 通过元素查看元素的分值

zscore k1 apple

3.9.6 zrank 通过元素取出元素的排名

zrank k1 apple

3.9.7 zincrby 增加元素的分值

zincrby k1 2.5 banana

3.9.8 zunionstore 集合操作并集

zadd k1 80 tom 60 sean 70 baby

zadd k2 60 tom 100 sean 40 yiming

ZUNIONSTORE 目标key key的数量 key... [权重...(默认1,与key一一对应)] [聚合参数 SUM|MIN|MAX (默认SUM)]

zunionstore unkey 2 k1 k2

zrange unkey 0 -1 withscores

  • 带权重
  • 求和时key1的值乘以1、key2的值乘以0.5,再相加
zunionstore unkey1 2 k1 k2 weights 1 0.5

zrange unkey1 0 -1 withscores

  • 带聚合参数
zunionstore unkey1 2 k1 k2 aggregate max

zrange unkey1 0 -1 withscores

3.10 管道符

一次发送多个命令,减少往返时间

  • Socket链接每次发送命令都要往返通讯一次
nc localhost 6379

  • 利用管道符一次发送多个命令
  • 注:linux要用"\n"换行,Windows要用"\r\n"换行
  • '-e' 识别换行符
echo -e "sdfsdf\nsdfsdf"

echo -e "set k2 99\nincr k2\n get k2" | nc localhost 6379

  • 验证

3.11 发布订阅

  • 相关命令

3.11.1 无人监听下向通道推送数据

  • 直播间内有人发送了一条弹幕
publish ooxx hello

3.11.2 监听ooxx通道

  • 新人进入直播间,无法查看之前的消息
subscribe ooxx

3.11.3 再次推送数据

  • 又有人发送了弹幕
publish ooxx helloxiaotuantuan

3.11.4 监听端实时收到消息

  • 进入直播间后就可以实时看到其他人发送的消息了

3.12 redis事务

  • 相关命令

3.12.1 multi 开启事务

multi

set k1 aaa

set k2 bbb

exec

3.12.2 exec 执行事务

3.12.3 两个客户端同时在一个redis服务上执行事务

  • 客户端1先开启事务,后执行事务,k1值被客户端2删掉了,客户端1则取不到
3.12.3.1 客户端1先开启事务

3.12.3.2 客户端2后开启事务

3.12.3.3 客户端1取'k1'的值

3.12.3.4 客户端2删除'k1'的值

3.12.3.5 客户端2先执行

3.12.3.6 客户端1后执行

3.12.4 watch 监控key

  • 先监控key,再开启事务,如果事务执行前被监控的key被修改了,则不执行此次事务
watch k1

3.12.5 两个客户端同时在一个redis服务上执行事务

3.12.5.1 客户端1,先监控k1,开启事务,输入命令

3.12.5.2 客户端2,后开启事务,输入命令,先执行事务

3.12.5.3 客户端1执行事务

  • 因为k1的值被更改了,所以当前事务没执行

4. 学习总结

4.1 redis 介绍及NIO原理介绍

4.2 redis安装、string类型、bitmap、list、set、hash、sorted_set、skiplist

4.3 使用

4.4 redis集群

4.5 常见问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值