Redis学习3
sorted_set
用于为资源排序
获取数据对应得索引
zrank
key member(正序)
zrevrank
key member(逆序)
score值获取与修改
zscore
key member
zincrby
key increment member
1.score 储存空间是64位,在-9007199254740992~9007199254740992
2.score保存double类型的数据时可能会丢失精度
3.如果重复添加相同的数据,score的会一直覆盖,只会保留最后一次修改的值。
应用场景:主要用于处理时间限定的任务执行顺序管理,或任务过期管理。
获取当前系统时间
time
应用场景:Redis应用于即使任务/消息队列执行管理
2.也可应用于按次结算的服务控制 例如:不用最大值的判定,利用超过最大值抛出异常的形式代替判断是否大于最大值。
3.应用于时间顺序的数据操作。
返回值是0不带表添加失败,值已经发生了变化
Redis 通用指令
key通用操作
删除指定key
del
key
获取key是否存在
exists
key
获取key的类型
type
key
key 扩展操作(时效性控制,查询模式,其他操作)
为指定key设置有效期
expire
key seconds
pexpire
key milliseconds
expireat
key timestamp
pexpireat
key milliseconds-timestamp
获取key的有效时间
ttl
key
pttl
key
把key的时效性更改为永久性
persist
key
注意:key关于时间的,如果一个key返回值不存在,那么他就返回一个-2,如果存在就返回-1,设置了有效期,就返回现在有效的时长
查询key
keys
pattern
规则
- *匹配任意数量的任意符号 ?配合任意一个符号 []匹配一个指定符号
keys * 查询所有
keys xx* 查询所有以xx开头
keys *xx查询所有以xx结尾
keys ??xx查询所有前面两个字符任意,后面以xx结尾
keys xx:? 查询所有以xx:开头,最后一个字符任意
keys x[st]y:1 查询所有以x开头,以y:1结尾,中间包含一个字母,s或t
为key改名
rename
key newkey
renamenx
key newkey
对所有key排序
sort
其他key通用操作
help @generic
数据库通用指令
redis的服务提供有16个数据库,编号是索引0-15,每个数据库是独立的
db 基本操作, 相关操作
切换数据库 select
index
其他操作 quit
退出
ping
检测服务是否连接成功
echo
message 打印信息
数据移动
move
key db
数据清除
dbsize
查看key个数
flushdb
删除当前数据库
flushall
删除所有数据库 (谨慎操作,基本用不到)
Jedis
简介:java连接Redis简称Jedis
第一个Jedis程序
环境搭建
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
编写代码
public void testJedis(){
//连接
Jedis jedis = new Jedis("localhost", 6379);
//操作
// jedis.set("name","java");
String name = jedis.get("name");
System.out.println(name);
//关闭
jedis.close();
}
public void testList(){
//连接
Jedis jedis = new Jedis("localhost", 6379);
//操作
jedis.lpush("list1","a","b","c");
jedis.rpush("list1","x");
List<String> list1 = jedis.lrange("list1", 0, -1);
for (String s : list1) {
System.out.println(s);
}
System.out.println(jedis.llen("list1"));
System.out.println();
//关闭
jedis.close();
}
public void testHash(){
//连接
Jedis jedis = new Jedis("localhost", 6379);
//操作
jedis.hset("hash1","a1","b1");
jedis.hset("hash1","a2","a2");
jedis.hset("hash1","a3","b3");
Map<String, String> hash1 = jedis.hgetAll("hash1");
System.out.println(hash1);
System.out.println(jedis.hlen("hash1"));
System.out.println();
//关闭
jedis.close();
}
Jedis读写redis数据
第一步,实现业务方法,第二步,设置多线程类,实现线程调度,第三步,设计Redis业务逻辑,第四步,设计启动主程序
public class Service {
private String id;
private int num;
public Service(String id,int num) {
this.num=num;
this.id = id;
}
//控制单元
public void service( ){
Jedis jedis = new Jedis("localhost", 6379);
// jedis.set("name","java");
String value = jedis.get("name"+id);
//判断值是否存在
try {
if (value == null){
//不存在,创建该值
jedis.setex("name"+id,20,Long.MAX_VALUE-num+"");
}else{
//存在,自增,调用服务
Long val = jedis.incr("name" + id);
business(id,num-(Long.MAX_VALUE - val));
}
}catch (JedisDataException e){
System.out.println("使用次数已达到上限,请使用会员级别");
return;
}finally {
jedis.close();
}
}
//业务操作
public void business(String id,Long val){
System.out.println("用户:"+id+" 业务执行操作第"+val+"次");
}
}
class MyThread extends Thread{
Service sc;
public MyThread(String id,int num){
sc = new Service(id,num);
}
@Override
public void run(){
while (true){
sc.service();
try {
Thread.sleep(300L);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Main{
public static void main(String[] args) {
MyThread t = new MyThread("初级用户",10);
MyThread t2 = new MyThread("高级用户", 30);
t.start();
t2.start();
}
}
Jedis工具类
第一步,初始化静态资源,连接配置对象,第二步,从连接处获取jedis对象,第三步,配置封装连接参数。
public class JedisUtils {
//初始化静态资源
private static JedisPool jp =null; //连接池技术
private static String host =null;//服务器地址
private static int port;//服务端口号
private static int maxTotal;
private static int maxIdle;
static {
ResourceBundle rb = ResourceBundle.getBundle("jedis");
host = rb.getString("jedis.host");
port = Integer.parseInt(rb.getString("jedis.port"));
maxTotal = Integer.parseInt(rb.getString("jedis.maxIdle"));
maxIdle = Integer.parseInt(rb.getString("jedis.maxIdle"));
JedisPoolConfig jpc = new JedisPoolConfig();//连接配置对象
jpc.setMaxTotal(maxTotal); //最大连接数
jpc.setMaxIdle(maxIdle);//设置最大活动数
jp = new JedisPool(jpc, host, port);
}
//获取连接提供jedis对象,连接从连接处获取
public static Jedis getJedis(){
return jp.getResource();
}
public static void main(String[] args) {
JedisUtils.getJedis();
}
}
封装连接参数
jedis.properties
jedis.host =127.0.0.1
jedis.port = 6379
jedis.maxTotal=30
jedis.maxIdle=10