redis常用命令及数据类型和使用场景

在使用set命令为键重新赋值时注意,
set会消除键的过期时间
将本来60秒后过期的键,变为永不过期的键,在开发中一定要注意
后边我们会单独有一篇关于键的过期的博客

全局命令

查看所有的键,支持模糊查询

127.0.0.1:6379> keys *
1) "k2"
2) "k1"
3) "k3"
4) "book"
127.0.0.1:6379> keys k*
1) "k2"
2) "k1"
3) "k3"

计算键的总数

127.0.0.1:6379> dbsize
(integer) 4

检查键是否存在,存在返回1,不存在返回0

127.0.0.1:6379> exists book
(integer) 1
127.0.0.1:6379> exists name
(integer) 0

删除键,键存在并删除成功返回1,不存在键删除失败返回0

127.0.0.1:6379> del k1
(integer) 1
127.0.0.1:6379> del k1
(integer) 0
@支持同时删除多个键
127.0.0.1:6379> keys *
1) "k2"
2) "a"
3) "b"
4) "book"
5) "c"
6) "k3"
127.0.0.1:6379> del a b c
(integer) 3
127.0.0.1:6379> keys *
1) "k2"
2) "book"
3) "k3"

键过期

127.0.0.1:6379> expire k1 10
(integer) 1
127.0.0.1:6379> keys *
1) "k1"
2) "book"
127.0.0.1:6379> keys *
1) "book"
#可以通过ttl命令来观察键的剩余时间
127.0.0.1:6379> set k1 name
OK
127.0.0.1:6379> expire k1 60
(integer) 1
127.0.0.1:6379> ttl k1
(integer) 6
127.0.0.1:6379> ttl k1
(integer) 1
#-2表示键不存在
127.0.0.1:6379> ttl k1
(integer) -2
#-1表示键存在但没设置过期时间
127.0.0.1:6379> ttl book
(integer) -1

键的数据结构类型

type的命令返回的数据类型:string hash list set zset,redis支持的数据类型

127.0.0.1:6379> type book
zset
#键不存在,返回none
127.0.0.1:6379> type k1
none

数据结构和内部编码

127.0.0.1:6379> object encoding book
"ziplist"

字符串(string)

缓存功能:redis作为缓存层、mysql作为存储层
计数:秒杀、点赞、视频播放数
session共享
限速:限制短信获取的次数 如限制1分钟内短信获取不能超过3次 限制网站中IP地址不能再一秒之内的访问次数

redis中的字符串可以存储:简单字符串、复杂字符串、数字、二进制(图片、音频、视频),但是值最大不能超过512MB

设置值

127.0.0.1:6379> set k1 name
OK

获取值

127.0.0.1:6379> get k1
"name"
#如果不存在,返回nil
127.0.0.1:6379> get k2
(nil)

批量设置值

127.0.0.1:6379> mset a 1 b 2 c 3
OK

批量获取值

这里是引用

127.0.0.1:6379> mget a b c
1) "1"
2) "2"
3) "3"

在这里插入图片描述在这里插入图片描述

在开发中使用批量操作,有助于提高业务处理效率,但是注意每次批量操作所发送的命令数不是无限制的,如果数量过多会造成redis阻塞或者网络阻塞

计数

计数分为自增、自减、自增指定数字、自减指定数字、自增浮点数
incr decr incrby decrby incrbyfloat

127.0.0.1:6379> set num 0
OK

#自增
127.0.0.1:6379> incr num
(integer) 1
127.0.0.1:6379> get num
"1"

#自增指定数字
127.0.0.1:6379> incrby num 2
(integer) 3
127.0.0.1:6379> get num
"3"

#自减
127.0.0.1:6379> decr num
(integer) 2
127.0.0.1:6379> get num
"2"

#自减指定数字
127.0.0.1:6379> decrby num 3
(integer) -1
127.0.0.1:6379> get num
"-1"

#自增浮点数
127.0.0.1:6379> set num1 1.0
OK
127.0.0.1:6379> incrbyfloat num1 0.2
"1.2"

追加值

127.0.0.1:6379> set k1 name
OK
127.0.0.1:6379> append k1 =fengling
(integer) 13
127.0.0.1:6379> get k1
"name=fengling"

字符串长度

127.0.0.1:6379> strlen k1
(integer) 13
#中文返回是占的字节数,一个汉字占3个字节
127.0.0.1:6379> set k2 姓名
OK
127.0.0.1:6379> strlen k2
(integer) 6

设置指定位置的字符

127.0.0.1:6379> setrange k1 4 :
(integer) 13
127.0.0.1:6379> get k1
"name:fengling"

获取部分字符串

#索引从0开始,不会出现下标越界的错误
127.0.0.1:6379> getrange k1 0 3
"name"
127.0.0.1:6379> getrange k1 0 25
"name=fengling"
字符串的内部编码

字符串的内部编码有3种:
int
embstr:小于39个字节的字符串
raw:大于39个字符串

127.0.0.1:6379> set k1 1
OK
127.0.0.1:6379> object encoding k1
"int"
127.0.0.1:6379> set k2 name
OK
127.0.0.1:6379> object encoding k2
"embstr"
127.0.0.1:6379> set k3 dsfjsldjfldsjfldsjfldsjfldsjfdslfjssdfdsfdsfsdfafdsfsdfdsafffffffffffffffffffffffffffffffffffffffffff
OK
127.0.0.1:6379> object encoding k3
"raw"

哈希(hash)

应用场景:聚合场景

Redis中的哈希类型为:key field:value的形式

设置值

#成功返回1,失败返回0
127.0.0.1:6379> hset user name fengling
(integer) 1
127.0.0.1:6379> hset user age 18
(integer) 1

获取值

#如果键或field不存在,会返回nil
127.0.0.1:6379> hget user name
"fengling"
127.0.0.1:6379> hget user k1
(nil)

删除field

127.0.0.1:6379> hdel user age
(integer) 1
127.0.0.1:6379> hget user age
(nil)

计算field个数

127.0.0.1:6379> hlen user
(integer) 1

批量设置或获取filed-value

127.0.0.1:6379> hmset add name fengling age 18
OK
127.0.0.1:6379> hmget add name age
1) "fengling"
2) "18"

判断field是否存在

#存在返回1,不存在返回0
127.0.0.1:6379> hexists add name
(integer) 1

获取所有的field和value

127.0.0.1:6379> hkeys add
1) "name"
2) "age"
127.0.0.1:6379> hvals add
1) "fengling"
2) "18"

获取所有的field-value

127.0.0.1:6379> hgetall add
1) "name"
2) "fengling"
3) "age"
4) "18"

计算value的字符串长度

127.0.0.1:6379> hstrlen add name
(integer) 8

hash的内部编码

hash的内部编码有两种:
ziplist:默认field为512个,小于64字节
hashtable:field大于512个,大于64字节

列表(list)

消息队列
文章列表

添加操作

#从右边插入元素
127.0.0.1:6379> rpush k1 1 2 3 4 5
(integer) 5
127.0.0.1:6379> lrange k1 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"

#从左边插入元素
127.0.0.1:6379> lpush k2 1 2 3 4 5
(integer) 5
127.0.0.1:6379> lrange k2 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"

#向某个元素前或后插入元素
linsert key beforce|after pivot value
#前面
127.0.0.1:6379> linsert k1 before 2 a
(integer) 6
127.0.0.1:6379> lrange k1 0 -1
1) "1"
2) "a"
3) "2"
4) "3"
5) "4"
6) "5"
#后面
127.0.0.1:6379> linsert k2 after 2 b
(integer) 6
127.0.0.1:6379> lrange k2 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "b"
6) "1"

查找

#查找指定区间的值
127.0.0.1:6379> lrange k1 0 -1
1) "1"
2) "a"
3) "2"
4) "3"
5) "4"
6) "5"

#根据索引查找值
127.0.0.1:6379> lindex k1 2
"2"

#获取列表长度
127.0.0.1:6379> llen k1
(integer) 6

删除

#从列表左侧弹出元素
127.0.0.1:6379> lpop k1
"1"

#从列表右侧弹出
127.0.0.1:6379> rpop k1
"5"

#删除指定元素,删除2个为a的元素
127.0.0.1:6379> lrem k1 2 a
(integer) 1

#按照索引范围修剪列表,删除区间之外的元素
127.0.0.1:6379> ltrim k2 2 5
OK
127.0.0.1:6379> lrange k2 0 -1
1) "3"
2) "2"
3) "b"
4) "1"

修改

127.0.0.1:6379> lset k1 0 a 
OK
127.0.0.1:6379> lrange k1 0 -1
1) "a"
2) "2"
3) "3"
4) "4"
5) "5"

阻塞操作

#左右阻塞
blpop key timeout
brpop key timeout
list内部编码

列表类型的内部编码有两种:
ziplist:元素个数小于512,字节小于64
linkedlist:元素个数打印512,字节大于64

集合(set)

标签、生成随机数(抽奖)、社交需求

添加元素

127.0.0.1:6379> sadd k1 a b c a b c
(integer) 3

删除元素

#返回结果为成功删除元素
127.0.0.1:6379> srem k1 a b
(integer) 2

集合元素个数

127.0.0.1:6379> scard k1
(integer) 1

判断元素是否存在集合中

#存在返回1,不存在返回0
127.0.0.1:6379> sismember key c
(integer) 0

随机从集合返回指定个数元素

127.0.0.1:6379> srandmember k2 2
1) "f"
2) "c"

随机删除集合元素

127.0.0.1:6379> spop k2
"c"

获取所有元素

127.0.0.1:6379> smembers k2
1) "a"
2) "b"
3) "e"
4) "f"
5) "d"

交集

127.0.0.1:6379> sadd k1 a b c d e
(integer) 5
127.0.0.1:6379> sadd k2 a b g d h 
(integer) 5
127.0.0.1:6379> sinter k1 k2
1) "d"
2) "b"
3) "a"
#将交集重新存入新的key中
sinterstore nwekey k1 k2

并集

127.0.0.1:6379> sunion k1 k2
1) "b"
2) "a"
3) "e"
4) "g"
5) "h"
6) "d"
7) "c"
#将交集重新存入新的key中
sunionstore nwekey k1 k2

差集

#差集分为左差和右差,根据输入的顺序
127.0.0.1:6379> sdiff k1 k2
1) "e"
2) "c"
127.0.0.1:6379> sdiff k2 k1
1) "g"
2) "h"
#将交集重新存入新的key中
sdiffstore nwekey k1 k2
set内部编码

集合有两种编码:
intset:元素个数小于512
hashtable:元素不为整数是

有序集合(zset)

应用场景:
排行榜、获赞数等

redis中有序集合由分数和元素组成
有序集合中的元素不能重合,但是score(分数)是可以重合的

添加元素

127.0.0.1:6379> zadd k1 1 python 2 java 3 c 4 c++
(integer) 3

计算元素个数

127.0.0.1:6379> zcard k1
(integer) 4

查看某个元素的分数

127.0.0.1:6379> zscore k1 python
"1"
127.0.0.1:6379> zscore k1 c++
"4"

返回根据分数排序后的排名范围的元素

#降序
127.0.0.1:6379> zrange k1 0 -1
1) "python"
2) "java"
3) "c++"
#升序
127.0.0.1:6379> zrevrange k1 0 -1
1) "c++"
2) "java"
3) "python"

获取元素根据分数排序后的索引

#升序
127.0.0.1:6379> zrank k1 python
(integer) 0
127.0.0.1:6379> zrank k1 c
(integer) 2
#降序
127.0.0.1:6379> zrevrank k1 python
(integer) 3
127.0.0.1:6379> zrevrank k1 c
(integer) 1

删除元素

#成功删除返回删除元素的个数,失败返回0
127.0.0.1:6379> zrem k1 c
(integer) 1
127.0.0.1:6379> zrange k1 0 -1
1) "python"
2) "java"
3) "c++"

增加元素分数

#返回增加后的值
127.0.0.1:6379> zincrby k1 2 java
"4"
127.0.0.1:6379> zscore k1 java
"4"

返回指定分数范围的元素

#存放各位的Java成绩
127.0.0.1:6379> zadd java 78 tom 89 fengling 67 xiaoyan 56 lingtian
(integer) 4

#没有及格的
127.0.0.1:6379> zrangebyscore java 0 60
1) "lingtian"
#还可以使用 -inf 和 +inf分别代表无限小和无限大
127.0.0.1:6379> zrangebyscore java 60 +inf
1) "xiaoyan"
2) "tom"
3) "fengling"
127.0.0.1:6379> zrangebyscore java -inf 60
1) "lingtian"

返回指定分数范围的元素个数

127.0.0.1:6379> zcount java 60 100
(integer) 3

删除元素

#删除指定排名的元素
zremrangebyrank key start end
#删除指定分数范围的元素
zremrangebyscore key min max
zset内部编码

有序集合内部编码有两种:
ziplist 元素个数128个 64字节
skiplist 元素个数大于128个 大于64字节

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值