暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Redis基础入门知识

虹猫tomcat 2020-09-29
225

本文只是对Redis进行初步的介绍,基于Windows系统,是比较简单的。


Redis基本认识

Redis(Remote Dictionary Server )是一个高性能的、NoSQL(Not Only SQL)数据库。 关系型数据库与NoSQL数据库并非对立而是互补的关系,即通常情况下使用关系型数据库,在适合使用NoSQL的时候使用NoSQL数据库,让NoSQL数据库对关系型数据库的不足进行弥补。一般会将数据存储在关系型数据库中,在nosql数据库中备份存储关系型数据库的数据。

Redis的应用场景主要有缓存(数据查询、短连接、新闻内容、商品内容等等)、聊天室的在线好友列表任务队列、(秒杀、抢购、12306等等)、应用排行榜、网站访问统计、数据过期处理(可以精确到毫秒)、分布式集群架构中的session分离等。

   
Redis命令操作

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

1) 字符串类型 string 2) 哈希类型 hash :map格式   3) 列表类型 list :linkedlist格式。支持重复元素 4) 集合类型 set  :不允许重复元素 5) 有序集合类型 sortedset:不允许重复元素,且元素有顺序
字符串类型 string

1. 存储:set key value
    set name zhulin
    2. 获取:get key
      get name
      "zhulin"
      3. 删除:del key
        del name

        哈希类型 hash

        1. 存储:hset key field value
          hset myhash name lisi
          hset myhash id 123
          2. 获取:hget key field: 获取指定的field对应的值
            hget myhash username
            "lisi"
            hgetall key:获取所有的field和value
              hgetall myhash
              1) "username"
              2"lisi"
              3"password"
              4"123"
              3. 删除:hdel key field
                hdel myhash username

                列表类型 list

                可以添加一个元素到列表的头部(左边)或者尾部(右边)。

                1. 添加:

                lpush key value: 将元素加入列表左表

                rpush key value:将元素加入列表右边

                  lpush myList a
                  lpush myList b
                  rpush myList c
                  2. 获取:lrange key start end :范围获取
                    lrange myList 0 -1
                    1) "b"
                    2) "a"
                    3) "c"
                    3. 删除:
                    lpop key:删除列表最左边的元素,并将元素返回 rpop key:删除列表最右边的元素,并将元素返回

                    集合类型 set
                      不允许重复元素
                    1. 存储:sadd key value
                      sadd myset a
                      sadd myset a
                      2. 获取:smembers key:获取set集合中所有元素
                        smembers myset
                        1) "a"
                        3. 删除:srem key value:删除set集合中的某个元素
                          srem myset a

                          有序集合类型(Z集合) sortedset

                          不允许重复元素,且元素有顺序.每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。


                          1. 存储:zadd key score value
                            zadd mysort 60 zhangsan
                            zadd mysort 50 lisi
                            zadd mysort 80 wangwu
                            2. 获取:zrange key start end [withscores]
                              zrange mysort 0 -1
                              1) "lisi"
                              2) "zhangsan"
                              3) "wangwu"


                              zrange mysort 0 -1 withscores
                              1) "zhangsan"
                              2) "60"
                              3) "wangwu"
                              4) "80"
                              5) "lisi"
                              6) "500"
                              3. 删除:zrem key value
                                zrem mysort lisi
                                通用命令
                                  1. keys * : 查询所有的键
                                  2. type key :获取键对应的value的类型
                                  3. del key:删除指定的key value

                                  Redis持久化    Redis是一个内存数据库,当Redis服务器重启,获取电脑重启,数据会丢失,可以将Redis内存中的数据持久化保存到硬盘的文件中。
                                  Redis持久化机制:RDB(默认)、AOF。
                                  RDB
                                     在一定的间隔时间中,检测key的变化情况,然后持久化数据。

                                  1. 编辑redis.windwos.conf文件


                                    #   after 900 sec (15 min) if at least 1 key changed
                                    save 900 1
                                    # after 300 sec (5 min) if at least 10 keys changed
                                    save 300 10
                                    # after 60 sec if at least 10000 keys changed
                                    save 60 10000

                                    2. 重新启动redis服务器,并指定配置文件名称
                                      Redis全路径>redis-server.exe redis.windows.conf  

                                      AOF

                                      日志记录的方式,可以记录每一条命令的操作。可以每一次命令操作后,持久化数据。


                                      编辑redis.windwos.conf文件

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

                                          # appendfsync always :每一次操作都进行持久化
                                          appendfsync everysec :每隔一秒进行一次持久化
                                          # appendfsync no :不进行持久化

                                             在学习Mysql数据库的时候学习了JDBC来使用Java客户端操作Mysql,同样,可以使用Jedis用Java来对Redis进行操作。

                                          Jedis

                                          使用步骤
                                          1. 下载jedis的jar包或者导入依赖 2. 使用
                                                    //1. 获取连接
                                            Jedis jedis = new Jedis("localhost",6379);
                                            //2. 操作
                                            jedis.set("username","zhangsan");
                                            //3. 关闭连接
                                            jedis.close();

                                            操作Redis中的各种数据结构

                                            字符串类型 string
                                            set
                                            get
                                                        //1. 获取连接
                                              Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
                                              //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();

                                              哈希类型 hash

                                              map格式  

                                              hset hget hgetAll
                                                          //1. 获取连接
                                                Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
                                                //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. 关闭连接
                                                jedis.close();

                                                列表类型 list

                                                linkedlist格式。支持重复元素

                                                lpush rpush lpop rpop lrange start end : 范围获取
                                                            //1. 获取连接
                                                  Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
                                                  //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
                                                  System.out.println(element1);

                                                  String element2 = jedis.rpop("mylist");//c
                                                  System.out.println(element2);

                                                  // list 范围获取
                                                  List<String> mylist2 = jedis.lrange("mylist", 0, -1);
                                                  System.out.println(mylist2);

                                                  //3. 关闭连接
                                                  jedis.close();

                                                  集合类型 set  

                                                  不允许重复元素

                                                  sadd smembers:获取所有元素
                                                              //1. 获取连接
                                                    Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
                                                              //2. 操作
                                                    // set 存储
                                                              jedis.sadd("myset","java","php","c++");  
                                                    // set 获取
                                                    Set<String> myset = jedis.smembers("myset");
                                                    System.out.println(myset);

                                                    //3. 关闭连接
                                                    jedis.close();

                                                    有序集合类型 sortedset:

                                                    不允许重复元素,且元素有顺序。

                                                    zadd zrange
                                                                //1. 获取连接
                                                      Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
                                                      //2. 操作
                                                      // sortedset 存储
                                                      jedis.zadd("mysortedset",3,"亚瑟");
                                                      jedis.zadd("mysortedset",30,"后裔");
                                                      jedis.zadd("mysortedset",55,"孙悟空");

                                                      // sortedset 获取
                                                                Set<String> mysortedset = jedis.zrange("mysortedset"0-1);
                                                      System.out.println(mysortedset);
                                                       
                                                      //3. 关闭连接
                                                      jedis.close();

                                                      Jedis连接池:JedisPool
                                                      使用:
                                                      1. 创建JedisPool连接池对象 2. 调用方法 getResource()方法获取Jedis连接
                                                                    //0.创建一个配置对象
                                                        JedisPoolConfig config = new JedisPoolConfig();
                                                        config.setMaxTotal(50);
                                                        config.setMaxIdle(10);

                                                        //1.创建Jedis连接池对象
                                                        JedisPool jedisPool = new JedisPool(config,"localhost",6379);

                                                        //2.获取连接
                                                        Jedis jedis = jedisPool.getResource();
                                                        //3. 使用
                                                        jedis.set("hehe","heihei");
                                                              
                                                        //4. 关闭 归还到连接池中
                                                        jedis.close();


                                                                  关于Redis最基本的知识就介绍这点。其实,真正学习Redis还是要在Linux上,毕竟实际开发都是用Linux。

                                                        文章转载自虹猫tomcat,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                                        评论