Redis五种数据结构

redis所有的数据结构都以唯一的key字符串作为名称,然后通过这个key来获取value,不同的数据结构指的是value的结构不一样。

  1. String字符串结构

Redis的字符串是动态的字符串,可以修改。当字符串长度小于1MB时,扩容是加倍现有的空间。如果字符串长度超过1MB时,只会扩容1MB的空间,需要注意的是字符串的长度最大为512MB。

set name codehole
get name 
exists name
del name
#批量键值对操作
set name1 codehole
set name2 holycoder
mget name1 name2 name3
#设置过期时间
setx name 5 codehole#5s过期
#计数
如果value是一个整数还可以自增
set age 30
incr age
incrby age 5

2 list 结构

Redis的列表相当于java的linkedList,列表中的每个元素都使用双向指针顺序,串起来可以支持前后遍历。常用来做异步队列使用。

#右边进左边出队列
#常用于消息排队和异步逻辑处理,确保元素的顺序
rpush books python java golang
lpop books

#右边进右边出 栈
rpush books python java golang
rpop books

#慢操作
rpush books python java golang
lindex books 1# java  index可以为负数-1代表倒数第一个
lrange books 0 -1 #python java golang
ltrim books 1 -1 #两个参数定义了一个区间区间内的值保留

3 hash字典

redis的字典类似于java的HashMap,不同的是Redis字典的值只能是字符串,另外他们rehash的方式不一样。

jAVA的HashMap在字典很大时,rehash是一个耗时的操作,需要一次性全部rehash。Redis则采用了渐进式rehash策略。保留新旧两个hash结构,查询时同时查询两个hash结构,然后在后续的定时任务以及hash操作指令中,循序渐进的将旧hash的内容一点点迁移到新hash结构中,当hash移除了最后一个元素之后,该数据结构被自动删除,内存被回收。

hset books java "think in java"#命令行的字符串包含空格用引号引起来
hset books golang "concurrency in go"
hset books python "python cookbook"
hgetall books #key和value交替出现

hlen books #3
hget books java #"think in java"

hset books golang "leafring"#替换操作

hmset books java "effective java" python "learing python" #批量操作


#hash结构中单个的key也可以进行计数

hset user age 29
hincrby user age 1

4 set集合

Redis的集合相当于java的HashSet,内部的键值对是无序的,唯一的

sadd books python
sadd books python #重复

sadd books java golang
smembers books #插入次序和展示次序不一致

sismenbers books java #查询某个value是否存在

scard books #获取长度相当于coount()

spop books #弹出一个

5 zset有序列表

类似于JAVA的SortedSet和HashMap的结合体,一方面保证了value的唯一性,另一方面可以给每个value赋值一个score,代表这个value的排序权重。内部实现用的是一种“跳跃列表”的数据结构。

zadd books 9.0 "think in java"
zadd books 8.0 "java concurrery"
zadd books 7.0 "java cookbook"

zrange books 0 -1#按照score的得分由低到高列出
zrevrange books 0 -1 #按照score的得分高到低列出

zcard books #相当于count()

zscore books "java concurrery" # 获取指定value的score 8.9000000000004内部score使用double

zrank books "java concurrery" #排名

zrangebyscore books 0 8.91 #根据分值区间遍历zset

zrangebyscore books -inf 8.91 withscores #根据分值区间遍历zset同时返回分值

zrem books "java concurrery" #删除value

小结:

容器型数据结构的通用规则
 list,set,hash,zset共享下面两条通用规则。

1 create if not exists 
2 drop if no elements 


过期时间

Redis的所有数据结构都是可以设置过期时间的,需要注意的是过期是以对象为单位,比如一个hash结构的
过期是整个hash对象的过期,而不是其中的一个子key的过期。
如果一个字符串设置了过期时间,然后你用set方法修改了它,他的过期时间也会消失。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值