Redis应用

一、Redis的数据结构

      1.redis存储的是:key,value格式的数据,其中key都是字符串,value有5种不同的数据结构

           1)字符串类型 string

           2) 哈希类型 hash : map格式  

           3) 列表类型 list : linkedlist格式。支持重复元素

           4) 集合类型 set  : 不允许重复元素

           5) 有序集合类型 sortedset:不允许重复元素,且元素有顺序

       2.存储字符串string

            1)set key value :设定key持有指定的字符串value,如果该key存在则进行覆盖操作

            2) get key:获取key的value。如果与该key关联的value不是String类型,redis将返回错误信息,因为get命令只能用于获取String类型的值;如果该key不存在,返 回null。

               

             3)getset key value:先获取该key的值,然后在设置该key的值。

              

 

 

             4)incr key:将指定的key的value原子性的递增1,如果该key不存在,其初始值   为0

                   decr key:将指定的key的value原子性的递减1.如果该key不存在,其初始值   为0

            

 

 

            5)incrby key increment:将指定的key的value原子性增加increment

                 decrby key decrement:将指定的key的value原子性减少decrement

          

 

 

           6)append key value:如果该key存在,则在原有的value后追加该值,如果该key 不存在,则重新创建一个key/value。

      2.存储list类型

         1).概念:

                 List类型是按照插入顺序排序的字符串链表

         2)lpush key value1 value2...:在指定的key所关联的list的头部插入所有的values。如果该key不存在则创建

              rpush key value1、value2…:在该list的尾部添加元素

              lrange key start end:获取链表中从start到end的元素的值;start、end可为负数,若为-1则表示链表尾部的元素,-2则表示倒数第二个....

               

 

         3)lpop key:返回并弹出指定的key关联的链表中的第一个元素。

         4)rpop key从尾部弹出元素

         5)llen key:返回指定的key关联的链表中的元素的数量。

         6)lset key index value:设置链表中的index的脚标的元素值,0代表链表的头元 素,-1代表链表的尾元素。

              

 

 

         7)linsert key before|after pivot value:在pivot元素前或者后插入value这个元素。

            

 

 

      3.存储set类型

             1)在Redis中,Set类型看作为没有排序的字符集合并且Set集合中不允许出现重复的元素        

              2)sadd key value1、value2…:向set中添加数据,如果该key的值已有则不会重复添加

              3)smembers key:获取set中所有的成员

              4)scard key:获取set中成员的数量

 

              5)sismember key member:判断参数中指定的成员是否在该set中,1表示存在,0表示不存在或者该key本身就不存在

              6)srem key member1、member2…:删除set中指定的成员

      4.存储sortedset

                1)不允许重复元素,且元素有顺序;

                2) zadd key score value:将所有成员以及该成员的分数存放到sorted-set中

                3)zcard key:获取集合中的成员数量

                4)zcount key min max:获取分数在[min,max]之间的成员

                5)zrange key start end :zrange mysort 0 -1

       5.哈希类型 hash

               1) 存储:hset key field value  -------------->hset myhash username lisi

               2) 获取:hget key field: 获取指定的field对应的值

                                 hgetall key:获取所有的field和value

                3) 删除: hdel key field

二、持久化

      1. redis是一个内存数据库,当redis服务器重启,获取电脑重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中。

       2.redis持久化机制:

               1) RDB:默认方式,不需要进行配置,默认就使用这种机制

                    * 在一定的间隔时间中,检测key的变化情况,然后持久化数据

                          - 编辑redis.windwos.conf文件;

                          - 重新启动redis服务器,并指定配置文件名称;

               2)AOF:日志记录的方式,可以记录每一条命令的操作。可以每一次命令操作后,持久化数据    (不推荐使用)

                         * 编辑redis.windwos.conf文件:

                                 ppendonly no(关闭aof) --> appendonly yes (开启aof)

                   # appendfsync always : 每一次操作都进行持久化

                  appendfsync everysec : 每隔一秒进行一次持久化

                  # appendfsync no : 不进行持久化

三、Java客户端Jedis

        * Jedis: 一款java操作redis数据库的工具;

        * 使用步骤:1. 下载jedis的jar包

                             2. 使用:                

  //通过Java代码驱动jedis
    @Test
    //获得单一的jedis对象操作数据
    public void test1() {
    //1.获得连接对象
        Jedis jedis =new Jedis("自己的虚拟机地址", 6379);
        
        //2.获得数据
        String username = jedis.get("username");
        System.out.println(username);
        //3.存储数据
        jedis.set("addr","北京");
        System.out.println(jedis.get("addr"));
    }

          * Jedis操作各种redis中的数据                 

               1) 字符串类型 string       

//2. 操作
            //存储
            jedis.set("username","zhangsan");
            //获取
            String username = jedis.get("username");
            System.out.println(username);    
            //可以使用setex()方法存储可以指定过期时间的 key value
            jedis.setex("activecode",20,"hehe");//将activecode:hehe键值对存入redis,并且20秒后自动删除该键值对    
            //3. 关闭连接
            jedis.close();

                2) 哈希类型 hash : map格式 

//2. 操作
            // 存储hash
            jedis.hset("user","name","lisi");
            jedis.hset("user","age","23");
            jedis.hset("user","gender","female");
            // 获取hash
            String name = jedis.hget("user", "name");
            System.out.println(name);
            // 获取hash的所有map中的数据
            Map<String, String> user = jedis.hgetAll("user");
            // keyset
            Set<String> keySet = user.keySet();
            for (String key : keySet) {
                //获取value
                String value = user.get(key);
                System.out.println(key + ":" + value);
            }

             3) 列表类型 list : linkedlist格式。支持重复元素

       //2. 操作
            // list 存储
            jedis.lpush("mylist","a","b","c");//从左边存
            jedis.rpush("mylist","a","b","c");//从右边存    
            // list 范围获取
            List<String> mylist = jedis.lrange("mylist", 0, -1);
            System.out.println(mylist);            
            // list 弹出
            String element1 = jedis.lpop("mylist");//c    
            String element2 = jedis.rpop("mylist");//c    
            // list 范围获取
            List<String> mylist2 = jedis.lrange("mylist", 0, -1);

            4) 集合类型 set  : 不允许重复元素

 // set 存储
            jedis.sadd("myset","java","php","c++");
            // set 获取
            Set<String> myset = jedis.smembers("myset");

          5) 有序集合类型 sortedset:不允许重复元素,且元素有顺序

 // sortedset 存储
            jedis.zadd("mysortedset",3,"亚瑟");
            jedis.zadd("mysortedset",30,"后裔");
            jedis.zadd("mysortedset",55,"孙悟空");    
            // sortedset 获取
            Set<String> mysortedset = jedis.zrange("mysortedset", 0, -1);

Redis连接池工具类

public class JedisPoolUtils {

    private static JedisPool pool =null;
    static {
        //获得配置文件  
        InputStream in = JedisPoolUtils.class.getClassLoader().getResourceAsStream("redis.properties");
        Properties pro =new Properties();
        try {
            pro.load(in);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //获得池子对象
        JedisPoolConfig poolconfig =new JedisPoolConfig();
        poolconfig.setMaxIdle(Integer.parseInt(pro.get("redis.MaxIdle").toString()));//最大闲置个数
        poolconfig.setMinIdle(Integer.parseInt(pro.get("redis.MinIdle").toString()));//最小闲置个数
        poolconfig.setMaxTotal(Integer.parseInt(pro.get("redis.MaxTotal").toString()));//最大连接数
        pool =new JedisPool(poolconfig,pro.getProperty("redis.url"),Integer.parseInt(pro.get("redis.port").toString()));
    }
    //获得Jedis资源
    public static Jedis getJedis() {
        return pool.getResource();        
    }
}

//redis.properties文件
redis.MaxIdle=30
redis.MinIdle=10
redis.MaxTotal=100
redis.url=虚拟机地址
redis.port=6379

 

  

 

posted @ 2020-03-12 18:22  撑起一片阳光  阅读(195)  评论(0编辑  收藏  举报