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可以包含任何数据 ...
随机推荐
- mysql基础之三:char与varchar区别,varchar(M)能存多少
char与varchar区别 char (13)长度固定, 如'1234567890' 存储需要空间 10个字符; varchar(13) 可变长 如'1234567890' 需要存储空间 11字符; ...
- MongoDB优化之三:如何排查MongoDB CPU利用率高的问题
遇到这个问题,99.9999% 的可能性是「用户使用上不合理导致」,本文主要介绍从应用的角度如何排查 MongoDB CPU 利用率高的问题. Step1: 分析数据库正在执行的请求 用户可以通过 M ...
- uboot搬移部分和重定位部分的代码分析
来看一下搬移部分和重定位部分的代码: relocate: /* 把U-BOOT重新定位到RAM*/ //r0=0; adr r0, _start /* r0是代码的当前位置*/ ld ...
- [hdu4734]F(x)数位dp
题意:求0~f(b)中,有几个小于等于 f(a)的. 解题关键:数位dp #include<bits/stdc++.h> using namespace std; typedef long ...
- 树莓派 Learning 001 装机 ---之 1 安装NOOBS系统
树莓派安装NOOBS系统 (使用的树莓派板卡型号:Raspberry Pi 2 Model B V1.1)(板卡的型号在板子正面的丝印层上印着,你可以看到.) RASPBERRY PI 2 MODEL ...
- 第 2 章 Python 语言入⻔
目录 2.1低而长的学习曲线 2.2Python的优势 2.3在你的计算机中安装Python 2.4如何运行Python程序 2.5文本编辑器 2.6寻求帮助 Python语言是一种流行的编程语言,在 ...
- Entity Framework Code-First(9.2):DataAnnotations - TimeStamp Attribute
DataAnnotations - TimeStamp Attribute: TimeStamp attribute can be applied to only one byte array pro ...
- Spring入门第三课
属性注入 属性注入就是通过setter方法注入Bean的属性值或依赖的对象. 属性植入使用<property>元素,使用name属性指定Bean的属性名称,value属性或者<val ...
- javascript函数自执行里的this为什么指向window
当你要确定“函数中的this是什么”的时候,永远不要到函数定义的地方去找答案!而是要到函数被调用的地方找答案! 具体说:函数里面的this的含义,是由它被调用的方式决定的. 换句话说,当你看到下面的代 ...
- jq中打开新页面 并获取携带值
打开新页面:window.location.href = "./index.html?id=1"获取携带值: function GetRequest() { var url = l ...