Redis总结(一)基础类型总结

一、redis支持的数据结构:

最近开始总结redis的相关知识,毕竟今年的行情不好,时刻总结回顾知识点,投资自己哪怕被优化也能时刻上手面试。
1、String
特点:
一个键能储存512MB
string类型是二进制安全的,可以存储任何数据,比如jpg图片或序列化对象;
适用场景:常规key-value缓存应用。常规计数: 微博数, 粉丝数。

2、Hash
适用场景:比较适合于存储对象

3、List
适用场景:Redis list的应用场景非常多,也是Redis最重要的数据结构之一,比如twitter的关注列表,粉丝列表等都可以用Redis的list结构来实现。使用Lists结构,我们可以轻松地实现最新消息排行等功能。Lists的另一个应用就是消息队列,可以利用Lists的PUSH操作,将任务存在Lists中,然后工作线程再用POP操作将任务取出进行执行。Redis还提供了操作Lists中某一段的api,你可以直接查询,删除Lists中某一段的元素。

4、set
适用场景:set是一个无需且自动排重的列表数据,如果需要存储一个列表,不希望有重复数据,可以选择使用set,并且set提供了判断成员是否存在的接口。

实现方式:set 的内部实现是一个value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。

5、zset
适用场景:与set唯一的区别就是有序,如果需要存储一个列表希望没有重复数据且有序,则可以使用。

实现方式:zset的内部使用HashMap和跳跃表(SkipList)来保证数据的存储和有序,HashMap里放的是成员到score的映射,而跳跃表里存放的是所有的成员,排序依据是HashMap里存的score,使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单。

6、Redis HyperLogLog

用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近2^64个不同元素的基数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。

二、redis支持数据结构的基本操作

1、String

  • jedis.set(“key1”, “value1”); //设置键值
  • jedis.get(“key1”); //通过键获取值
  • jedis.delete(“key1”); //通过key删除值
  • jedis.getSet(“key2”, “new_value2”);//通过key设置新值并返回旧值
  • jedis.getrange(“key2”, 0, 3);//通过key截取值的部分
  • jedis.append(“key2”, “_app”); //通过key拼接字符串,并返回新的长度
  • jedis.incr(“key”);//redis自增,如果不存在则赋值为1,如果存在则加一
  • jedis.incrBy(“key”,2);//针对key增加响应的值
  • jedis.decr(“key”);redis递减,如果不存在则赋值-1,存在则减一
  • jedis.decrBy(“key”,2);//针对key减去相应的值

2、Hash

  • jedis.hset(“key1”,“field”,“value”);//设置key及对应的field和value
  • jedis.hget(“key1”,“field”);//通过key及field获取value,返回值为String
  • jedis.hexists(“key1”,“field”);//通过key及field判断是否存在缓存
  • jedis.hgetAll(“key1”);//通过key获取所有的field及value,返回值为Map<String,String>
  • jedis.hincrBy(“key1”,“field”,2);//通过key以及field增加相应的值
  • jedis.hvals(“key1”);//获取key中对应的所有value
  • jedis.hkeys(“key1”);//获取key中对应的所有field值
  • jedis.hmget(“key1”,“field”);//通过key及field获取value,返回值为List
  • jedis.hdel(“key1”,“field”);//删除缓存

3、List

  • jedis.lpush(“key”,“value”); //从左边往链表push值
  • jedis.rpush(“key”,“value”);//从右边往链表push值
  • jedis.lindex(“key”,0);//取从左边开始下标为0的数据
  • jedis.llen(‘key’);//获取链表的长度
  • jedis.lpop(“key”);//删除左边第一个元素
  • jedis.rpop(“key”);//删除右边第一个元素
  • jedis.linsert(“key”, Client.LIST_POSITION.BEFORE,“value1”,“value2”);//在value1前面插入value2
  • jedis.linsert(“key”, Client.LIST_POSITION.AFTER,“value1”,“value2”);//在value1后面插入value2
  • jedis.lrange(“key”,index1,index2);//获取下标index1到index2的数据
  • jedis.lrem(“key”,2,“value”);//删除两个值为value的成员
  • jedis.lset(“key”,1,“value”);//将下标为1的值置为value

4、Set

  • jedis.sadd(“key”,“value1”,“value2”);//往set列表添加值
  • jedis.scard(“key”);//查看集合长度
  • jedis.sdiff(“key1”, “key2”);//查看两个集合中的差集
  • jedis.sdiffstore(“newKey”, “key1”, “key2”);//将两个集合中的差集保存到新的集合中
  • jedis.sinter(“key1”, “key2”);//查看两个集合中的并集
  • jedis.sinterstore(“newKey”, “key1”, “key2”);//将两个集合中的并集保存到新的集合
  • jedis.sismember(“key”, “value”);//查看集合中是否存在value
  • jedis.smembers(“key”);//获取key集合中所有的value

5、Zset

  • jedis.zadd(“key”,score,“value”);//添加元素,并设置分值
  • jedis.zcard(“key”);//得到集合中的元素数量
  • jedis.zcount(“key”,score1,score2);//得到分值在这个区间的元素数量
  • jedis.zrange(“key”,1,3);//截取下标范围的value值
  • jedis.zrangeByScore(“key”,0,-1);取集合中所有数据并按score排序
  • jedis.zrem(“key”,“member”);//删除指定成员

6、HyperLogLog

  • jedis.pfadd(“key”,“value1”,“value2”);//添加指定元素到 HyperLogLog 中
  • jedis.pfcount(“key”);//返回指定基数
  • jedis.pfmerge(“newkey”,“key1”,“key2”);//合并多个 HyperLogLog,并将其保存在 desKey 中
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值