Redis的5种数据类型及常用命令

版权声明:本文为博主原创文章版权归作者和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

猜你喜欢

转载自blog.csdn.net/javaee_gao/article/details/89323321
今日推荐