关于redis:Redis操作数据常用命令详细注释

1次阅读

共计 7004 个字符,预计需要花费 18 分钟才能阅读完成。

Redis 的基本操作

​ 应用 help 查问有哪些命令

help @string            # 查问 string 类型命令
help @hash                # 查问 hash 命令
help @list                # 查问 list 命令
help @set                    # 查问 set 命令
help @zset                # 查问 zset 命令
help @cluster            # 查问集群命令
help @generic            # 查问通用命令

...... 等等其余命令,能够应用 Table 键提醒

​ 示例所有 Key 名都为 bigkang 为示例

# 查问所有 Key
keys *    

# 判断某个 Key 是否存在
exists <key>
exists bigkang

# 查问某个 Key 的类型
type <key>
type bigkang

# 删除某个 Key,返回一条影响行数,1 示意 true,删除胜利
del <key>
del bigkang

# 给 Key 设置超时工夫,单位秒,返回一示意 true,设置胜利
expire <key> <seconds>
expire bigkang 30

# 查问 Key 过期工夫,返回秒数负数为超时工夫,,- 1 示意永不过期,- 2 示意已过期
ttl <key>
ttl bigkang

# 查看以后数据库的 key 的数量(单个库)dbsize

# 清空以后库
Flushdb

# 清空所有库
Flushall

字符串(String)的操作

help @string            # 查问 string 类型命令
# 查问 Key 对应键值
get  <key>
get bigkang

# 设置值,增加键值对,给 bigkang 赋值为 123,没有则创立 bigkang
set <key> <value>
set bigkang 123

# 追加,给 bigkang 追加 456
append <key> <value>
append bigkang 456

# 查问 Key 长度,这个 key 的长度也就是 length
strlen <key>
strlen bigkang

# 设置值,如果不存在则设置一个值,如果存在则设置失败
setnx <key> <value>
setnx bigkang 123

# 给 Key 值减少 1,相似于 i ++ 操作,如果是字符串将无返回,必须为数据, 返回值为批改后的 Value
incr <key>
incr bigkang

# 给 Key 值缩小 1,相似于 i -- 操作,如果是字符串将无返回,必须为数据, 返回值为批改后的 Value
decr <key>
dect bigkang

# 指定 Key 增加或者缩小肯定的数量,给 bigkang 这个 key 的 Value 增加 100,而后再缩小 100, 返回值为批改后的 Value
incrby / decrby <key> < 步长 >
incrby bigkang 100
decrby bigkang 100

# 批量设置键值对
mset <key1> <value1> <key2> <value2>
mset bigkang1 1 bigkang2 2 bigkang3 3

# 同时设置一个或多个 key-value 对, 如果不存在则设置, 如果其中一个条件不满足则都失败
msetnx <key1> <value1> <key2> <value2> 
msetnx bigkang4 1 bigkang5 2 bigkang6 3

# 截取范畴,取得值的范畴,相似 java 中的 substring, 起始下标为 0,只返回到结尾,超出失常返回
getrange <key> < 起始地位 > < 完结地位 >
getrange bigkang 0 10

# 插入值,从指定地位插入字符串, 返回字符串长度
setrange <key> < 起始地位 > <value>
setrange bigkang 0 big

# 设置键值的同时,设置过期工夫,单位秒
setex <key> < 过期工夫 > <value>

# 获取以前的值写入新的值
getset <key> <value>
getset bigkang 123            

哈希(Hash)的操作

help @hash            # 查问 hash 类型命令
# 设置 Hash 值,Hash 相似以 Java 中的 Map,Hash 的 Key 存在返回 0,不存在返回 1,如果是 String 则报错,设置 name 为 bigkang,age 为 21
hset <key> <field> <value>
hset bigkang name bigkang age 21

# 从 Hash 中取出某个属性的 Value 值
hget <key> <field>
hget bigkang name

# 批量设置 Hash 的值
hmset <key> <field1> <value1> <field2> <value2>
hmset bigkang name bigkang1 age 2000

# 批量获取值
hmset <key> <field1> <field2> 
hmget bigkang name age

# 判断 field 是否存在,返回 0 OR 1,对应 True,False
hexists <key> <field>
hexists bigkang name

# 列出某个 key 的所有 field
hkeys <key>
hkeys bigkang

# 列出某个 key 的所有 Value
hvals <key>
hvals bigkang

# 为哈希表 key 中的域 field 的值加上增量 increment
hincrby <key> <field> <increment>
hincrby bigkang age 1

# 将哈希表 key 中的域 field 的值设置为 value,不存在时进行设置,存在不设置
hsetnx <key> <field> <value>
hsetnx bigkang name bigkang
            

字符串链表(list)的操作

help @list            # 查问 list 类型命令
# 从右边 / 左边插入一个或多个值
lpush/rpush <key> <value1> <value2> <value3>
# 右边插入
lpush bigkang 1 2 3
# 左边插入
rpush bigkang 4 5 6

#  从右边 / 左边吐出一个值
lpop/rpop key
# 从右边吐出
lpop bigkang
# 从左边吐出
rpop bigkang

# 从一个列表左边吐出一个值,插到另一个列表右边
rpoplpush <key1> <key2>
rpoplpush bigkang bigkang1

# 依照索引下标取得元素(从左到右), 索引从 0 开始
lindex <key> <index>
lindex bigkang 2

# 依照起始地位完结地位范畴取得元素(从左到右), 索引从 0 开始
lrange <key> <start> <stop>
lrang bigkang 0 3

# 取得列表长度
llen <key>
llen bigkang

# 依据 Key 找到某个值,并且在他后面 / 前面插入一个值
linsert <key> AFTER/BEFORE <value> <newvalue>
# 在 bigkang 这个 key 的值为 1 的后面插入 0.9
linsert bigkang AFTER 1 0.9
# 在 bigkang 这个 key 的值为 1 的前面插入 1.1
linsert bigkang BEFORE 1 1.1

# 从依据某个 Key,找到 Value, 删除这个 Value 几个个数
lrem <key> <n> <value>
# 在 bigkang 中,从右边开始查问,删除 1 这个元素,删除两个(可能元素 List 中有多个 1)lrem bigkang 2 1

字符串汇合(set)的操作

help @set            # 查问 set 类型命令
# 将一个或多个 member 元素退出到汇合 key 当中,曾经存在于汇合的 member 元素将被疏忽, 插入胜利返回 1,插入失败示意 0 曾经存在
sadd <key> <value1> <value2> .....    
sadd bigkang 1 2 3
# 取出该汇合的所有值
smembers <key>
smembers bigkang

# 返回该汇合的元素个数
scard <key>
scard bigkang

# 判断汇合 <key> 是否为含有该 <value> 值,有返回 1,没有返回 0
sismember <key> <value>
sismember bigkang 1

# 删除汇合中的某个元素
srem <key> <value1> <value2> ....    
srem bigkang 1 2 3

# 随机从该汇合中吐出一个值, 会将原来的值删除
spop <key>
spop bigkang

# 随机从该汇合中取出 n 个值。不会从汇合中删除
srandmember <key> <n>
srandmember bigkang 3

# 返回两个汇合的交加元素, 如 bigkang 有 1,bigkang2 也有 1,则返回 1,所有雷同的都会返回
sinter <key1> <key2>
sinter bigkang bigkang2

# 返回两个汇合的并集元素,例如 bigkang 为 1 2 3,bigkang2 为 3 4 5,则返回 1 2 3 4 5
sunion <key1> <key2>
sunion bigkang bigkang2

# 返回两个汇合的差集元素,例如 bigkang 为 1 2 3,bigkang2 为 3 4 5,则返回 1 2 4 5
sdiff <key1> <key2>
sdiff bigkang bigkang2

有序字符串汇合(zset)的操作

help @sorted_set            # 查问 zset 类型命令
# 将一个或多个 member 元素及其 score 值退出到有序集 key 当中,zset 会依据 score 排序
zadd <key> <score1> <value1> <score2> <value2>...    
zadd bigkang 1 A 2 B 3 C

# 返回有序集 key 中,下标在 <start> <stop> 之间的元素, 带 WITHSCORES,能够让分数一起和值返回到后果集, 索引从 0 开始,0 1 会蕴含 0 和 1
zrange <key> <start> <stop> [WITHSCORES]
# 带分数返回 0 到 2 三个值,并且返回分数,从小到大
zrange bigkang 0 2 WITHSCORES
# 不返回分数
zrange bigkang 0 2

# 同上,程序相同,从大到小
zrevrange bigkang 0 2
# - 1 示意返回所有
zrevrange bigkang 0 -1

# 返回有序集 key 中,分数在 min 到 max 中的值(蕴含),有序集成员按 score 值递增 (从小到大) 秩序排列
zrangebyscore key min max [withscores][limit offset count]
zrangebyscore bigkang 1 2.5 WITHSCORES

# 同上,改为从大到小排列,max min 相同
zrevrangebyscore key max min [withscores][limit offset count]
zrevrangebyscore bigkang 2.5 1 WITHSCORES

# 为元素的 score 加上增量
zincrby <key> <increment> <value>
zincrby bigkang 3 A

# 删除该汇合下,指定值的元素
zrem <key> <value>
zrem bigkang A

# 统计该汇合,分数区间内的元素个数
zcount <key> <min> <max>
zcount bigkang 1 20

# 返回该值在汇合中的排名,从 0 开始, 返回索引下标,从小到大
zrank <key> <value>
zrank bigkang B            

Bit 操作

设置(Bit)

​ 首先咱们须要理解什么是 Bit,其实所有的 Bit 操作都是在操作字符串类型,咱们设置了 bit 当前能够发现他的类型其实是一个 String

# 设置 Bit 语法 setbit ${Key 名称} ${Bit 位} ${Bit 位的值 只能是 0 或者 1}
setbit newbit 1 1

​ 而后咱们来获取这个 bit 的类型

# 获取 Key 的类型
type newbit

# 咱们发现返回了
"string"

​ 那么咱们就会发现其实存储的数据是一个字符串,那么字符串和 bit 有什么关系呢,咱们晓得 Redis 中的字符串底层采纳的 SDS,实际上它存储的一个 char 数组,那么这个 char 数组,那么 C 语言中一个 char 等于 1 个 byte,一个 byte 等于 8 个 bit,咱们能够晓得一个 char 可能存储 8 个 bit,那么 Redis 的 String 可能存储 512MB,那么咱们再来看一下最大可能存储多少个 bit 位:

​ 最大存储数量

​ 512 1024 1024 * 8 = 42 9496 7296(大概 43 亿)

​ MB KB Byte BIit

​ 咱们就可能存储大概 43 亿 bit,每个 bit 的值只能是 0 或者 1

​ 咱们上访的操作 setbit newbit 1 1 就是将 bit 位为 1,也就是第二个 bit 设置为 1,bit 为数组

​ 大略的流程图如下:

​ 这样咱们就能够晓得 bit 位在 0 – 7 的属于第一个字节,8 – 15 属于第二个字节,那么咱们当初来测试一下吧

# 删除原来的 Key
del bitstr
# 新增一个 bit 位 0 的值为 1
setbit bitstr 0 1
# 查看长度因为存入了第一个 char,那么长度为 1
strlen bitstr

# 再设置 bit 位为 7 的数据
setbit bitstr 7 1
# 查看长度因为存入了第一个 char,那么长度还是为 1
strlen bitstr


# 咱们这次设置的话咱们设置一下 8,那么这个时候长度就会变成 2 了
setbit bitstr 8 1
# 查看长度因为存入了第二个 char,那么长度就会扩容为 2 了
strlen bitstr 

​ 例如咱们想要获取某个 bit 位的值,咱们应用 getbit

# 获取第一个 bit 位的数据
getbit bitstr 0

统计(BitCount)

​ BitCount 能够统计咱们的 Bit 数组中的值为 1 的数据,例如我想要统计 bit 位的值的后果有多少。(!留神是依据一个 char,也就是一个 byte=8bit 进行统计,每个值示意相应的 8 个 bit)

​ 如下

# 统计整个字节数组数据 Bit 位为 1 的数量
bitcount bitstr

​ 或者依据范畴进行统计

# 留神此范畴不是统计 bit 范畴,而是统计 char 中的 bit,一个 char = 8bit
# 示意统计第一个 char 也就是 0 - 8  到  0 - 8,那么就是 1 到 1,第一个 char,对应 bit 位 0 - 7
# 示意统计 char[0] - char[0],bit 位 0 - 7
bitcount bitstr 0 0
# 返回后果为 2

# 示意统计 char[0] - char[1],bit 位 0 - 15
bitcount bitstr 0 1
# 返回后果为 3        

函数(BitOp)

​ Bit 次要用来帮忙咱们对不同 Bit 进行操作,和 Set 中的并集,并归等相似。

​ 当初咱们来初始化两个 bit 数据

# 初始化第一个 bit,设置 0 和 4
setbit bit1 0 1
setbit bit1 4 1

# 初始化第二个 bit,设置 3 和 4
setbit bit2 3 1
setbit bit2 4 1

​ 目前两个 Bit 中的构造如下

#Bit 位        0        1        2        3        4        5        6        7
    bit1     1     0     0     0     1     0     0     0
    bit2   0      0     0     1     1     0     0     0

​ 那么咱们晓得既然是二进制,那么必定是有运算的,例如与,或等等

​ Redis 提供了如下几种

  • ​ AND
  • ​ OR
  • ​ NOT
  • ​ XOR

    语法如下:

bitop ${操作} ${新的 Key}。。。。(其余 bit 位)# 返回后果为新的 Bit 的字节位数量,例如 bit 1 -20,那么对应 char[0] - char[2], 返回的数据为字符串长度,也就是 strlen

​ AND

# 应用 AND,将 bit1 bit2 进行 AND,而后将后果返回到 newbit
bitop and newbit bit1 bit2

# and 的操作如下
#Bit 位        0        1        2        3        4        5        6        7
    bit1     1     0     0     0     1     0     0     0
                
    bit2   0      0     0     1     1     0     0     0
                
    newbit 0      0     0     0     1     0     0     0
    # 与操作,必须 1 与 1 = 1,否则都为 0        
  # 返回后果只有 bit 位为 4 的为 1,所以应用 bit 统计进去则为 1 

​ OR

# 应用 OR,将 bit1 bit2 进行 OR,而后将后果返回到 newbit
bitop or newbit bit1 bit2

# or 的操作如下
#Bit 位        0        1        2        3        4        5        6        7
    bit1     1     0     0     0     1     0     0     0
                
    bit2   0      0     0     1     1     0     0     0
                
    newbit 1      0     0     1     1     0     0     0
    # 或操作,能够 1 或 0 , 0 或 1,只有有一个 1,则返回 1    
  # 返回后果有 bit 位为 0,3,4 的为 1,所以应用 bit 统计进去则为 3 

​ NOT

# 应用 NOT,将 bit1 进行 NOT 操作,而后将后果返回到 newbit
bitop not newbit bit1

# NOT 的操作如下
#Bit 位        0        1        2        3        4        5        6        7
    bit1     1     0     0     0     1     0     0     0
                
    newbit 0      1     1     1     0     1     1     1
    # 取反操作,0 变成 1,1 变成 0
  # 统计返回后果则为 6 

​ XOR

# 应用 XOR,将 bit1,bit2 进行 XOR 操作,而后将后果返回到 newbit
bitop xor newbit bit1 bit2

# NOT 的操作如下
#Bit 位        0        1        2        3        4        5        6        7
    bit1     1     0     0     0     1     0     0     0
                
    bit2   0      0     0     1     1     0     0     0
                
    newbit 1      0     0     1     0     0     0     0
    # XOR 操作  必须蕴含 0 和 1
  # 统计返回后果则为 6 

​ Bit 操作能够帮忙咱们存储大量的数据,以及状态,咱们能够在多个场景下应用, 例如用户的间断登录,以及沉闷用户统计。

​ 例如如下操作,咱们的 Key 采纳 login- 年 - 月 - 日,bit 位 应用用户 ID,状态为 1

# 咱们设置用户登录,1 号有 4 个用户登录
setbit login-2020-12-1 19 1
setbit login-2020-12-1 20 1
setbit login-2020-12-1 21 1
setbit login-2020-12-1 22 1

# 2 号有两个用户登录
setbit login-2020-12-2 19 1
setbit login-2020-12-2 21 1


# 性能操作
# 统计出最近两天登录过的用户
bitop or login-2020-12{1-2} login-2020-12-1 login-2020-12-2

# 统计最近的间断登录两天的用户
bitop and login-2020-12{1-2} login-2020-12-1 login-2020-12-2
正文完
 0