redis数据类型--个人常规用法
一.String
1.可以容纳最高512M的value。
2.经常用于通过expire来实现自动过期的一些值,直接通过setex 来。
3.通过incrby的方式,来实现value值得增长。
4.执行setnx会返回加成后的值来决定谁获取到了锁,比如同时往一个空的key写 setnx key value,哪个线程返回值是1,即为抢到了锁。
基于以上,则可以实现简单的分布式锁:
public void lock(){
if(jedis.setnx("test.lock","1") == 1){
jedis.expire("test.lock",3);
//TODO
}
}
public void unlock(){
jedis.del("test.lock");
}
二.hash
hash是一个string类型的field和value的映射表,hash很多操作指令都类似于string类型的指令,经常用于存储数据。
1.hash 常常用于存储数据。
2.hash 是 key field value的数据结构,与String相比,更省内存,但是对应自动过期粒度到Key,因此选择哪种数据结构依赖于需求决定。
三.List
List 简单就是队列,一般都是用于做简单的FIFO队列。
1.采用rpush key value 把值赛进去,通过lpop把值取出来。
2.如果是一次取出多个可以用另外一种方式减少交互的次数,降低往返的时延。
a.pipeline 降低交互次数。
b.lrange 获取数据
c.ltrim 移除数据
Jedis client = clientManager.getPooledClient();
Pipeline pipeline = client.pipelined();
pipeline.lrange(key,start,end);
pipeline.ltrim(key,end + 1, -1);
List<Object> rs = pipeline.syncAndReturnAll();
List<String> result = (List<String>) rs.get(0);
四.Set
Set 就是set,String 类型的无序集合,不允许重复
1.set类型可以简单通过sadd 判定某个值是否存在,不存在则返回 1,存在返回0.
2.在一些不允许重复值的场景下还是非常好用的。
五.sortedSet
有序集合,默认根据score排序,可使用场景非常多。
1.热门排序,由于在写入的时候就根据score排序,因此根据score获取非常快,但是在写入时候时间复杂度会相对高些。
2.分布式定时任务,这个当时无意中发现的,再一些时间精度要求没那么高的场景时候非常好用。
a.设置定时任务,key score(时间戳) member(定时任务参数)
b.zrangebyscore,获取某个区间内的任务。返回值是Set<String> 即member的列表
c.zrem key member,根据争抢有移除到的返回值为1,未移除到的返回值为0,来判断这个定时任务在哪台机器上执行。
d.根据具体的member来执行任务
//添加定时任务
jedis.zadd("cronKey",1554739013,"{'param':'123'}"); //获取区间定时任务
Set<String> members = jeids.zrangeByScore("cronKey",0,currentTime); for(String value:members){
if(jedis.zrem("cronKey",value) > 0){
//TODO
}
}
redis数据类型--个人常规用法的更多相关文章
- redis数据类型及使用场景
Redis数据类型 String: Strings 数据结构是简单的key-value类型,value其实不仅是String,也可以是数字. 常用命令: set,get,decr,incr,mge ...
- redis数据类型-散列类型
Redis数据类型 散列类型 Redis是采用字典结构以键值对的形式存储数据的,而散列类型(hash)的键值也是一种字典结构,其存储了字段(field)和字段值的映射,但字段值只能是字符串,不支持其他 ...
- redis数据类型-字符串类型
Redis数据类型 字符串类型 字符串类型是Redis中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据.你可以用其存储用户的邮箱.JSON化的对象甚至是一张图片.一个字符串类型键允许存储的 ...
- Redis数据类型和常用命令
Redis相较于其它的数据库虽然简单,但是要熟记所有命令的用法也并非易事.一个简单的技巧是通过要操作的数据类型来将这些命令进行结构化. 数据类型和对应命令 所有存储于redis中的数据都对应于一个键值 ...
- Redis数据类型、两种模型、事务、内部命令
1.redis数据类型 a.字符串,使用场景:常规key-value缓存应用 set name lixiang get name append name 123 # 字符串追加 mset key va ...
- 【python】redis基本命令和基本用法详解
[python]redis基本命令和基本用法详解 来自http://www.cnblogs.com/wangtp/p/5636872.html 1.redis连接 redis-py提供两个类Redis ...
- Redis数据类型和操作
<"Java技术员"成长手册>,包含框架.存储.搜索.优化.分布式等必备知识,都收集在GitHub JavaEgg ,N线互联网开发必备技能兵器谱,欢迎指导 Redis ...
- redis数据类型及订阅操作
Redis数据类型详解 Redis键/值介绍 Redis key值是二进制安全的,这意味着可以用任何二进制序列作为key值,从形如“foo”的简单字符串到一个JPG文件的内容都可以.空字符串也是有效k ...
- 初识redis数据类型
初识redis数据类型 1.String(字符串) string是redis最基本的类型,一个key对应一个value. string类型是二进制安全的.意思是redis的string可以包含任何数据 ...
随机推荐
- NameNode内存优化---基于缓存相同文件名的方法
NameNode内存优化---重用相同的文件名 原创文章,转载请注明:博客园aprogramer 原文链接:NameNode内存优化---重用相同的文件名 众所周知,Hadoop集 ...
- 一 Optional
从Java8 引入的一个很有趣的特性是Optional类.Optional类主要解决的问题是臭名昭著的空指针异常(NullPointerException). 一: 创建Optional对象: ...
- AD9 如何画4层pcb板
新建的PCB文件默认的是2层板,教你怎么设置4层甚至更多层板. 在工具栏点击Design-->Layer Stack Manager.进入之后显示的是两层板,添加为4层板,一般是先点top la ...
- Java类的生命周期(转)
引言 最近有位细心的朋友在阅读笔者的文章时,对java类的生命周期问题有一些疑惑,笔者打开百度搜了一下相关的问题,看到网上的资料很少有把这个问题讲明白的,主要是因为目前国内java方面的教材大多只是告 ...
- 【转】Jquery折叠效果
转自:http://www.cnblogs.com/clc2008/archive/2011/10/25/2223254.html <!DOCTYPE html PUBLIC "-// ...
- python并发编程之多线程2死锁与递归锁,信号量等
一.死锁现象与递归锁 进程也是有死锁的 所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用, 这些永远在互相等待的进程称为死锁进程 如下就是死锁 ...
- C#设计模式(8)——桥接模式
一.概念 桥接模式即将抽象部分与实现部分脱耦,使它们可以独立变化. 二.模型 三.代码实现 // 客户端调用 // 类似Web应用程序 class Client { static void Main( ...
- qt数据库sql语句使用c++中的变量
void SerialWidget::on_btnMysql_clicked() { qDebug()<<QSqlDatabase::drivers()<<endl; /*列出 ...
- 常见的CSS和HTML面试题
1. 常用那几种浏览器测试?有哪些内核(Layout Engine)? 浏览器:IE,Chrome,FireFox,Safari,Opera. 内核:Trident,Gecko,Presto,Webk ...
- Java视频播放器的制作
----------------siwuxie095 使用 Java Swing 框架制作一个简单的视频播放器: 首先到 Vid ...