Redis - 8种数据类型、常用命令及应用

版本 redis 5.0.8,Redis可视化工具为Redis Desktop Manager

8种数据类型

Redis5中提供了8种数据类型:

  • string:最基本的数据类型,二进制安全的字符串(也就是string可以包含任何数据:图片、序列化对象等),最大512M,我们最常用的key-value键值对就是使用string类型
  • list:按照插入顺序的字符串列表,类似于链表LinkedList
  • set:无序的字符串集合,不存在重复的元素。
  • sorted set(Zset):对set的补充,是排序的字符串集合。
  • hash:key-value对的一种集合,常用于存储对象,可以看出具有key和value的map容器
  • bitmap:位图,更细化的一种操作,以bit为单位,通过bit来进行0或者1的设置,表示某个元素对应的值或者状态
  • hyperloglog:基于概率的数据结构(基数统计)
  • Geo:地理位置信息储存起来, 并对这些信息进行操作

最常用的是前5种:String、Hash、List、Set、Zset
后面3种仅在特定的情况下使用

后续基于SpringBoot/Lettuce验证Redis的相关数据类型,不清楚的可以看:SpringBoot - 整合Redis:解析Lettuce与RedisTemplate封装


操作Key

数据类型是值value,key都是string类型,是该数据的唯一标识
Redis提供了操作key值的命令:

  • DEL key 该命令用于在 key 存在时删除 key。

  • DUMP key 序列化给定 key ,并返回被序列化的值。

  • EXISTS key 检查给定 key 是否存在。

  • EXPIRE key seconds 为给定 key 设置过期时间(以秒计)

  • PEXPIRE key milliseconds 设置 key 的过期时间以毫秒计。

  • TTL key 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)

  • PTTL key 以毫秒为单位返回 key 的剩余的过期时间。

  • PERSIST key 移除 key 的过期时间,key 将持久保持。

  • KEYS pattern(keys 通配符 ) 查找所有符合给定模式( pattern)的 key
    获取所有与pattern匹配的key,返回所有与该匹配通配符: * 代表所有 ,也可以直接查找字符

  • RENAME key newkey 修改Key的名称

  • MOVE key db 将当前数据库的 key 移动到给定的数据库 db 当中

  • TYPE key 返回 key 所储存的值的类型

基本就是对应的英文


String

最基本的key-value键值对就是string类型
在这里插入图片描述

赋值

  1. set key value

设置给定 key 的值,如果key已经存储值,set就覆写旧值,且无视类型

set name zhangsan

在这里插入图片描述

在这里插入图片描述

  1. mset key value [key value]

批量设置
在这里插入图片描述

  1. setnx(set if not exists)

只有在key不存在时设置 key 的值,setnx(set if not exists) 命令在指定的 key 不存在时,为 key 设置指定的值,是解决分布式锁的方案之一

SETNX key value  

取值

  1. get key 取得指定key值

获得key为name的值:get name
在这里插入图片描述

  1. getrange key start end获取存储在指定key中字符串的子字符串

获得key为name的值的0~4子字符串
在这里插入图片描述

  1. getbit key offset 对 key 所储存的字符串值,获取指定偏移量上的位(bit)
  2. mget key1 [key2..] 获取所有(一个或多个)给定 key 的值
    当想要查找多个值时不能仅使用get

在这里插入图片描述

  1. getset key value
    getset 命令用于设置指定key的值,并返回key的旧值,当 key 不存在时,返回null

在这里插入图片描述

  1. strlen key 返回 key 所储存的字符串值的长度

删除

del key

删除指定的key,如果存在,返回值数字类型。

在这里插入图片描述

自增/自减

incr key

Incr 命令将key中储存的数字值增1。如果key不存在,那么key的值会先被初始化为 0 ,然后再执行incr操作

incrby key 增量值 

Incrby 命令将key中储存的数字加上指定的增量值

在这里插入图片描述

自减:

decr key
decrby key 减值 

decr命令将key中储存的数字减1/减值

如果存储的不是数字会报错
在这里插入图片描述

字符串拼接

append key value

append命令用于为指定的key追加value至未尾,如果不存在,为其赋值
在这里插入图片描述

SpringBoot中相关操作

  1. Jedis

Jedis比较简单,函数名与Redis命令相同:set、get、exists等,String类型对应set/get函数,Hash类型对应hset/hget函数。。。

在这里插入图片描述

在这里插入图片描述

  1. Lettuce
    SpringBoot提供RedisTemplate封装Lettuce,Redis的命令与相关函数不同

RedisTemplate通过操作类对不同数据类型进行操作,ValueOperations操作类对应String类型,通过valueOps操作

在这里插入图片描述

在这里插入图片描述


Hash

hash是一个string类型的field和value的映射表
key为user,value为[name:zhangsan,id:1,age:22],类似与存放一个user对象,属性为name,id,age
类似与Json字符串:

{
	"user": {
		"name":"zhangsan",
		"id":"1",
		"age":"22"
		}
}

在这里插入图片描述

相关命令

Hash类型的命令是在String类型的基础上加上H做区分:

  • 赋值:hset、hsetnx、hmset

在这里插入图片描述

  • 取值:hget获得hash表中一个指定属性、hmget获得一个或多个属性,hgetAll返回HASH表中所有的字段和值
    还有hkeys、hlen
  HGET KEY FIELD   //获取存储在HASH中的值,根据FIELD得到VALUE
  HMGET key field[field1]      //获取key所有给定字段的值 
  HGETALL key                 //返回HASH表中所有的字段和值 
  HKEYS key   //获取所有哈希表中的字段

在这里插入图片描述

对于Hash类型,keys只能得到key,hkeys可以得到hash字段
在这里插入图片描述

  • 删除:hdel
hdel key field [filed...]

在这里插入图片描述

当然也可以通过del user直接删除该键值对

  • 自增、自减
    HINCRBY key field increment
    为哈希表 key 中的指定字段的整数值加上增量 increment,设置increment为负数即自减
    HINCRBYFLOAT key field increment
    为哈希表 key 中的指定字段的浮点数值加上增量 increment

在这里插入图片描述

  • 其他:hexists key field查看哈希表 key 中,指定的字段是否存在,存在为1,不存在为0
    hlen key 获取哈希表中字段的数量
    hvals key 获取hash表中所有的value
    hscan key cursor [match] [count]取值查看,cursor:游标-基于游标获取数据,match:匹配指定的key,count:每次读取的个数,没有即默认的读取1个;分片的读取数据可以有效的防治一次性读入超量数据导致内存撑爆

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Springboot相关操作

  1. Jedis:函数和命令名相同
    hset、hget等函数
    在这里插入图片描述

  2. Lettuce
    使用RedisTemplate封装,redisTemplate.opsForHash()即可调出相关操作,通过HashOperations操作

有这些方法:put函数为hset命令
在这里插入图片描述

对应的操作:
在这里插入图片描述


List

List:简单的字符串列表,按照插入顺序排序
Hash是在value存储对象(key-value),List就是在value存储列表(value)

在这里插入图片描述

List相关命令

List命令以L开头,通过push插入、pop取出

  • 赋值:Lpush、Lpushnx将一个或多个值从列表头插入(左插入)
    Rpush、Rpushnx将一个或多个值从列表尾插入(右插入)

在这里插入图片描述

Lset key index value 通过索引设置列表元素的值
Linsert key BEFORE|AFTER world value 在列表的元素前或者后插入元素
描述:将值 value 插入到列表 key 当中,位于值 world 之前或之后

在这里插入图片描述

  • 取值:Llen、Lindex、Lrange
LLEN key      //获取列表长度
LINDEX key index   //通过索引获取列表中的元素
LRANGE key start end //获取列表指定范围内的元素

其中可以用负数表示下标,即从列表尾往前数,-1为最后一个元素

在这里插入图片描述

  • 删除:
    LPOP key 移出并获取列表的第一个元素(从左侧删除)
    RPOP key 移除并获取列表的最后一个元素(从右侧删除)
    BLPOP/BRPOP key1 [key2 ] timeout 移出并获取列表的第一个/最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
    LTRIM key start end 对一个列表进行修剪(trim),让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除

在这里插入图片描述

  • 移动元素:
    RPOPLPUSH source destination
    移除列表的最后一个元素,并将该元素添加到另一个列表并返回
    BRPOPLPUSH source destination timeout
    从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

在这里插入图片描述

Springboot中list相关操作

list通常用来实现一个消息队列,而且可以确保先后顺序,例如存储top5的文章

  1. Jedis
    与前面相同,函数名和命令名相同

在这里插入图片描述

  1. Lettuce
    RedisTemplate封装Lettuce,通过ListOperations类操作

在这里插入图片描述

ListOperations操作类:

用left表示左操作,right表示右操作,对应命令里的l、R
在这里插入图片描述


Set

和Java的Set一样,Redis的Set是String类型的无序集合,集合成员是唯一的
在这里插入图片描述

Redis中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)
底层为intset(整数集合)和hashtable(hash表)

相关命令

  • 赋值语法:
SADD key member1 [member2] 向集合添加一个或多个成员

因为无序,所以只需插入,不用管从哪插入

在这里插入图片描述

  • 取值语法:
SCARD key //获取集合的成员数 
SMEMBERS key  //返回集合中的所有成员 
SISMEMBER key member  //判断 member 元素是否是集合key的成员,0Wie不存在,1存在
SRANDMEMBER key [count] //随机返回集合中元素(count个)	   

在这里插入图片描述

  • 删除语法:
SREM key member1 [member2] //移除remove集合中一个或多个成员
SPOP key [count]  //移除并返回集合中的一个随机元素
SMOVE source destination member //将member元素从 source 集合移动到 destination 集合
  • 集合操作:

差集:diff

SDIFF key1  [key2]   返回给定所有集合的差集(与左侧集合比较) 
SDIFFSTORE destination key1 [key2]  返回给定所有集合的差集并存储在destination 中

交集:inter

SINTER key1 [key2]  返回给定所有集合的交集
SINTERSTORE destination key1 [key2]  返回给定所有集合的交集并存储在 destination 中

并集:union

SUNION key1 [key2] 返回所有给定集合的并集 
SUNIONSTORE destination key1 [key2]  所有给定集合的并集存储在 destination 集合中

Springboot中set操作

  1. Jedis

在这里插入图片描述

  1. Lettuce
    SetOperations操作类

difference差集、intersect交集、union并集
在这里插入图片描述


Zset(sorted set)

有序集合sorted set,因为命令开头为Z,通常称为Zset
对set的补充,有序集合,通过添加double类型的分数score排序
与Set性质一样,有序集合的成员是唯一的,但分数(score)却可以重复

在这里插入图片描述

Zset相关命令

  • 赋值语法:
ZADD key score1 member1 [score2 member2] //向有序集合添加一个或多个成员,或者更新已存在成员的分数  

在这里插入图片描述

  • 取值语法:
 ZCARD key  //获取有序集合的成员数
 ZCOUNT key min max //计算在有序集合中指定区间分数的成员数
ZRANK key member //返回有序集合中指定成员的索引
 ZRANGE key start end [WITHSCORES] //通过索引区间返回有序集合成指定区间内的成员(低到高)
ZREVRANGE key start end [WITHSCORES] //返回有序集中指定区间内的成员,通过索引,分数从高到底

在这里插入图片描述

  • 删除语法:
del key   //移除集合 
ZREM key member [member ...] //移除有序集合中的一个或多个成员
ZRemRangeByRank key start end //移除有序集合中给定的排名区间的所有成员(第一名是0)(低到高排序)
ZRemRangeByScore key min max //移除有序集合中给定的分数区间的所有成员
  • 自增、自减
    这里是自增分数,加负数就是自减了
zincrby key increment member

将zhang的分数+5
在这里插入图片描述

Springboot中Zset相关操作

  1. Jedis
    函数名与命令名相同
    在这里插入图片描述

  2. Lettuce
    SpringBoot提供了ZSetOperations操作类

在这里插入图片描述


HyperLogLog

HyperLogLog数据类型用于基数统计的算法

什么是基数?

如果数据集{1,2,3,4,4,3,5},该数据集的基数集为{1,2,3,4,5},基数(不重复元素)为5

基数估计:在误差可接受的范围内,快速计算基数

Redis是在内存中运行,当有很大的数据要进行基数基数:1亿个数据的基数基数 10^8 / 8 / 1024 /1024 ≈ 12 M

使用HyperLogLog,每个键只需12kb内存就可以计算2^64个不同元素,在输入元素数量、体积非常大时,计算基数所需的空间是固定的

HyperLogLog会根据输入元素来计算基数,而不会存储输入元素本身

在这里插入图片描述

相关命令

以pf开头:

pfadd key element[element...] //添加指定元素到HyperLogLog
pfcount key [key...] //返回给定HyperLogLog的基数估计数
prmarge destkey sourcekey[sourcekey...] //将多个HyperLogLog(sourcekey)合并为一个HyperLogLog(destkey) 

在这里插入图片描述

Springboot中相关操作

  1. Jedis

在这里插入图片描述

  1. Lettuce
    HyperLogLogOperations操作类

在这里插入图片描述

因为HyperLogLog特定用于基数计算,如统计浏览网站访客,所以使用并不多


Geo

Gep是指定的地理空间位置(纬度、经度、名称)

在这里插入图片描述

将指定的地理空间位置(纬度、经度、名称)添加到指定的key中。这些数据将会存储到sorted set(Zset),这样的目的是为了方便使用GeoRadius或者GeoRadiusByMember命令对数据进行半径查询等操作

相关命令

  • geoadd key 经度 纬度 city

以Zset存储

在这里插入图片描述

  • Geopos key city:获得该地的坐标值

在这里插入图片描述

  • geodist key city1 city2 长度单位 获取两个位置之间的距离

在这里插入图片描述

  • GeoHash key city[city...] 返回一个或多个位置元素的 Geohash 表示
    在这里插入图片描述

  • GeoRadius key 给定经度 给定纬度 半径 长度单位 [返回额外的信息] 以给定的经纬度为中心, 找出某一半径内的元素

长度单位有:m 、km 、mi(英里)、ft(英尺)
额外信息:

  • WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。 距离的单位和用户给定的范围单位保持一致

  • WITHCOORD: 将位置元素的经度和维度也一并返回

  • WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。
    这个选项主要用于底层应用或者调试, 实际中的作用并不大

命令默认返回未排序的位置元素。 通过以下两个参数, 用户可以指定被返回位置元素的排序方式:

  • ASC: 根据中心的位置, 按照从近到远的方式返回位置元素
  • DESC: 根据中心的位置, 按照从远到近的方式返回位置元素

在这里插入图片描述

  • GeoRadiusByMember key member 半径 长度单位 和GeoRadius类似,只是GeoRadiusByMember以某个元素为圆心

在这里插入图片描述

可以看Redis的Geo相关信息

Springboot中相关操作

  1. Jedis
    同样的函数名

在这里插入图片描述

  1. Lettuce
    GeoOperations操作类

其中红色的是不建议使用的(可以用但不推荐),Springboot希望函数名都是相同的,添加方法就是add,不区分数据类型
在这里插入图片描述

geoadd等方法会加上删除线

在这里插入图片描述


bitmap

位图,更细化的一种操作,以bit为单位,通过bit来进行0或者1的设置,表示某个元素对应的值或者状态

相关操作

  1. 赋值
setbit key 序号 状态(0/1)

例如设置签到记录,0~4的5天签到情况
在这里插入图片描述

  1. 取值
getbit key 序号

在这里插入图片描述

  1. 统计
bitcount key  [start] [end]

5天里签到了4天
在这里插入图片描述

  1. 位运算
bitop [operations] [result] [key1] [keyn…] 
//operations:位运算操作,result:结果存储位置
//key :参与运算的key

bitmap以bit为单位,提供了位运算operations:AND 与运算 &、OR 或运算 | 、XOR 异或 ^ 、NOT 取反 ~ (与或非、异或)

例如:设置num1=110,num2=101

and :100
or : 111

在这里插入图片描述

Springboot中相关操作

  1. Jedis
    同样的函数名和命令名相同
    在这里插入图片描述

  2. Lettuce
    在redisTemplate封装中,bitmap相关操作在ValueOperations

在这里插入图片描述


代码

代码在码云上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值