redis十大数据类型(初级篇)

本文详细介绍了Redis的各种数据类型,如字符串、列表、哈希、集合、有序集合、地理空间、基数统计、位图和位域,以及相应的常用操作命令。此外,还探讨了Redis5.0新增的Stream功能,作为消息队列解决方案。
摘要由CSDN通过智能技术生成

一、官网

https://redis.io/docs/data-types/

二、redis键(key)常用命令

key * :查看所有的key
exists key :判断某个key是否存在
type key :查看key是什么类型的
del key :删除指定的key
unlink key :非阻塞删除,仅仅将keys从keyspace元数据中删除,真正的删除会在后续异步中操作
expire key :为key设置过期时间
ttl key :查看还有多少秒过期,-1表示永不过期,-2表示已过期
move key [0-15] : 将当前数据库的key移动到指定的库中
select [0-15] : 切换数据库,默认是0号数据库
dbsize :查看当前数据库key的数量
备注: redis自带16个数据库0-15号数据库
flushdb :清空当前库
flushall :通杀全部库
备注:危险命令 慎重!!!

三、数据类型及常用操作命令

命令参考网址:https://redis.io/commands/

1、 String(字符串)

注意:String类型是 单key单value 一对一的;一般应用在点赞,浏览量等等;
help @string 帮助命令
set key value :设置指定key的值
set key value nx :如果key存在则返回nil
set key value xx :key不存在则新建,存在则覆盖修改,set key value 默认的是xx
set key value get :将给定的key的值修改成value,并返回旧的值
set key value ex seconds :设置过期时间seconds
set key value keepttl :修改之后,继承原有的过期时间(实时的),如果不加keepttl修改之后默认永不过期
get key :获取指定key的值
getrange key start end:返回key中字符值的子字符 0 -1返回所有 (类似java中字符串截取)
getset key value :将给定key的值设为value,并返回key的旧值
getbit key offset :对key所存储的字符串值,获取指定偏移量上的位
mget key1 [key2] :获取所有(一个或多个)给定key的值
setbit key offset value :对key所存储的字符串值,设置或清楚指定偏移量上的位
setex key seconds value :将值value关联到key,并将key的过期时间设置为seconds(以秒为单位)
setnx key value :只有在key不存在的时候设置key的值
setrange key offset value :用value参数覆写给定key所储存的字符串值,从偏移量offset开始
strlen key :返回key所储存的字符串值的长度
mset key value [key value] :同时设置一个或者多个key-value
msetnx key value [key value] :同时设置一个或者多个key-value,当且仅当所有给定的key都不存在
psetex key milliseconds value :和setex相似,不过是以毫秒为单位
incr key :将key中存储的数字值增一
incrby key increment :将key所存储的值加上给定的增量值
incrbyfloat key increment :将key所存储的值加上给定的浮点增量值
decr key :将key中存储的数字值减一
decrby key decrement :将key中存储的值减去给定的减量值
append key value :如果key已经存在并且是一个字符串,append命令将value追加到key原来值的末尾(类似java中字符串拼接)

2、List(有序可重复列表)

注意:单key多value 一对多的关系;
底层是一个双端链表的结构,主要功能push和pop等,一般用在栈、队列、消息队列等场景;
lpush key value value value :从左边向链表添加元素
rpush key value value value :从右边向链表添加元素
lrange key start end :从左边开始遍历元素
看图吧,看着看着可能就悟了
在这里插入图片描述
lpop key:从左边将元素弹出去
在这里插入图片描述
rpop key:从右边将元素弹出去
在这里插入图片描述
lindex key index :按照索引下标获取元素
llen key :获取列表中元素的个数
lrem key N(数量) V(值) :删除N个V
在这里插入图片描述
ltrim key index(开始) index(结束) :截取指定范围的值后再赋值给key
在这里插入图片描述
rpoplpush key1 key2 :将key1中右端的元素弹出,从key2的左端进入
在这里插入图片描述
lset key index value :在指定索引位置修改元素
在这里插入图片描述
linset key before/after :在指定元素之前/之后插入元素
在这里插入图片描述

3、Hash(哈希表)

注意:key-value结构,一般应用场景购物车;
hset key field value [field value] : 创建/修改
hget key field : 查看
在这里插入图片描述
hmset :看图吧 可以理解成批量操作
hmget : 看图吧
在这里插入图片描述
hlen key:获取某个key内的全部数量
hexists key :是否存在
在这里插入图片描述
hkeys key:获取key下所有的key
hvals key:获取key下的所有value的值
在这里插入图片描述
incrby/incrbyfloat :加整数/小数

4、Set(无序不重复集合)

注意:单key多value 一堆多,且不重复,应用场景共同好友;
sadd key member [member …]:添加元素
smembers key :遍历集合中所有元素
sismember key member :判断集合中是否存在该元素
srem key member [member] :删除元素
scard key :获取集合中元素个数
在这里插入图片描述
srandmember key N(数量) :从集合中随机展现N个元素,元素不删除
spop key N :从集合中随机弹出N个元素,元素删除
在这里插入图片描述
smove key1 key2 :将key1中某个已存在的值移动到key2中
在这里插入图片描述
sdiff key1 key2 :差集,属于key1但不属于key2的元素
sunion key1 key2 :并集
sinter key1 key2 :交集
sintercard N key1 key2 [LIMIT N] :返回交集的元素个数,limit返回个数N
在这里插入图片描述

5、ZSet( sorted set 有序不重复集合)

在set的基础上,每个value值前加一个score分数值 应用场景:排行榜
例如: set : k1 v1 v2 v3
zset : k1 score1 v1 score2 v2 score3 v3

zadd key score member [score member …] :添加元素
zrange key start end withscores : 按照分数从小到大的顺序返回start 到stop 索引之间的所有元素
zrevrange key start end withscores :从大到小,同上
在这里插入图片描述
zrangebyscore key min max withscores limit offset count :获取指定分数范围的元素 ( 表示不包含,limit作用是返回限制
在这里插入图片描述
zrem key value :删除指定元素
zincrby key increment member :增加某个元素的分数
zcount key min max :获得指定分数范围内的元素个数
zmpop :从键名列表中的第一个非空排序集合中弹出一个或多个元素,它们是成员分数对
zrank key values :获取下标值
zrevrank key values :逆序获取下标值

6、GEO(地理空间)

原理:将三维的地球变为二维的坐标,再将二维的坐标转换为一维的点块,最后将一维的点块转换为二进制在进行base32编码;
应用场景:例如美团地图位置附近的酒店推送;
如何获取获取地点的经纬度:http://api.map.baidu.com/lbsapi/getpoint/
geoadd key longitude latitude member [longitude latitude member …] :用于存储指定的地理空间位置,可以将一个或者多个经度(longitude),纬度(latitude),位置名称(member)添加到指定的key中;
在这里插入图片描述
geo的底层数据结构就是zset,所以zrange指令同样适用geo
在这里插入图片描述
如果这里返回的是乱码,那么退出redis重新进入 redis-cli -a xxxxxx --raw,加个–raw指令就好了
geopos key member [member …] :用于从给定key里面返回所有指定名称(member)的位置,不存在则返回null;
在这里插入图片描述
geohash key member [member] :获取一个或者多个位置元素的geohash值
在这里插入图片描述
geodist key member1 member2 [m|km|ft|mi] :用于返回两个给定位置之间的距离;后面的参数是距离单位;
在这里插入图片描述
georadius :以给定的经纬度为中心,返回键包含的位置元素当中,与中心距离不超过给定最大距离的所有位置元素
命令格式:
georadius key 经度 纬度 距离 单位 withdist withcoord withhash count 数量 desc
withdist : 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。 距离的单位和用户给定的范围单位保持一致。
withcoord : 将位置元素的经度和维度也一并返回。
withhash : 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大
count : 限定返回的记录数。
例句:
GEORADIUS city 116.418017 39.914402 10 km withdist withcoord withhash count 10 desc

georadiusbymember :找出位域指定范围内的元素,中心点是由给定的位置元素决定的
例句:
georadiusbmember city 天安门 10 km withdist withcoord count 10 withhash

7、HyperLogLog(基数统计)

不会存储元素本身
应用场景:统计某个网站,文章的UV(独立访客),注意需要考虑去重
pfadd :添加元素
pfcount :返回基数估算值(自动去重)
pfmerge :将多个hyperloglog合并为一个hyperloglog
在这里插入图片描述

8、bitmap(位图)

由0和1状态表现的二进制位的bit数组
底层:用string类型作为底层数据结构实现的一种统计二值状态的数据类型
位图本质是数组;
应用场景:签到功能

setbit key offset value (offset是偏移量,是从0开始的,也可以理解位下标)
getbit key offset
在这里插入图片描述
strlen key :统计字节数占用多少,注意不是统计字符串长度,而是占用几个字节,每8位为一组(一个byte),超过八位则再次扩容8位(一个byte)
在这里插入图片描述
bitcount key :全部键里面有多少个1(假设是签到功能,举个例子 可以查询一个月内签到了几天)
在这里插入图片描述

9、bitfiled(位域)

将一个redis字符串看作是一个二进制组成的数组,并能对变长位宽和任意没有字节对齐的指定整型位域进行寻址和修改。
get :返回指定位域
set :设置指定位域的值并返回它的原值
incrby :自增或者自减(如果increment为负数)指定位域的值并返回它的新值

10、Stream(流)

redis5.0版本之前有两种消息队列的方案,第一种用list实现消息队列,按照插入顺序排序,你可以添加一个元素到列表的头部(左边)或者尾部(右边)。 所以常用来做异步队列使用,将需要延后处理的任务结构体序列化成字符串塞进 Redis 的列表,另一个线程从这个列表中轮询数据进行处理。
第二种redis发布订阅(pub/sub),一对多,但是它的缺点是消息无法持久化,如果出现网络断开,redis宕机等,消息就会被丢弃,而且也没有ACK机制来保证数据的可靠性,假设一个消费者都没有,那消息就直接被丢弃了。
redis5.0之后新增了一个更强大的数据结构—stream,redis版的MQ消息中间件+阻塞队列
作用:实现消息队列,它支持消息的持久化,支持自动生成全局唯一ID,支持ack确认消息的模式,支持消费组模式等,让消息队列更加的稳定和可靠。
底层结构和原理:
在这里插入图片描述
stream就像是一个消息链表,将所有加入的消息都串起来,每个消息都有一个唯一的ID和对应的内容;
Message Content :消息内容
Consumer group :消费组,同一个消费组可有多个消费者
Last_delivered_id :游标,每个消费组会有个游标,任意一个消费者读取了消息都会使游标往前移动
Consumer :消费者 包含在消费组中
Pending ids [] :消费者会有一个状态变量,用于记录被当前消费已读取但是为ack的消息id,如果客户端没有ack,这个变量里的消息id就会越来越多,一旦某个消息被ack它就开始减少,这个Pending_ids变量在redis官方被称为PEL(Pending Entries List),记录了当前已经被客户端读取的消息,但是还没有ack,它用来确保客户端至少消费了消息一次,而不会在网络传输的中途丢失了没处理
队列相关指令 :
XADD :添加消息到队列末尾 默认
XRANGE :获取消息列表,可以指定范围
XDEL :删除
XLEN :获取stream队列的消息的长度
XTRIM :对stream的长度进行截取
XREAD :用于获取消息(阻塞/非阻塞),只会返回大于指定ID的消息

作为一个初级程序员,学习能力是非常重要的。只有不断学习和进步,才能在程序员这个行业中保持竞争力。 在Java程序员的分级中,初级程序员是其中的一级。根据我的理解,Java程序员的分级主要有四级,分别是初级程序员、中级程序员、高级程序员以及技术专家/架构师/全栈工程师。初级程序员在Java开发方面具备一定的基础知识和技能,但还需要进一步的学习和实践来提高自己的能力。 关于Redis,它通常被称为数据结构服务器,因为它支持多数据类型,包括字符串、哈希、列表、集合和有序集合等。初级程序员在使用Redis时,可以利用其强大的功能解决一些数据库查询存在的弊端,提高系统的性能和效率。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【职业规划】第一:程序员分级之初级程序员](https://blog.csdn.net/baidu_25310663/article/details/129688788)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [redis初级入门(了解)](https://blog.csdn.net/weixin_50731080/article/details/116075131)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

juicer_man

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值