Redis通用指令和第一个Jedis程序的实现

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

delkey

获取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
原文地址:https://www.cnblogs.com/zzy8080/p/13934771.html