版权声明:本文为博主原创文章版权归作者和CSDN共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 https://blog.csdn.net/javaee_gao/article/details/89323321
redis的数据类型
- String
String类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M
常用String类型命令
命令 | 说明 |
---|---|
set |
设置String类型的value值,直接符合我们对key-value的认知 |
get |
根据key的值获取之前设置的value值 |
append |
对指定key值的value进行追加内容,相当于字符串的拼接 |
strlen |
返回字符串字符的个数,若key不存在则显示为0 |
del |
删除key对应的value值 |
incr |
对key的value值进行count的加运算,前提是对应的value必须是数值类型 |
decr |
对key的value值进行count的减运算,前提是对应的value必须是数值类型 |
setex |
设置String类型value值,并指定存活时间单位(秒) |
setnx |
设置给String类型的value值了,如果key对应的value值,则返回0,否则返回1,常用于分布式锁 |
getrange |
指定索引区间,获取key上对应的value值 |
setrange |
指定索引区间,覆盖key上对应value值 |
String实例演示
// 设置值
127.0.0.1:6379> set haha 1
OK
// 追加值
127.0.0.1:6379> append haha 23
(integer) 3
// 获取值
127.0.0.1:6379> get haha
"123"
// 获取值的长度
127.0.0.1:6379> strlen haha
(integer) 3
// 自增1
127.0.0.1:6379> incr haha
(integer) 124
// 自减1
127.0.0.1:6379> decr haha
(integer) 123
// 自增指定单位数值
127.0.0.1:6379> incrby haha 3
(integer) 126
// 自减指定单位数值
127.0.0.1:6379> decrby haha 3
(integer) 123
// 获取指定索引的值(其中0代表从头开始,-1 表示在尾结束)
127.0.0.1:6379> getrange haha 0 -1
"126redis"
// setRange 从指定索引0开始覆盖元素
127.0.0.1:6379> setrange haha 0 fast
(integer) 8
127.0.0.1:6379> get haha
"fastedis"
// 设置key的值并指定生存时间12秒
127.0.0.1:6379> setex redis 12 value
OK
// 设置值,当且仅当值可以写入时,返回1,否则为0,常用作分布式锁
127.0.0.1:6379> setnx xixi 2
(integer) 1
127.0.0.1:6379> setnx xixi 3
(integer) 0
127.0.0.1:6379> get xixi
"2"
// 设置多个值
127.0.0.1:6379> mset aa 1 bb 2 cc 3
OK
// 获取多个key值
127.0.0.1:6379> mget aa bb cc
1) "1"
2) "2"
3) "3"
// 先获取值在设置值
127.0.0.1:6379> getset xixi 4
"2"
127.0.0.1:6379> get xixi
"4"
- List
List(列表)
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。它的底层实际是个链表,你可以把它想象成java的栈
List常用方法
命令 | 说明 |
---|---|
lpush |
将一个或多个值 value 插入到列表 key 的表头 ,如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表头 |
lrange |
返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定。0代表第一个元素,-1表示列表最后一个元素 |
lpop |
移除并返回列表 key 的头元素。即弹出最左边的元素,也就是最后一个lpush的元素 |
llen |
返回列表的长度,若key不存在则显示为0 |
lrem |
根据参数 count 的值,移除列表中与参数 value 相等的元素。count 的值可以是以下几种:count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。count = 0 : 移除表中所有与 value 相等的值。 |
lindex |
返回列表对应索引的value值 |
linsert |
在表头已知元素前或者后添加元素 |
lset |
将列表 key 下标为 index 的元素的值设置为 value |
ltrim |
对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,其他区间全部删除 |
List实例演示
// 向列表添加元素
127.0.0.1:6379> lpush cache::num 1 2 3
(integer) 3
// 获取所有的元素
127.0.0.1:6379> lrange cache::num 0 -1
1) "3"
2) "2"
3) "1"
// 弹出列表的头元素
127.0.0.1:6379> lpop cache::num
"3"
// 判断列表长度
127.0.0.1:6379> llen cache::num
(integer) 2
127.0.0.1:6379> llen gan
(integer) 0
// 删除列表的某个值(从表头开始删除1个列表为2的值)
127.0.0.1:6379> lrem cache::num 1 2
(integer) 1
// 返回列表表头元素值
127.0.0.1:6379> lindex cache::num 0
"1"
// 在列表1元素前添加2
127.0.0.1:6379> linsert cache::num before 1 2
(integer) 2
// 将索引为0(表头)的元素设置为4
127.0.0.1:6379> lset cache::num 0 4
OK
// 保留指定区间的值如保留0 1,即保留表头前两个元素
127.0.0.1:6379> ltrim cache::num 0 1
OK
- Set
Redis的Set是string类型的无序集合。它是通过hash散列key实现,可理解为java中的set,同样的key对应value是不重复的
Set常用方法
命令 | 说明 |
---|---|
sadd |
将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将不在添加 |
smembers |
遍历获取set集合key对应的value值 |
scard |
判断集合value值的个数 |
srem |
移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略。 |
spop |
移除并返回集合中的一个随机元素。 |
srandmember |
选定key随机返回元素个数, 如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合。如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值。注意 ⚠️ 该操作和 SPOP key 相似,但 SPOP key 将随机元素从集合中移除并返回,而 SRANDMEMBER 则仅仅返回随机元素,而不对集合进行任何改动。 |
smove |
将 member 元素从 A 集合移动到 B 集合。 |
sdiff |
A集合和B集合的差集(属于A元素但是不属于b元素) |
sinter |
A集合和B集合的交集(属于A元素也属于b元素) |
sunion |
A集合和B集合的合集(返回一个集合的全部成员,该集合是所有给定集合的并集) |
set实例演示
// 添加元素
127.0.0.1:6379> sadd database mysql mongondb redis
(integer) 3
// 遍历set元素集合
127.0.0.1:6379> smembers database
1) "redis"
2) "mysql"
3) "mongondb"
// 判断mysql是数据集合内的值
127.0.0.1:6379> sismember database mysql
(integer) 1
// 判断set集合长度
127.0.0.1:6379> scard database
(integer) 3
// 删除集合中的redis
127.0.0.1:6379> srem database redis
(integer) 1
// 随机删除一个元素
127.0.0.1:6379> spop database
"mysql"
// 添加课程
127.0.0.1:6379> sadd class english chinese math art
(integer) 4
// 如果count>集合长度返回所有集合
127.0.0.1:6379> srandmember class 5
1) "chinese"
2) "math"
3) "english"
4) "art"
// 如果不指定count值,随机弹出1个数
127.0.0.1:6379> srandmember class
"math"
// 如果count>0且小与集合长度,随机弹出count个不重复的元素
127.0.0.1:6379> srandmember class 3
1) "chinese"
2) "english"
3) "art"
// 如果count<0 且绝对值小与集合长度,随机弹出count个元素,元素可能重复
127.0.0.1:6379> srandmember class -3
1) "english"
2) "english"
3) "art"
// 将class的chinese移动到haha集合中
127.0.0.1:6379> smove class haha chinese
(integer) 1
127.0.0.1:6379> sadd haha xixi
(integer) 1
// 数据集合class但是不属于集合haha的值(即差集)
127.0.0.1:6379> sdiff class haha
1) "math"
2) "english"
3) "art"
// 毕竟并集
127.0.0.1:6379> sadd class chinese
(integer) 1
// class集合和haha集合刚刚都有chinese(交集)
127.0.0.1:6379> sinter haha class
1) "chinese"
// 全集
127.0.0.1:6379> sunion haha class
1) "chinese"
2) "math"
3) "art"
4) "xixi"
5) "english"
- Hash
Redis hash 是一个键值对集合。Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象类似Java里面的Map<String,Object>
Hash常用命令
命令 | 说明 |
---|---|
hset |
将哈希表 hash 中域 field 的值设置为 value 。如果域 field 已经存在于哈希表中, 那么它的旧值将被新值 value 覆盖,返回0,若值存在返回1 |
hget |
返回hash表域对象对值 |
hlen |
返回哈希表 key 中域的数量。 |
hexists |
判断某个value值是否存在hash表中 |
hincrby |
对hash表域对象对应的value值进行+count的操作,前提是value必须是Int数值型的数,为哈希表 key 中的域 field 的值加上增量 increment 。增量也可以为负数,相当于对给定域进行减法操作。如果 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。如果域 field 不存在,那么在执行命令前,域的值被初始化为 0 。 |
hincrbyfloat |
对hash表域对象对应的value值进行+count的操作,前提是value必须是浮点型数,为哈希表 key 中的域 field 的值加上增量 increment 。增量也可以为负数,相当于对给定域进行减法操作。如果 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。如果域 field 不存在,那么在执行命令前,域的值被初始化为 0 。 |
hsetnx |
当且仅当域 field 尚未存在于哈希表的情况下, 将它的值设置为 value 。如果给定域已经存在于哈希表当中, 那么命令将放弃执行设置操作。 |
hgetall |
返回值每个域名(field name)之后是域的值(value),所以返回值的长度是哈希表大小的两倍。 |
hdel |
删除hash对应域对象值 |
Hash实例演示
// hash设置值
127.0.0.1:6379> hset db mysql www.mysql
(integer) 1
127.0.0.1:6379> hset db redis www.redis
(integer) 1
127.0.0.1:6379> hset db oracle www.oracle
(integer) 1
// 获取hash域值
127.0.0.1:6379> hget db redis
"www.redis"
// 获取hash表长度
127.0.0.1:6379> hlen db
(integer) 3
// 判断hash中redis值是否存在
127.0.0.1:6379> hexists db redis
(integer) 1
// 遍历所有域对象和其对应的value值
127.0.0.1:6379> hgetall db
1) "mysql"
2) "www.mysql"
3) "redis"
4) "www.redis"
5) "oracle"
6) "www.oracle"
// 删除oracle域对象值
127.0.0.1:6379> hdel db oracle
(integer) 1
// 对mobile对应value加1
127.0.0.1:6379> hincrby order mobile 1
(integer) 2
- Sorted Set
Zset(sorted set:有序集合) Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。
Sorted Set常用命令
命令 | 说明 |
---|---|
zadd |
将一个或多个 member 元素及其 score 值加入到有序集 key 当中。如果某个 member 已经是有序集的成员,那么更新这个 member 的 score 值,并通过重新插入这个 member 元素,来保证该 member 在正确的位置上。 |
zscore |
返回有序集 key 中,成员 member 的 score 值。如果 member 元素不是有序集 key 的成员,或 key 不存在,返回 nil 。 |
zrange |
返回有序集 key 中,指定区间内的成员。其中成员的位置按 score 值递增(从小到大)来排序。具有相同 score 值的成员按字典序(lexicographical order )来排列。可以通过使用 WITHSCORES 选项,来让成员和它的 score 值一并返回,返回列表以 value1,score1, …, valueN,scoreN 的格式表示。 客户端库可能会返回一些更复杂的数据类型,比如数组、元组等。 |
zrangeByScore |
返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。具有相同 score 值的成员按字典序(lexicographical order)来排列(该属性是有序集提供的,不需要额外的计算)。min 和 max 可以是 -inf 和 +inf 区间的取值使用闭区间 (小于等于或大于等于),你也可以通过给参数前增加 ( 符号来使用可选的开区间 |
zrem |
指定key和value删除成员 |
zcard |
获取Sorted Set集合成员数量 |
zCount |
返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量。 |
zrank |
返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递增(从小到大)顺序排列。排名以 0 为底,也就是说, score 值最小的成员排名为 0 。 |
Sorted Set演示
// 添加Sortset有序值
127.0.0.1:6379> zadd zset 12 value1
(integer) 1
127.0.0.1:6379> zadd zset 12 value2
(integer) 1
127.0.0.1:6379> zadd zset 14 value3
(integer) 1
// 根据key和对应的value返回相应的分数
127.0.0.1:6379> zscore zset value1
"12"
// 遍历zset集合(不带分数)
127.0.0.1:6379> zrange zset 0 -1
1) "value1"
2) "value2"
3) "value3"
// 遍历zset集合(带分数)
127.0.0.1:6379> zrange zset 0 -1 withscores
1) "value1"
2) "12"
3) "value2"
4) "12"
5) "value3"
6) "14"
// 删除zset的value值
127.0.0.1:6379> zrem zset value2
(integer) 1
// 获取Zset集合长度
127.0.0.1:6379> zcard zset
(integer) 2
// 获取Zset集合中分数在0和100成员数量
127.0.0.1:6379> zcount zset 0 100
(integer) 2
// 根据分数返回成员的排名
127.0.0.1:6379> zadd zset 23 value2
(integer) 1
127.0.0.1:6379> zadd zset 55 value4
(integer) 1
127.0.0.1:6379> zrange zset 0 -1 withscores
1) "value1"
2) "12"
3) "value3"
4) "14"
5) "value2"
6) "23"
7) "value4"
8) "55"
// 返回zset中value1在整个集合的排名顺序
127.0.0.1:6379> zrank zset value1
(integer) 0
// 返回min(相当于-inf)和max(相当于+inf)闭区间,开区间可以使用(
127.0.0.1:6379> ZRANGEBYSCORE zset -inf +inf
1) "value1"
2) "value3"
3) "value2"
4) "value4"
// 带分数的排序
127.0.0.1:6379> ZRANGEBYSCORE zset -inf +inf withscores
1) "value1"
2) "12"
3) "value3"
4) "14"
5) "value2"
6) "23"
7) "value4"
8) "55"
// 开区间分数大与5小于25的成员
127.0.0.1:6379> ZRANGEBYSCORE zset (5 (25
1) "value1"
2) "value3"
3) "value2"
- 通用key操作
命令 | 说明 |
---|---|
keys(正则) |
统配符合正则的key |
exists |
判断key是否存在 |
expire |
对指定的key设置存活时间 |
type |
判断存储key的类型 |
ttl |
判断值是否存在,若设置存活了时间,将返回失效时间的倒计时,-1表示永久存在,-2表示对应的key不存在 |
keys * 返回所有的key值
127.0.0.1:6379> set haha 1
OK
127.0.0.1:6379> set hx 23
OK
返回所有包含h的所有key值
127.0.0.1:6379> keys *h*
1) "haha"
2) "hx"
返回所有以h开头的key值
127.0.0.1:6379> keys h*
1) "hx"
2) "haha"
返回所有以a结尾的key值
127.0.0.1:6379> keys *a
1) "haha"
判断haha这个key值是否存在
127.0.0.1:6379> exists haha
(integer) 1
设置haha的存活时间为1000秒
127.0.0.1:6379> expire haha 1000
(integer) 1
查看haha的存活时间
127.0.0.1:6379> ttl haha
(integer) 968
其中返回的时间若是-1:则表示此key永不过期
返回-2:则表示key已经过期
查看haha的key类型
127.0.0.1:6379> type haha
string
查看redis中key的数量
127.0.0.1:6379> dbsize
(integer) 3