redis数据类型及操作命令
1|0数据类型
Redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型:
字符串 string
哈希 hash
列表 list
集合 set
有序集合 sorted set /zset
解释说明:
字符串(string):普通字符串,常用
哈希(hash):适合存储对象
列表(list):按照插入顺序排序,可以有重复元素
集合(set):无序集合,没有重复元素
有序集合(sorted set / zset):集合中每个元素关联一个分数(score),根据分数升序排序,没有重复元素
2|0Redis常用命令
更多命令可以参考Redis中文网:https://www.redis.net.cn
2|1Redis数据类型_key键
keys
查看当前库中所有的key 。
语法结构:
新版本也进行了替代
exists
判断某个key是否存在,返回1表示存在,0不存在。
语法结构:
type
查看当前key 所储存的值的类型。返回当前key所储存的值的类型,如string 、list等。
语法结构
del
删除已存在的key,不存在的 key 会被忽略。
语法结构:
expire
给key设置time秒的过期时间。设置成功返回 1 。 当 key 不存在返回 0。
语法结构:
ttl
以秒为单位返回 key 的剩余过期时间。
语法结构:
persist
移除给定 key 的过期时间,使得 key 永不过期。
语法结构:
2|2Redis数据类型_String
String是Redis最基本的类型,一个key对应一个value。String是二进制安全的,意味着String可以包含
任何数据,比如序列化对象或者一张图片。String最多可以放512M的数据。
set
用于设置给定 key 的值。如果 key 已经存储其他值, set 就重写旧值,且无视类型。
语法格式:
示例:
get
用于获取指定 key 的值。如果 key 不存在,返回 nil 。
语法格式:
append
将给定的value追加到key原值末尾
语法格式:
strlen
获取指定 key 所储存的字符串值的长度。当 key 储存的不是字符串值时,返回一个错误。
语法格式
setex
给指定的 key 设置值及time 秒的过期时间。如果 key 已经存在, setex命令将会替换旧的值,并设置过期时间。
语法格式:
setnx
只有在key不存在时设置key的值
getrange
获取指定区间范围内的值,类似between........and 的关系
语法格式:
setrange
获取指定区间范围内的值,类似between........and 的关系
语法结构:
incr
将 key 中储存的数字值增一。
语法格式:
decr
将 key 中储存的数字值减一。
语法格式:
incrby/decrby key step
将key存储的数字值按照step进行增减
mset
同时设置一个或多个 key-value
语法格式
mget
返回所有(一个或多个)给定 key 的值。
语法格式:
getset
将给定key值设为value,并返回key的旧值(old value),简单一句话(先get然后立即set)。
语法格式
使用场景
2|3Redis数据类型_List
List是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右
边)。底层是一个双向链表,对两段操作性能极高,通过索引操作中间的节点性能较差
一个List最多可以包含 $2^{32}-1$个元素 ( 每个列表超过40亿个元素)。
lpush/rpush
从左边(头部)/右边(尾部)插入一个或多个值。
语法结构:
lrange
返回key列表中的start和end之间的元素(包含start和end)。 其中 0 表示列表的第一个元素,-1表示
最后一个元素。
语法结构:
lpop/rpop
移除并返回第一个值或最后一个值。
语法格式:
lindex
获取列表index位置的值(从左开始)。
语法结构:
llen
获取列表长度。
语法结构:
lrem
从左边开始删除与value相同的count个元素。
语法结构:
linsert
在列表中value值的前边/后边插入一个new value值(从左开始)。
语法结构:
lset
将索引为index的值设置为value
语法结构:
使用场景
2|4Redis数据类型_Set
与List类似是一个列表功能,但Set是自动排重的,当需要存储一个列表数据,又不希望出现重复数据
时,Set是一个很好的选择。
Set是String类型的无序集合,它底层其实是一个value为null的hash表,所以添加、删除、查找的时间
复杂度都是O(1)。
sadd
将一个或多个元素添加到集合key中,已经存在的元素将被忽略。
语法结构:
smembers
取出该集合的所有元素。
语法结构:
sismember
判断集合key中是否含有value元素,如有返回1,否则返回0。
语法结构:
scard
返回该集合的元素个数。
语法结构:
srem
删除集合中的一个或多个成员元素,不存在的成员元素会被忽略。
语法结构
spop
随机删除集合中一个元素并返回该元素。
语法结构:
srandmember
随机取出集合中count个元素,但不会删除。
语法结构:
smove
将value元素从sourcekey集合移动到destinationkey集合中。
语法结构:
sinter
返回两个集合的交集元素。
语法结构
sunion
返回两个集合的并集元素。
语法结构
sdiff
返回两个集合的差集元素(key1中的,不包含key2)
语法结构
使用场景
2|5Redis数据类型_Hash
Hash是一个键值对的集合。Hash 是一个 String 类型的 field(字段) 和 value(值) 的映射表,hash
特别适合用于存储对象。
Hash存储结构优化
如果field数量较少,存储结构优化为类数组结构
如果field数量较多,存储结构使用HashMap结构
hset
给key集合中的field赋值value。
语法结构
hget
从key哈希中,取出field字段的值。
语法结构
hmset
批量设置哈希的字段及值。
语法结构
hexists
判断指定key中是否存在field
语法结构
hkeys
获取该哈希中所有的field。
语法结构
hvals
获取该哈希中所有的value。
语法结构
hincrby
为哈希表key中的field字段的值加上增量increment。
语法结构
hdel
删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略。
语法结构
hsetnx
给key哈希表中不存在的的字段赋值 。
语法结构
使用场景
2|6Redis数据类型_Zset
Zset与Set非常相似,是一个没有重复元素的String集合。不同之处是Zset的每个元素都关联了一个分数
(score),这个分数被用来按照从低分到高分的方式排序集合中的元素。集合的元素是唯一的,但分数
可以重复
zadd
将一个或多个元素(value)及分数(score)加入到有序集key中。
语法结构
zrange
返回key集合中的索引start和索引end之间的元素(包含start和end)。
语法结构
zrangebyscore
返回key集合中的分数minscore 和分数maxscore 之间的元素(包含minscore 和maxscore )。其中元素的位置按分数值递增(从小到大)来排序。
语法结构
zincrby
为元素value的score加上increment的值
语法结构
zrem
删除该集合下value的元素
语法结构
zcount
统计该集合在minscore 到maxscore分数区间中元素的个数。
语法结构
zrank
返回value在集合中的排名,从0开始。
语法结构
使用场景
2|7Redis数据类型_Bitmaps
在计算机中,用二进制(位)作为存储信息的基本单位,1个字节等于8位。
例如 "abc" 字符串是由 3 个字节组成,计算机存储时使用其二进制表示,"abc"分别对应的ASCII码是
97、98、99,对应的二进制是01100001、01100010、01100011,在内存中表示如下
合理地使用位能够有效地提高内存使用率和开发效率。
Redis提供了Bitmaps这个 “数据结构” 可以实现对位的操作
setbit
设置Bitmaps中某个偏移量的值。
语法结构
示例:
redis中bitmaps可以用来统计用户信息,eg:活跃天数、打卡天数、登录天数
bitmaps位图,都是操作二进制来进行记录,就只有0和1两个状态
getbit
获取Bitmaps中某个偏移量的值。
语法结构
bitcount
统计字符串被设置为1的bit数量。一般情况下,给定的整个字符串都会被进行统计,可以选择通过额外的start和end参数,指定字节组范围内进行统计(包括start和end),0表示第一个元素,-1表示最后一个元素。
语法结构:
如:当前存在一个key为k1的bitmaps存储着[00000001,00000001,00000010,00000011],分别对应
[1,1,2,3]
setbit设置或获取的是bit(位)的位置,bitcount计算的是byte(字节)位置。
bitop
将多个bitmaps通过求交集/并集方式合并成一个新的bitmaps。
语法结构
使用场景
2|8Redis数据类型_Geospatia
GEO,Geographic,地理信息的缩写。该类型就是元素的二维坐标,在地图上就是经纬度。Redis基于该
类型,提供了经纬度设置、查询、范围查询、距离查询、经纬度Hash等常见操作
geoadd
用于存储指定的地理空间位置,可以将一个或多个经度(longitude)、纬度(latitude)、位置名称(member)添加到指定的 key 中。
语法结构
geopos
从给定的 key 里返回所有指定名称(member)的位置(经度和纬度),不存在的返回 nil。
语法结构
geodist
用于返回两个给定位置之间的距离。
语法结构
参数说明:
m :米,默认单位。
km :千米。
mi :英里。
ft :英尺
georadius
以给定的经纬度(longitude latitude)为中心, 返回键包含的位置元素当中, 与中心的距离不超过给
定最大距离(radius )的所有位置元素
语法结构:
使用场景
2|9Redis数据类型_Hyperloglog
在我们做站点流量统计的时候一般会统计页面UV(独立访客:unique visitor)和PV(即页面浏览量:page
view)。redis HyperLogLog是用来做基数统计的算法,HyperLogLog的优点是:在输入元素的数量或者
体积非常非常大时,计算基数所需的空间总是固定的、并且使很小的
什么是基数
比如数据集{1,3,5,7,5,7,8},那么这个数据集的基数集为{1,3,5,7,8},基数(不重复元素)为5.基数估计就是在
误差可接受的范围内,快速计算基数
pfadd
将所有元素参数添加到 Hyperloglog 数据结构中。
语法结构
pfcount
计算Hyperloglog 近似基数,可以计算多个Hyperloglog ,统计基数总数。
语法结构
pfmerge
将一个或多个Hyperloglog(sourcekey1) 合并成一个Hyperloglog (destkey )。
语法结构
使用场景
基数不大,数据量不大就用不上,会有点大材小用浪费空间,有局限性,就是只能统计基数数量,而没办法去知道具体的内容是什么,和bitmap相比,属于两种特定统计情况,简单来说,HyperLogLog 去重比 bitmaps 方便很多,一般可以bitmap和hyperloglog配合使用,bitmap标识哪些用户活跃
2|10通用命令
Redis中的通用命令,主要是针对key进行操作的相关命令:
- KEYS pattern 查找所有符合给定模式( pattern)的 key
- EXISTS key 检查给定 key 是否存在
- TYPE key 返回 key 所储存的值的类型
- TTL key 返回给定 key 的剩余生存时间(TTL, time to live),以秒为单位 -1为永不过期
- DEL key 该命令用于在 key 存在是删除 key
__EOF__
作 者:YXH
出 处:https://www.cnblogs.com/YxinHaaa/p/17573432.html
关于博主:编程路上的小学生,热爱技术,喜欢专研。评论和私信会在第一时间回复。或者直接私信我。
版权声明:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本。
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库