• 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
    
    

      

  • 相关阅读:
    IDEA maven 项目编译忽略xml文件问题
    Mybatis Generator 路径和实体类要放的路径不一致 导致Could not resolve type alias
    Mybatis 错误:Error parsing Mapper XML. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias
    Spring Security使用报错 No bean named 'springSecurityFilterChain' is defined
    连接mysql失败 Path does not chain with any of the trust anchors
    IPFS客户端导致IDEA SSH登录错误,显示Connection reset
    Electron-从windows向electron拖动文件失败
    【Electron】renderer.js中无法require('electron').remote
    getElementsByNames无法获得对应的svg标签
    [React] setState更新成功不触发渲染,不常见的解决方法
  • 原文地址:https://www.cnblogs.com/cqyp/p/12477639.html
Copyright © 2020-2023  润新知