提到redis的常用数据结构,很多人都知道有常用的5中基础结构:字符串,列表 , 哈希 , 集合, 有序集合。其实就是String,list,hash,set,zset.
在平常的开发中这5中基本够用了,还有在面试中回到出这5个也没毛病。那么基于这些常用的数据结构有那些操作方法呢?
首先可以基于jedis这个java客户端来讲,他的方法基本和redis的原生命令command一致,例如:jedis.hset(...);这里的hset方法就是和redis操作哈希的命令一样:
上图就是redis的原生操作。
1、字符串(String)
- 字符串常用的方法命令有:
- set(k,v) ,
- set(k,v,ex|px,nx,xx,expires),
- mset(Object...kv)
- mget(Object...k)
- 基本对于字符串操作这几个就够用,常用多的是业务中把数据 json化字符串缓存起来。
2、列表(List)
- lpush(k,v) 在一个列表中从左面塞入数据
- lpop(k) 在列表的左面获得一次获得数据(在list中移除数据)
- rpush(k,v) 同理上面的这是从右面塞入数据
- rpop(k)
- blpop(k,timeout) 这里的意思是bolckleftpop,阻塞pop获取数据,也有两个参数的方法可以选择timeout阻塞的超时时间
- brpop(k,timeout)
- lset(k,index,v) 从左到右 修改列表第index下标的数据
- lindex(k,index) 从左到右获得列表第index下标的数据
- lrange(k,start,end) 从左到右获得列表start - end 下标的范围的所有数据
- 上述就是有关列表相关常用的方法,基本够用了。
3、哈希(hash)
- 哈希呢首先说下,他的特点是能够修改hash这个数据结构中的某个字段,就类似于一个对象,我可以setXX(xxx)方法类似
- hset(k,filed,v) 这里的参数意思是 filed 这个hash数据结构中的一个属性名称
- hmset(k,v) 这里的v可是个对象包含很多属性,或者是个map<k,v>的,操作多个属性值
- hdel(k,filed) 删除hash结构中某个属性
- hget(k,filed) 获得hash结构中某个属性的值
- hkeys(k) 获得hash结构中所有属性的名称类似于map,keySet()方法
- hgetall(k) 获得整个hash的结构k,v都获得
- 上述这几个方法就是咱们常用的,平常的开发也够用了
4、集合(set)
- 这个集合就是类似于java中的set,不允许重复的数据
- sadd(k,v)
- srem(k,v) 删除set中的某个item value
- scard(k) 统计这个集合有多少个元素,count的意思
- sismeember(k,item) 查看item是否在set集合中
- srandmerber(k) 随机返回一个元素(不删除)
- spop(k) 返回一个元素(删除)
- smember(k) 返回所有元素
- sunion(k1,k2) 返回俩个set集合的交集元素
- sdiff(k1,k2) 返回两个set集合的不同元素
- 上述的集合方法是常用的一些方法。
5、有序集合(zset)
- 首先zset他是个有序的不重复的集合,他有个特殊的字段score分值,根据这个在redis中正序排列
- zadd(k,score,v [score ,v ...]) 添加 key , score , v ... 可以多个添加
- zcard(k) 统计count数
- zscore(k,v) 获得zset中v元素的score值
- zrem(k,v) 删除zset中的v
- zrank(k,v) 返回zset集合中v的index下标位置,正序算
- zrevrank(k,v) 返回zset集合中v的index下标位置,倒序算
- zincrby(k,incrscore,v) 在zset集合中给v元素自增incrscore个分值
- zrange(k,start,end) 根据下标返回zset集合元素正序排列返回
- zravrange(k,start,end) 根据下标返回zset集合元素倒序排列返回
- zrange(k,start,end,withscores) 根据下标返回zset集合元素+分值score正序排列返回
- zrevrange(k,start,end,withscores) 根据下标返回zset集合元素+分值score倒序排列返回
- zrangebyscore(k,min,max) 这里是根据分值的范围返回正序结合结果
- zrevrangebyscore(k,max,min) 这里是根据分值的范围返回倒序结合结果
- zcount(k,min,max) 这里是根据分值的范围返回集合的count数
- 上述的方法是常用的zset数据结构方法,比较常用,场景用的很多地方,例如排行榜之类的很方便使用
6、除了常用的5中数据结构还有其他常用的有bitmaps, hyperloglog, 尤其是bitmaps位图数据结构很方便,相关可以查看书籍