美文网首页数据库java基础
Redis 基本数据类型

Redis 基本数据类型

作者: SheHuan | 来源:发表于2021-07-07 21:14 被阅读0次

在 Redis 中的数据以 key-value 键值对的形式存储,其中 key 是字符串类型的,value 可以有不同的类型,我们所说的 Redis 数据类型,也就是 value 的类型。下边我们来了解一些 key 的常用操作,以及 value 的数据类型。

Redis 中默认有16个数据库,默认使用0号数据库来保存数据,可以通过select index切换,index 是数据库编号[0, 15]

一、key 的常见操作

  • flushall:清空所有数据库中的数据
  • flushdb:清空当前选中数据库中的数据
  • keys pattern:根据正则表达式查看对应的 key,例如 keys * 可以查看全部的 key
  • exists key:查看 key 是否存在
  • del key:删除 key 对应的数据
  • expire key seconds:设置 key 的过期时间 ,单位秒
  • ttl key:(time to live)查询 key 还剩多久过期
  • type key:查看 key 对应的值的类型

二、String

Redis 中的字符串是动态的,内容是可以修改的,一般情况下分配的内存空间是大于需要的,扩容时会在现有内存空间上加倍,最大分配512M内存空间。

  • set:给 key 赋值,不存在则返回 nil
set name zhangsan
  • setex:赋值,并指定过期时间,单位秒
setex name 10 zhangsan
  • setnx:同样可以给 key 赋值,如果 key 对应的值已经存在,不会覆盖旧值
setnx name lisi
  • get:获取 key 的值
get name
  • getrange:按索引区间返回 key 对应 value 的子串,是闭区间,从左往右时索引从0开始,从右往左时索引从-1开始
getrange name 0 4
getrange name 0 -1
  • setrange:从指定索引开始,用新值替换原来的值
setrange name 5 wuji
  • append:如果 key 已经存在,则直接在对应的 value 后追加值,否则创建新的键值对
append name feng
  • getset:获取 key 的值,并重新赋值
getset name lisi
  • strlen:计算字符串长度
strlen name
  • incr:如果 key 对应的字符串是整数,可以给值增加1
incr age
  • incrby:功能和 incr 类似,但 incrby 可以指定增加的步长
incrby age 2
  • decr:如果 key 对应的字符串是整数,可以给值减小1
decr age
  • decrby:功能和 decr 类似,decrby 可以指定减小的步长
decrby age 2
  • mset:同时设置多个值
mset k1 v1 k2 v2
  • mget:同时获取多个值
mget k1 k2
  • msetnx:同时获取多个值,但不会覆盖已经存在的旧值
msetnx k1 v1 k2 v22

三、List

List 简单的理解就是列表,里边的元素可以重复,本质上是一个链表,在 Redis 中 List 可以实现队列(rpush+lpop)和栈(rpush+rpop)的功能。

  • lpush:将值插入到 key 对应列表的头部(左插入),也就是索引为0的位置,如果是第一次 push 操作,则会先创建一个空的列表,再插入值,可以单条插入,也可以批量插入
lpush list1 a
lpush list1 b
lpush list1 c
  • lrange :返回列表中指定索引区间的元素,这里是闭区间,也就是查询操作
lrange list1 0 1

结果如下:


  • rpush:将值插入到 key 对应列表的头部尾部(右插入),也就是索引为(列表长度-1)的位置,其它的特点和 lpush 一致,批量插入几条数据
rpush list2 x y z

再使用lrange查询一下,注意对比和上边lpush方式插入数据后的查询结果:

  • lpop:从列表头部移除指定个数的元素,并返回元素
lpop list1 1
  • rpop:从列表尾部移除指定个数的元素,并返回元素
rpop list1 1
  • lrem:从列表中移除指定个数的指定的元素
lrem list2 2 x
  • lindex:通过索引获取列表中的值
lindex list2 0
  • ltrim:通过索引区间对列表进行裁剪,会直接修改原列表
ltrim list2 3 5
  • rpoplpush:从第一个列表尾部移除一个元素,放到第二个列表头部
rpoplpush list2 list1
  • linsert:在列表中指定元素的前边或后边插入新元素
linsert list2 before y x
linsert list2 after y z
  • lset:更新列表中指定索引的值,小心索引越界的问题
lset list2 1 m
  • llen:计算列表的长度
llen list2

四、Set

Set 集合中的元素是无须、不会重复的。

  • sadd :添加一个或多个元素
sadd set1 a
sadd set1 a b c
  • smembers:获取指定 key 对应 Set 中的全部元素
smembers set1
  • srem:移除 Set 中一个或多个指定元素
srem set1 b c
  • spop:随机移除 Set 中一个或多个元素
spop set1 1
spop set1 2
  • srandmember:随机返回 Set 中的一个或多个元素
srandmember set1 1
srandmember set1 2
  • smove:将第一个 Set 中的指定元素移动到第二个 Set 中:
smove set1 set2 c
  • sdiff:计算第一个 Set 和后边 Set 之间的差集,并返回结果
sdiff set1 set2
  • sinter:计算多个 Set 之间的交集,并返回结果
sinter set1 set2
  • sunion:计算多个 Set 之间的并集,并返回结果
sunion set1 set2
  • sdiffstore:和 sdiff 功能类似,但不直接返回结果,而是将结果保存到新的 Set 中
sdiffstore set3 set1 set2
  • sinterstore:和 sinter 功能类似,但不直接返回结果,而是将结果保存到新的 Set 中

  • sunionstore:和 sunion 功能类似,但不直接返回结果,而是将结果保存到新的 Set 中

  • scard:计算 Set 中的元素个数

scard set1

五、Hash

在 Hash 类型的数据结构中,value 是一个 field-value 键值对,类似于 Map。

  • hset:添加数据,如下添加一个 key 为 hash1 value 为 name zhangsan 键值对的 Hash 类型数据
hset hash1 name zhangsan

也可以批量添加

hset hash1 age 18 email zhangsan@163.com

之前还可以使用hmset命令进行批量添加,但在 Redis4.0.0 后已经过时,不建议使用了。

  • hget:获取值
hget hash1 name
  • hmget:批量获取数据
hmget hash1 age mail
  • hsetnx:如果存在 key field 对应的值则不覆盖原值,而不是直接覆盖,不存在才会添加,
hsetnx hash1 age 20
  • hkeys:获取 Hash 中所有的 field
hkeys hash1
  • hvals:获取 Hash 中所有的 value
hvals hash1
  • hgetall:获取 Hash 中所有的 field、value
hgetall hash1
  • hdel:根据 field 删除 Hash 中的键值对
hdel hash1 age email
  • hexists:根据 field 判断数据是否存在
hexists hash1 name
  • hincrby:filed 对应的值是整数时,可以将值增加指定大小,指定的数字为负数也就是减小指定大小
hincrby hash1 age 2
  • hincrbyfloat:针对 float 类型值的增加、减小
  • hlen:计算 Hash 中键值对的数量
hlen hash1

六、ZSet

ZSet 可以看做是 Set 的增强版,增加了一个score(成绩/得分)字段,是数字,可以用来排序,这样也就保证了集合中数据的有序性。

  • zadd:添加一个或多个元素,下边的数据就是 score
zadd zset1 3 a
zadd zset1 2 b 1 c 5 d 4 e
  • zrange:按照索引区间(闭区间)返回元素,元素默认按照 score 升序排列,withscores参数的作用是返回元素时携带对应的 score,可以根据需要添加
zrange zset1 0 -1 withscores
  • zrevrange:和 zrange 功能类似,但返回的元素按 score 降序排列
zrevrange zset1 0 -1 withscores
  • zrangebyscore:按照 score 区间返回元素,可以使用-inf+inf表示正‘负无穷大,元素会按照 score 升序排列
zrangebyscore zset1 2 4 withscores
  • zrevrangebyscore:功能和 zrangebyscore 类似,但返回的元素按 score 降序排列
zrevrangebyscore zset1 4 2 withscores

还可以添加分页功能limit offset count,取出 score 最高的前几个元素

zrevrangebyscore zset1 +inf 0 withscores limit 0 3
  • zscore:获取指定元素的 score
zscore zset1 d
  • zrem:移除元素
zrem zset1 e
  • zcard:计算集合中的元素个数
 zcard zset1
  • zcount:计算 score 在指定区间内的元素个数
zcount zset1 2 4
  • zincrby:增加指定元素的 score,负数则是减小
zincrby zset1 2 d
  • zrank:返回指定元素的索引,是按 score 升序排列时的索引
zrank zset1 d
  • zrevrank:返回指定元素的索引,是按 score 降序排列时的索引

相关文章

网友评论

    本文标题:Redis 基本数据类型

    本文链接:https://www.haomeiwen.com/subject/imabjltx.html