【Redis系列1】看完这一篇,Redis就入门了!Redis中9种基本数据类型及常用操作命令和应用场景

本文介绍了Redis中的各种数据结构如字符串、列表、集合、有序集合、哈希、位图和HyperLogLogs,以及它们的应用场景,包括缓存、分布式锁、计数器和数据统计。同时提到了Java开发者的学习资源,强调重复学习的重要性。
摘要由CSDN通过智能技术生成

rename oldKey newKey

在这里插入图片描述

  • 删除键(多个以空格隔开,返回的是成功删除键的个数)

del key

在这里插入图片描述

  • 查看键的类型

type key

在这里插入图片描述

  • 自增1(如果value不是整数,则会报错)

incr key

  • 自增指定大小(如果value不是整数,则会报错)

incrby key 需要自增的数字

在这里插入图片描述

  • 设值,如果key已经存在则设置失败

setnx key value # 设置单个key

mset key1 value1 key2 value2 # 设置多个key

在这里插入图片描述

PS:setnx和mset是原子操作,必须所有都设置成功才会返回true,其还有参数可以设置过期时间,一般分布式锁就是基于带过期时间的这个命令来实现的。

  • 带过期时间设置key

set key value EX|PX 18 # EX表示秒,PX表示毫秒

下面这个例子就是设置了5秒后自动过期

在这里插入图片描述

  • 单独设置过期时间。不过一般为了保证原子性,我们都是使用上面set直接带时间的命令。

expire key

应用场景

字符串类型的应用场景非常丰富,正常的热点数据都可以采用字符串类型来进行缓存,主要可以应用如下场景:

  • 1、热点数据及其对象缓存

  • 2、分布式Session共享

  • 3、分布式锁(利用setnx命令)

  • 4、Redis独立部署,可以用来作为全局唯一ID

  • 5、利用其原子性递增命令,可以作为计数器或者限流等

2.Lists(列表)


Redis中的List列表内部的元素也是字符串,我们可以将指定元素添加到列表中的指定位置。列表数据类型的操作命令一般都会有小写字母l开头。

常用命令

来看一些常用的操作命令:

  • 将一个或者多个value插入到列表key的头部,key不存在则创建key

lpush key value1 value2

  • 将value插入到列表key的头部,key不存在则不做任何处理

lpushx key value1 value2

  • 移除并返回key值的列表头元素

lpop key

  • 将一个或者多个value插入到列表key的尾部,key不存在则创建key

rpush key value1 value2

  • 将一个或者多个value插入到列表key的尾部,key不存在则不做任何处理

rpushx key value

  • 移除并返回key值的列表尾元素

rpop key

  • 返回key列表的长度

llen key

  • 返回key列表中下标为index的元素。头部从0开始,尾部从-1开始

lindex key index

  • 返回key列表中下标start(含)到stop(含)之间的元素

lrange key start stop

  • 将value设置到key列表中指定index位置。key不存在或者index超出范围则会报错

lset key index value

  • 截取列表中[start,end]之间的元素,并替换原列表保存

ltrim key start end

在这里插入图片描述

3.Sets(集合)


Redis中的集合是一个String类型的无序集合,集合中元素唯一不可重复。

常用命令

Set集合的操作命令一般都以s开头,下面就列举一些常用的命令:

  • 将一个或多个元素member加入到集合key当中,并返回添加成功的数目,如果元素已存在则被忽略

sadd key member1 member2

  • 判断元素member是否存在集合key中

sismember key member

  • 移除集合key中的元素,不存在的元素会被忽略

srem key member1 member2

  • 将元素member从集合source中移动到dest中,如果member不存在,则不执行任何操作

smove source dest member

  • 返回集合key中所有元素

smembers key

在这里插入图片描述

4.Sorted Sets(有序集合)


Redis中的有序集合和集合的区别是有序集合中的每个元素都会关联一个double类型的分数,然后按照分数从小到大的顺序进行排列。

常用命令

Sorted Sets集合的操作命令一般都以z开头,下面就列举一些常用的命令:

  • 将一个或多个元素member及其score添加到有序集合key中

zadd key score1 member1 score2 member2

  • 返回有序集合key中member成员的score

zscore key member

  • 将有序集合key中的member加上num ,num可以为负数

zincrby key num member

  • 返回有序集合key中score值在min(含)到max(含)之间的member数量

zcount key min max

  • 返回有序集合key中score从小到大排列后start(含)到end(含)之间的所有member

zrange key start stop

  • 返回有序集合key中score从大到小排列后start(含)到end(含)之间的所有member

zrevrange key start stop

  • 返回有序集合中score从min到max的所有元素,按score从小到大排列。注意这里默认是闭区间,但是可以在max和min前面加上(或者[来控制开闭区间

zrangebyscore key min max

  • 返回有序集合中score从max到min的所有元素,按score从大到小排列。注意这里默认是闭区间,但是可以在min和max前面加上(或者[来控制开闭区间

zrevrangebyscore key max min

  • 返回有序集合中member中元素排名(从小到大),返回的结果从0开始计算

zrank key member

  • 返回有序集合中member中元素排名(从大到小),返回的结果从0开始计算

zrevrank key member

  • 返回有序集合中min和max之间的member数量。注意这个命令中的min和max前面必须加(或者[来控制开闭区间,特殊值-和+分别表示负无穷和正无穷

zlexcount key min max

在这里插入图片描述

5.Hashes(哈希)


哈希表中存储的是一个key和value的映射表。操作哈希数据类型的命令一般都是h开头。

常用命令

下面就是一些常用命令的示例:

  • 将哈希表key中域field的值设置为value

hset key field value #设置单个field

hmset key field1 value1 field2 value2 #设置多个field

  • 将哈希表key中域field的值设置为value,如果field已存在,则不执行任何操作

hsetnx key field value

  • 获取哈希表key中的域field对应的value

hget key field

  • 获取哈希表key中的多个域field对应的value

hmget key field1 field2

  • 删除哈希表key中的一个或者多个field

hdel key field1 field2

  • 返回哈希表key中域的数量

hlen key

  • 为哈希表key中的域field的值加上增量increment,increment可以为负数,如果field不是数字则会报错

hincrby key field increment

  • 为哈希表key中的域field的值加上增量increment,increment可以为负数,如果field不是float类型则会报错

hincrbyfloat key field increment

  • 为哈希表key中的域field的值加上增量increment,increment可以为负数,如果field不是数字则会报错

hincrby key field increment

  • 获取哈希表key中的所有域

hkeys key

  • 获取哈希表中所有域的值

hvals key

在这里插入图片描述

应用场景

哈希类型和字符串类型其实非常像,所以基本上字符串能做的事情,哈希都能做,而且在有些场景下利用哈希的分类存储,将会更加高效。

6.Bit arrays (or simply bitmaps)位图


位图bitmap就是通过最小的单位bit来进行0或者1的设置,表示某个元素对应的值或者状态,其值只能是0或者1,表示是或者否。所以这个一般用于统计是否登录,是否收藏等非否即是的数据。

比如存储数据格式一般为:100110000111,这里的0和1就是bit值,设置的时候可以设置指定位置(偏移量)的bit值。

PS:位图的底层存储数据结构也是采用的字符串对象。

常用命令

位图数据类型主要提供了以下命令:

  • 对key所储存的字符串值,设置或清除指定偏移量offset上的位(bit)值。offset参数必须大于或等于0且小于 2^32 (bit 映射被限制在 512 MB 之内)。

setbit key offset value

  • 获取指定偏移量offset上的bit值

getbit key offset

  • 计算给定字符串中,被设置为1的bit数量,start和end可以省略则统计全部,0表示第1位,-1表示最后一位

bitcount key [start] [end]

  • 返回位图中第一个值为bit的二进制位的位置,start和end可以省略,0表示第1位,-1表示最后一位

bitpos key bit [start] [end]

在这里插入图片描述

应用场景

这个一般应用在非否即是的场景,比如说是否登录,用户是否留存,是否收藏商品,是否点赞等等。

7.HyperLogLogs


HyperLogLog是Redis 2.8.9 版本新增的一种用来做基数统计算法的数据结构。其优点是在输入元素的数量或者体积非常大时,计算基数所需的空间总是固定的、并且是很小的。这种数据结构一般用于统计UV之类的信息。

HyperLogLog本身是一种算法,其来源于论文《HyperLogLog the analysis of a near-optimal cardinality estimation algorithm》,大家如果对这种算法感兴趣的可以去了解一下。

在Redis里面,每个HyperLogLog键只需要花费12KB内存,就可以计算接近2^64 个不同元素的基数,但是也可能有0.81%的错误率。

PS:HyperLogLogs的底层存储数据结构也是采用的字符串对象。

常用命令

这种数据类型主要提供了以下三个命令:

  • 将任意数量的元素添加到指定的HyperLogLog中的key里面

pfadd key element1 element2

  • 获取一个或者多个key的基数

pfcount key1 key2

  • 将多个sourcekey合并到一个destkey中,合并后的destkey中的基数接近于合并前所有sourcekey的并集

pfmerge destkey sourcekey1 sourcekey2

在这里插入图片描述

从上面我们可以看到,存进去之后并没有取出来的命令,所以这个一般就是用来统计,而且需要能接受误差。

比如上面的示例中,假如u1 u2 u3 u4就是用户id,那么我不需要判断,只要用户来访问一次网页我就存一次,最后通过pfcount取出来的值就是去重后的值(也就是上面所说的基数),虽然说有一定误差,但是像uv这种统计数据是可以接受误差的。

应用场景

这个一般应用在可以接受误差场景的数据统计,比如说UV统计等场景

8.geospatial(地理位置)


geospatial是Redis在3.2版本中新增的一种具有半径查询的地理空间索引数据类型。一般用来存储并计算两地之间的距离。

PS:HyperLogLogs的底层存储数据结构也是采用的有序集合对象。

常用命令

以下就是一些常用命令:

  • 将给定的空间元素(纬度、经度、名字)添加到指定的键key里面。其中有效的经度介于 -180 度至 180 度之间,有效的纬度介于-85.05112878 度至 85.05112878 度之间。

geoadd key longitude latitude member

  • 从键key里面返回所有给定位置元素的位置(经度和纬度)。

geopos key member1 member2

  • 返回两个给定位置之间的距离。默认单位是米(m),可以通过unit指定,unit支持以下类型:米(m),千米(km),英里(mi),英尺(ft)。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

总结

上述知识点,囊括了目前互联网企业的主流应用技术以及能让你成为“香饽饽”的高级架构知识,每个笔记里面几乎都带有实战内容。

很多人担心学了容易忘,这里教你一个方法,那就是重复学习。

打个比方,假如你正在学习 spring 注解,突然发现了一个注解@Aspect,不知道干什么用的,你可能会去查看源码或者通过博客学习,花了半小时终于弄懂了,下次又看到@Aspect 了,你有点郁闷了,上次好像在哪哪哪学习,你快速打开网页花了五分钟又学会了。

从半小时和五分钟的对比中可以发现多学一次就离真正掌握知识又近了一步。

人的本性就是容易遗忘,只有不断加深印象、重复学习才能真正掌握,所以很多书我都是推荐大家多看几遍。哪有那么多天才,他只是比你多看了几遍书。

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
效果低效又漫长,而且极易碰到天花板技术停滞不前!**

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-m0bRSXlG-1713535356057)]

[外链图片转存中…(img-kBL90YR5-1713535356059)]

[外链图片转存中…(img-sDPyZvWl-1713535356060)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

总结

上述知识点,囊括了目前互联网企业的主流应用技术以及能让你成为“香饽饽”的高级架构知识,每个笔记里面几乎都带有实战内容。

很多人担心学了容易忘,这里教你一个方法,那就是重复学习。

打个比方,假如你正在学习 spring 注解,突然发现了一个注解@Aspect,不知道干什么用的,你可能会去查看源码或者通过博客学习,花了半小时终于弄懂了,下次又看到@Aspect 了,你有点郁闷了,上次好像在哪哪哪学习,你快速打开网页花了五分钟又学会了。

从半小时和五分钟的对比中可以发现多学一次就离真正掌握知识又近了一步。

[外链图片转存中…(img-91iFy8sj-1713535356061)]

人的本性就是容易遗忘,只有不断加深印象、重复学习才能真正掌握,所以很多书我都是推荐大家多看几遍。哪有那么多天才,他只是比你多看了几遍书。

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值