1. 前言
今天的目的主要是为了学习下,Redis基础命令。无论是处于什么阶段的技术人,基础永远都是重中之重。
2. 开始
2.0 帮助文档
-
查看各种分类
可以在redis
客户端输入help @
之后一直不停的按tab键。 就会不停的切换分类 -
查看某一项命令
2.1 全局命令
2.1.1 keys
但是我们在生产环境并不建议使用此命令。因为此命令会将所有的key值都罗列出来。对Redis的性能有很大的影响。所以一般我们建议使用
dbsize
keys [pattern]
# keys *
# keys l*
2.1.2 dbsize
此命令可以得到key的个数。
dbsize
2.1.3 exists
查看指定key 是否存在. 如果存在直接返回1, 反之就是返回0
exists key [...key]
# exists username
2.1.4 del
删除指定的key
del key [...key]
# del age
2.1.5 expire
-1
键没有设置过期时间-2
该键已经过期
2.1.5.1 以秒的过期时间
expire [xxx] [x]
# expire username 15 设置15s的过期时间
# ttl username 查看指定键是否过期
2.1.5.2 指定时间戳过期时间
expireat [xxxx] [x]
# expireat username 1671886639 指定时间戳后失效
- 可以用
ttl
来查看剩余过期时间。单位为秒 - 可以用
pttl
来查看剩余过期时间。单位为毫秒
2.1.5.3 以毫秒的过期时间
pexpire [xxx] [x]
# pexpire username 20000 以毫秒为单位 设置username的过期时间
2.1.5.4 清除键的过期时间
persist [key]
# persist username 将username 过期时间清除
2.1.5.5 坑!!!!!!
- 如果给一个key[username]设置了过期时间。
- 再次给这个key[username] 设置一个新值(在未过期之前)
- 那么这个key的过期时间就消失了
2.1.6 type
获取指定key的数据类型
type [key]
# type username => string
2.1.7 randomkey
randomkey
# 随机返回一个key
2.1.8 rename
- 修改key的名称
- 如果使用
rename
的话,修改的新的名称已经存在的话,连同值会被一起覆盖- 如果是使用
renamenx
的话,修改的新的名称必须不存在
rename [oldName] [newName]
# rename lihh lihh1
2.2 string 数据类型
2.2.1 set
2.2.1.1 参数
key
指定的keyvalue
指定的valueex
设置以秒为单位的过期时间px
设置以毫秒为单位的过期时间nx
键必须不存在才可以设置。用来添加xx
键必须存在才可以设置。 用来修改
2.2.1.2 ex
set username aaa ex 10 # 设置指定的key/value 10后过期
2.2.1.3 px
set username aaa px 15000
2.2.1.4 nx
setnx username bbb
# 设置没有key 为 usernam的时候,bbb才能设置成功
2.2.1.4 xx
set username bbb xx
# 只有key【username】存在的话,使用【xx】才能设置成功
2.2.2 get
根据指定的名称获取对应的值。如果没有找到对应的key,返回为nil
get [xx]
# get username
2.2.3 mget
同时获取多个key的值
mget [xxx] [yyy]
# mget username age
2.2.4 mset
进行批量的值的设置
mset [key] [value] [key] [value]
# mset username aaa age 20
2.2.5 incr
- 进行值的运算,结果无非是分为三种情况:
- 如果值不是整数,返回错误
- 如果值是整数,返回自增的结果
- 如果key不存在,作为0处理返回值为1
- 案例:一般用作那种
统计数/ 点赞数/ 观看数
等
incr [name]
# incr count
2.2.5.1 其他案例
incrby
根据指定的值 自增decr
自减decrby
根据指定的值自减incrbyfloat
根据指定的浮点数自增
2.2.6 append
给指定key的value值 后添加指定的字符串
append [key] [value]
# append username hello
2.2.7 strlen
返回指定字符串的长度
strlen [key]
# strlen username
2.2.7 getset
设置并返回原来的值
getset [key] [value]
# getset username bbb
2.2.8 getrange
获取指定范围内的字符串值
getrange [key] [start] [end]
# getrange username 1 5
2.2.8 setrange
设置指定范围内的字符串
setrange [key] [offset] [value]
# setrange username 1 bbb
2.3 hash 数据类型
2.3.1 hset
以HashMap的形式 设置多个key/value 等. 如果已经存在了key值。那么重新设置值相当于追加
hset [key] [field][value] [field][value]
# hset user:1 name aaa age 11
2.3.2 hget
hget [key][field]
# hget user:1 name
# hget user:1 age
2.3.3 hdel
hdel [key] [field]
# hdel user:1 age
2.3.4 hlen
hlen [key]
# hlen user:1
2.3.5 hexists
判断指定的field 是否存在
hexists [key] [fields]
# hexists user:1 name
2.3.6 hkeys
hkeys [key]
# hkeys user:1
2.3.7 hvals
hvals [key]
# hvals user:1
2.3.8 hgetall
hgetall [key]
# hgetall user:1
2.4 list 数据类型
- 插入的元素是有序的。跟插入的顺序是保持一致的
- 但是内部多个元素之前是可以重复的
2.4.1 rpush
从右侧开始插入
rpush [key] [element]...
# rpush list1 a b c
2.4.2 lpush
从左侧开始插入
lpush [key] [element]...
# lpush list2 a b c d
2.4.3 lrange
根据坐标 查询指定范围内的值
lrange [key] [start] [end]
# lrange list2 0 -1 表示查询所有
2.4.4 linsert
在某个元素之前 或是 之后插入新的元素
linsert [key] [before|after] [piovt] [element]
# linsert list2 before b e 在集合list2中 元素b之前插入新的元素e
2.4.5 lpop
从左侧删除一个元素并且返回元素
lpop [key] [count]
# lpop list2 1 从左侧删除一个元素并且返回
2.4.6 rpop
rpop [key] [count]
# rpop list2 1
2.4.7 lrem
lrem [key] [count] [element]
# lrem list1 1 d
2.4.8 ltrim
进行元素的修剪。将指定的元素进行保留
ltrim [key] [start] [end]
2.4.9 lset
对指定下标元素的值进行修改
lset [key] [index] [element]
# lset list1 1 c
2.4.10 lindex
获取指定下标的值
lindex [key] [index]
# lindex list1 1
2.4.11 llen
llen [key]
# llen list1
2.4.12 blpop
- 阻塞版本的
lpop
. 可以设置阻塞时间,同时可以将结果设置为0,这样会一直阻塞下去,直到有新的值- blpop后面如果是多个键,那么blpop会从右至左遍历键,一旦有一个键能弹出元素,客户端立即返回
2.4.13 brpop
同上
2.5 set 数据类型
- 添加到集合的顺序是无序的
- 添加到集合后是去重的,结果不会有重复的值
2.5.1 sadd
sadd [key] [element]...
# sadd s1 a b c d a b c d # 向集合中添加重复的元素,但是结果中没有重复的元素
2.5.2 srem
删除指定的元素
srem [key] [element]...
# srem s1 a
2.5.3 scard
查询集合的元素个数
scard [key]
# scard s1
2.5.4 sismember
sismember [key] [element]
# sismember s1 c
2.5.5 srandmember
随机返回指定个数的元素
srandmember [key] [count]
# srandmember s1 1
2.5.6 spop
spop [key] [count]
# spop s1 1 删除并弹出 指定个数的元素
2.5.7 smembers
smembers [key]
# smembers s1 返回集合s1 的元素列表
2.5.8 sinter
获取两个集合的交集
2.5.9 sunion
获取两个集合的并集
2.5.10 sdiff
- 获取两个集合的差集
- 就是以第一个集合为依据,在其余的结合中寻找对应的值
2.6 zset 数据类型
- 是一个去除重复数据的集合
- 通过设置分数字段后,来对集合进行排序
- 所以综合就是 既不重复 又是有序的
2.6.1 zadd
zadd [key] [score] [element]...
# zadd z1 90 aa 40 bb 99 cc
2.6.2 zcard
获取集合的个数
zcard [key]
# zcard z1
2.6.3 zscore
获取某个member的分数
zscore [key] [member]
2.6.4 zrank
查询某个member的排名
zrank [key] [member]
# zrank z1 cc
2.6.5 zrem
删除某个member
zrem [key] [member]
# zrem z1 cc
2.6.6 zincrby
增加某个member的分数
zincrby [key] [score] [member]
# zincrby z1 5 aa
2.6.7 zrange
按照指定的范围从小到大 返回member
zrange [key] [min] [max] [withscores]
# zrange z1 0 3 withscores
2.6.8 zremrangebyscore
删除指定返回的member
zremrangebyscore [key] [min] [max]
# zremrangebyscore z1 10 30
2.6.9 zinterstore
跟Set集合的方式保持一致
2.6.10 zunionstore
跟Set集合的方式保持一致
2.7 bitmaps 数据类型
2.7.1 setbit
- 根据offset位置来设置二进制的值。设置比特值.
- 此时设置的是比特的位置,不是字节的位置。
- 一个字节是8个比特位
setbit [key] [offset] [value]
# setbit k1 0 1
通过上述截图可以看到。所以设置了两次值,但是长度任然是1,因为设置两次的位置都是在同一个字节内
2.7.2 getbit
根据offset位置来获取对应的二进制值
getbit [key] [offset]
# getbit k1 0
2.7.3 bitcount
获取Bitmaps指定范围值为1的个数。是字节范围,不是比特范围
bitcount [key] [start] [end]
# bitcount k1 0 0
上述的位置是字节位置,不是比特位置
2.7.4 bitop
是一个复合操作,它可以做多个Bitmaps 的 and(交集)or(并集)not(非)xor(异或)操作并将结果保存在destkey中
bitop [operation] [destkey] [key1]...
# bitop or dest k1 k2
2.7.5 bitpos
计算Bitmaps中第一个值为targetBit 的偏移量
bitpos [key] [bit] [start] [end]
# bitpos k1 1 0 0