redis常用linux指令(无介绍快使用)
问题背景
- 有时候需要在linux直接操作redis,可老是忘记指令,写一篇快使用redis指令
登录关闭redis
1 登录redis客户端
redis-cli -h 127.0.0.1 -p 6379 -a password
2 关闭redis客户端
redis-cli shutdown
创建键值对
1 创建键为:k1,值为:hello
set k1 hello
2 获取键:k1的值
get k1
切换16个数据库
1 数据库索引为0-15,切换第16个数据库
select 15
数据库键的数量
dbsize
清空数据库
1 清空当前库
flushdb
2 清空16个库
flushall
模糊查询
1 查询所有的键
keys *
2 查询 k* 开头的所有键
keys k*
3 查询 *e 结尾的所有键
keys *e
4 查询包含 k 的键
keys *k*
通配符单个字符?
1 模糊查询k字头,并且匹配一个字符
keys k?
2 匹配两个未知字符
keys k??
通配括号内的某一个字符
1 记得其他字母,就第二个字母可能是a或e
keys r[ae]dis
判断key是否存在
1 判断键k1是否存在
exists k1
移动key到不同数据库
1 移动到第9个数据库
move k1 8
ttl key:查看键还有多久过期(-1永不过期,-2已过期)
1 查看k1多久过期,time to live 还能活多久
ttl k1
设置过期时间
1 设置k1过期时间为10s
expire k1 10
查看键的类型
1 type key
type k1
字符串类型
1 创建键
set k1 v1
2 获取值
get k1
3 追加字符串值abc
append k1 abc
4 查看value的长度
strlen k1
5 删除键
del k1
数字类型加减
1 创建键
set k1 1
2 自增+1
incr k1
3 自减-1
decr k1
4 自增任意数,自增+3
incrby k1 3
5 自减任意数,自减-3
decr k1 3
range使用
1 查看String类型中索引包含的值,类似substring,查看所有
getrange k1 0 -1
2 查看0到3共4个字符
getrange k1 0 3
3 替换k1的值,从下标1开始提供为xxx
setrange k1 1 xxx
setex设置数据的生命周期set with expire
1 添加k1 v1数据的同时,设置5秒的声明周期
setex k1 5 v1
setnx分布式锁set if not exist
1 添加数据的时候判断是否已经存在,防止已存在的数据被覆盖掉,如果k1存在返回0,不存在返回1
setnx k1 v1
批量设置和查询
1 mset
mset k1 v1 k2 v2
2 msetnx
msetnx k1 v1 k2 v2
getset先获取,null进行创建,否则修改value
getset k1 v1
列表list
1 lpush,l:left 自左向右→添加 (从上往下添加),先添加1,再添加2,最后5
lpush list01 1 2 3 4 5
2 因为先添加的1,最后添加的5,所以从左边开始取,是先取5
lrange list01 0 -1
"5"
"4"
"3"
"2"
"1"
3 rpush,r:right 自右向左←添加(从下往上添加),先添加5,再添加4,最后添加1
rpush list02 1 2 3 4 5
4 lpop移除左边第一个元素,也就是1
lpop list02
4 rpop移除右边第一个元素,也就是5
rpop list02
5 lindex从左边开始查询索引
lindex list01 2
6 llen:返回集合长度
llen list01
7 lrem:删除n个value,从list01中移除1个3
lrem list01 1 3
8 ltrim:截取指定范围的值,别的全扔掉,与substring一样,只不过集合被清除了
ltrim list01 1 3
9 lset:改变某个下标的某个值,将list02中下标为0的元素修改成x
lset list02 0 x
10 linsert:插入元素(指定某个元素之前/之后)
从左边进入,在list02中的2元素之前插入java
linsert list02 before 2 java
从左边进入,在list02中的2元素之后插入redis
linsert list02 after 2 redis
集合set,不允许重复
1 sadd:添加到集合
sadd set01 1 2 2 3 3 3
2 smembers:查看集合
smembers set01
3 sismember:判断是否存在
sismember set01 5
返回0和1,表示布尔false不存在和true存在,不是下标
4 scard:获得集合中的元素个数
scard set01
5 srem:删除集合中的元素 srem key value
srem set01 2
6 srandmember:从集合中随机获取几个元素 srandmember 整数(个数)
- 从set01中随机获取3个元素
srandmember set01 3
7 spop:随机出栈(移除)
- 随机移除一个元素
spop set01
8 smove:移动元素:将key1某个值赋值给key2
- 将set01中的元素3移动到set02中
smove set01 set02 3
9 交集:sinter
- set01和set02共同存在的元素
sinter set01 set02
10 并集:sunion
- 将set01和set02中所有元素合并起来(排除重复的)
sunion set01 set02
11 差集:sdiff
- 在set01中存在,在set02中不存在
sdiff set01 set02
哈希Hash,KV模式不变,但V是一个键值对
1 hset:添加
- 添加user,值为id=1001
hset user id 1001
2 hget:得到
- 查询user,必须指明具体的字段
hget user id
3 hmset:多添加
- 添加学生student,属性一堆
hmset student id 101 name tom age 22
4 hmget:多得到
- 获取学生名字和年龄
hmget student name age
5 hgetall:得到全部
- 获取学生全部信息
hgetall student
6 hdel:删除属性
- 删除学生年龄属性
hdel student age
7 hlen:返回元素的属性个数
- student属性的数量,id和name,共两个属性
hlen student
8 hexists:判断元素是否存在某个属性
- student中是否存在name属性
hexists student name
9 hkeys:获得属性的所有key
- 获取student所有的属性名
hkeys student
10 hvals:获得属性的所有value
- 获取student所有属性的值(内容)
hvals student
11 hincrby:自增(整数)
- 自增整数2
hincrby student age 2
12 hincrbyfloat:自增(小数)
- 自增小数5.5
hincrbyfloat user money 5.5
13 hsetnx:添加的时候,先判断是否存在
- 添加时,判断age是否存在
hsetnx student age 18
有序集合Zset
1 zadd/zrange (withscores):添加/查询
127.0.0.1:6379> zadd zset01 10 vip1 20 vip2 30 vip3 40 vip4 50 vip5
(integer) 5
127.0.0.1:6379> zrange zset01 0 -1 # 查询数据
1) "vip1"
2) "vip2"
3) "vip3"
4) "vip4"
5) "vip5"
127.0.0.1:6379> zrange zset01 0 -1 withscores # 带着分数查询数据
1) "vip1"
2) "10"
3) "vip2"
4) "20"
5) "vip3"
6) "30"
7) "vip4"
8) "40"
9) "vip5"
10) "50"
2 zrangebyscore:模糊查询
- ( : 不包含
- limit:跳过几个截取几个
127.0.0.1:6379> zrangebyscore zset01 20 40 # 20 <= score <= 40
1) "vip2"
2) "vip3"
3) "vip4"
127.0.0.1:6379> zrangebyscore zset01 20 (40 # 20 <= score < 40
1) "vip2"
2) "vip3"
127.0.0.1:6379> zrangebyscore zset01 (20 (40 # 20 < score < 40
1) "vip3"
127.0.0.1:6379> zrangebyscore zset01 10 40 limit 2 2 # 10 <= score <=
40,共返回四个,跳过前2个,取2个
1) "vip3"
2) "vip4"
127.0.0.1:6379> zrangebyscore zset01 10 40 limit 2 1 # 20 <= score <=
40,共返回四个,跳过前2个,取1个
1) "vip3"
3 zrem:删除元素
zrem zset01 vip5
4 zcard/zcount/zrank/zscore:集合长度/范围内元素个数/得元素下标/通过值得分数
127.0.0.1:6379> zcard zset01 # 集合中元素的个数
(integer) 4
127.0.0.1:6379> zcount zset01 20 30 # 分数在20~40之间,共有几个元素
(integer) 2
127.0.0.1:6379> zrank zset01 vip3 # vip3在集合中的下标(从上向下)
(integer) 2
127.0.0.1:6379> zscore zset01 vip2 # 通过元素获得对应的分数
"20"
5 zrevrank:逆序找下标(从下向上)
zrevrank zset01 vip3
6 zrevrange:逆序查询
127.0.0.1:6379> zrange zset01 0 -1 # 顺序查询
1) "vip1"
2) "vip2"
3) "vip3"
4) "vip4"
127.0.0.1:6379> zrevrange zset01 0 -1 # 逆序查询
1) "vip4"
2) "vip3"
3) "vip2"
4) "vip1"
7 zrevrangebyscore:逆序范围查找
127.0.0.1:6379> zrevrangebyscore zset01 30 20 # 逆序查询分数在30~20之间的
(注意,先写大值,再写小值)
1) "vip3"
2) "vip2"
127.0.0.1:6379> zrevrangebyscore zset01 20 30 # 如果小值在前,则结果为null
(empty list or set)
作为程序员第 118 篇文章,每次写一句歌词记录一下,看看人生有几首歌的时间,wahahaha …