• 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
    
  • 相关阅读:
    洛谷P4768 [NOI2018]归程(可持久化并查集,最短路)
    FFT/NTT总结+洛谷P3803 【模板】多项式乘法(FFT)(FFT/NTT)
    洛谷P2480 [SDOI2010]古代猪文(费马小定理,卢卡斯定理,中国剩余定理,线性筛)
    洛谷P4035 [JSOI2008]球形空间产生器(高斯消元)
    洛谷P2054 [AHOI2005]洗牌(扩展欧几里德)
    洛谷P3868 [TJOI2009]猜数字(中国剩余定理,扩展欧几里德)
    洛谷P1516 青蛙的约会(扩展欧几里德)
    Heaven of Imaginary(PKUSC2018)
    二进制高精度模板(高精度)
    洛谷UVA12995 Farey Sequence(欧拉函数,线性筛)
  • 原文地址:https://www.cnblogs.com/zzy8080/p/13934771.html
Copyright © 2020-2023  润新知