zoukankan      html  css  js  c++  java
  • Redis

    一、Redis概念

    Redis是一款性能极高的非关系型数据库(NOSQL系列)。与之对应的是我们经常使用的关系型数据库,如:MYSQL、Oracle等等,关系型数据库的数据主要是以表的形式存储在硬盘的文件上,数据之间存在关联关系;而非关系型数据库的数据主要是以key:value即键值对的形式存储在内存当中,数据之间没有任何的关联关系。

    二、Redis的安装

    官网:https://redis.io

    中文网:http://www.redis.net.cn

    此处以Windows64位版本的Redis为例,下载好的压缩包直接解压就可以使用,在解压的文件夹中,我们主要使用的是redis.windows.conf(配置文件)、redis-cli.exe(客户端)、redis-server.exe(Redis的服务器端);直接双击redis-server.exe启动服务器,可以看到Redis的相应版本,port端口,进程PID。此时双击redis-cli.exe启动客户端,可以通过"set username jason"和"get username"的方式存取username。

    三、Redis数据结构

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

    1、字符串类型(String)

    2、哈希类型(hash):存储map格式,value又是key,value的形式

    3、列表类型(list):存储linkedlist格式,list元素可以重复

    4、集合类型(set):set集合元素不可以重复r

    5、有序集合类型(sortedset):sortedset集合既不能让元素重复,元素存到集合中之后还会给元素排序 

    四、Redis命令操作

    1、字符串类型(String)

    存储:set key value

    获取:get key

    删除:del key

    2、哈希类型(hash)

    存储:hset key field value  (hset  person  username lisi)(hset  person password 123456)

    获取:

    获取指定的field对应的值:hget key field   (hget person username)

    获取所有的field和value:hgetall  key

    删除:hdel key field  (hdel  person username)

    3、列表类型(list)

    可以添加一个元素到列表的头部或者尾部,用lpush往左边即头部添加,用rpush往右边即尾部添加。

    添加:

    左加:lpush key value

    右加:rpush key value

    获取:

    范围获取:lrange key start end

    删除:

    lpop key:删除列表最左边的元素,并将元素返回

    rpop key:删除列表最右边的元素,并将元素返回

    4、集合类型(set)

    添加:sadd key value

    获取:smembers key(获取set集合中的所有元素)

    删除:srem key value

    5、集合类型(sortedset)

    添加:zadd key score value

    获取:zrange key start end  (zrange person 0 -1)若要查看存入的分数则为(zrange person 0  -1 withscores)

    删除:zrem key value

     6、通用命令

    keys * :查询所有的键

    type key :获取键对应的value的类型

    del key :删除指定的key  value

    五、Redis持久化

    Redis是一个内存数据库,当Redis服务器重启或者是电脑重启时,数据就会丢失,然而,我们可以将数据持久化保存到硬盘的文件中,就可以解决这一问题。

    Redis持久化机制:

    RDB:默认方式,不需要进行配置,默认就使用这种机制(在一定的时间间隔内,检测key的变化情况,然后持久化)

    编辑Redis.windows.conf文件

    save  900  1(在900秒内有至少1个key被修改就持久化一次)

    save  300  10(在300秒内有至少10个key被修改就持久化一次)

    save  60  10000(在60秒内有至少10000个key被修改就持久化一次)

    修改了之后重新启动服务器(在redis-server.exe所在目录下打开控制台),输入命令:redis-server.exe  redis.windows.conf 操作

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

    编辑Redis.windows.conf文件

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

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

    appendfsync  everysec:没隔一秒进行持久化

    appendfsync no:不进行持久化

    修改了之后重新启动服务器(在redis-server.exe所在目录下打开控制台),输入命令:redis-server.exe  redis.windows.conf 操作

     六、Jedis入门

    Jedis是一款Java操作redis数据库的工具。

    这里可以创建一个maven项目,也可以创建简单的java工程,只需要导入连接池和jedis的jar包即可,如果编写测试类测试,还需要导入junit的jar包。

     1 public class RedisTest {
     2     @Test
     3     public void test(){
     4         //获取连接
     5         Jedis jedis = new Jedis("127.0.0.1",6379);//如果使用空参构造,默认值是“localhost”,6379端口
     6         //操作
     7         jedis.set("username","xiaobaitu");
     8         //关闭连接
     9         jedis.close();
    10     }
    11 }

    运行程序,打开客户端,输入命令"keys  * ",可以看到username,通过“ get username ”就可以拿到值“xiaobaitu”。 

    Jedis操作各种redis中的数据结构:

    1、字符串类型(String)

    set/get

     1 @Test
     2     public void test2(){
     3         //获取连接
     4         Jedis jedis = new Jedis("127.0.0.1",6379);
     5         //操作
     6         jedis.set("username","xiaobaitu");
     7         //获取
     8         String username = jedis.get("username");
     9         System.out.println(username);
    10         //可以使用setex()方法存储指定过期时间的key  value
    11         jedis.setex("activecode",50,"jedis");//运行程序,会将activecode:jedis存入redis,50秒后会自动删除该键值对
    12         //关闭连接
    13         jedis.close();
    14     }

    2、哈希类型(hash):存储map格式,value又是key,value的形式

    hset/hget/hgetall

     1  @Test
     2     public void test3(){
     3         //获取连接
     4         Jedis jedis = new Jedis("127.0.0.1",6379);
     5         //操作
     6         jedis.hset("user","name","jedis");
     7         jedis.hset("user","age","18");
     8         jedis.hset("user","sex","mal");
     9         //获取hash
    10         Map<String,String> user = jedis.hgetAll("user");
    11         Set<String> keyset = user.keySet();
    12         for (String s : keyset) {
    13             System.out.println(s+":"+user.get(s));
    14         }
    15         //关闭连接
    16         jedis.close();
    17     }

    3、列表类型(list):存储linkedlist格式,list元素可以重复

    lpush、rpush、lpop、rpop、lrange start  end

     1 @Test
     2     public void test4(){
     3         //获取连接
     4         Jedis jedis = new Jedis("127.0.0.1",6379);
     5         //操作
     6        jedis.lpush("list","abc","def","ghl");//从左存储
     7        jedis.rpush("list","abc","def","ghl");//从右存储
     8         //获取
     9         List<String> li = jedis.lrange("list",0,-1);
    10         System.out.println(li);
    11         //关闭连接
    12         jedis.close();
    13     }

    4、集合类型(set):set集合元素不可以重复r

    sadd/smembers

     1 @Test
     2     public void test5(){
     3         //获取连接
     4         Jedis jedis = new Jedis("127.0.0.1",6379);
     5         //操作
     6        jedis.sadd("set","java","php","python");
     7        //获取
     8         Set<String> set = jedis.smembers("set");
     9         System.out.println(set);
    10         //关闭连接
    11         jedis.close();
    12     }

    5、有序集合类型(sortedset):sortedset集合既不能让元素重复,元素存到集合中之后还会给元素排序 

    zadd/zrange start end

     1 @Test
     2     public void test6(){
     3         //获取连接
     4         Jedis jedis = new Jedis("127.0.0.1",6379);
     5         //操作
     6         jedis.zadd("sortedset",7,"物理");
     7         jedis.zadd("sortedset",17,"化学");
     8         jedis.zadd("sortedset",2,"语文");
     9         //获取
    10         Set<String> set = jedis.zrange("sortedset",0,-1);
    11         System.out.println(set);
    12         //关闭连接
    13         jedis.close();
    14     }

    jedis连接池:jedis自带了连接池(JedisPool)

     1  @Test
     2     public void test7(){
     3         //创建一个配置对象
     4         JedisPoolConfig config = new JedisPoolConfig();
     5         config.setMaxTotal(50);
     6         config.setMaxIdle(10);
     7         //1.创建连接池
     8         JedisPool jedisPool = new JedisPool(config,"127.0.0.1",6379);
     9         //2.获取连接
    10         Jedis jedis = jedisPool.getResource();
    11         //3.使用
    12         jedis.set("book","litter");
    13         //4.连接归还到连接池
    14         jedis.close();
    15     }

    这里还可以将配置抽取出来作为一个工具类

     1 public class JedisPoolUtil {
     2     private static JedisPool jedisPool;
     3     static {
     4         //读取配置文件
     5         InputStream is = JedisPoolUtil.class.getClassLoader().getResourceAsStream("jedis.properties");
     6         //创建properties对象
     7         Properties properties = new Properties();
     8         //关联文件
     9         try {
    10             properties.load(is);
    11         } catch (IOException e) {
    12             e.printStackTrace();
    13         }
    14         //获取数据,设置到JedisPoolConfig中
    15         JedisPoolConfig config = new JedisPoolConfig();
    16         config.setMaxIdle(Integer.parseInt(properties.getProperty("maxIdle")));
    17         config.setMaxTotal(Integer.parseInt(properties.getProperty("maxTotal")));
    18         //初始化JedisPool
    19         jedisPool = new JedisPool(config,properties.getProperty("host"),Integer.parseInt(properties.getProperty("port")));
    20     }
    21 
    22     /**
    23      * 获取连接方法
    24      * @return
    25      */
    26     public static Jedis getJedis(){
    27         return jedisPool.getResource();
    28     }
    29 
    30 }
    31 
    32 @Test
    33     public void test8(){
    34         //1.通过连接池工具获取
    35         Jedis jedis = JedisPoolUtil.getJedis();
    36         //2.使用
    37         jedis.set("book","litter");
    38         //3.连接归还到连接池
    39         jedis.close();
    40   }

     

     

  • 相关阅读:
    《如何评价Kaiming He的Momentum Contrast for Unsupervised?》
    多伦多大学&NVIDIA最新成果:图像标注速度提升10倍!
    GitHub超全机器学习工程师成长路线图,开源两日收获3700+Star!
    上Github,北大、清华、浙大、中科大4大名校课程在线学,加星总数超1.8万
    使用Python+OpenCV进行图像处理(二)| 视觉入门
    重磅!刷新两项世界纪录的腾讯优图人脸检测算法DSFD开源了!
    巴黎不哭!十亿数据精准扫描,帮卡西莫多重新找回他的玫瑰花窗
    机器学习算法系列:FM分解机
    百道Python面试题实现,搞定Python编程就靠它
    学习GAN必须阅读的10篇论文
  • 原文地址:https://www.cnblogs.com/zhuifenglang/p/10902370.html
Copyright © 2011-2022 走看看