欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

笔记-JavaWeb学习之旅19

程序员文章站 2022-06-28 20:48:24
Redis:redis是一款高性能的NOSQL系列的非关系型数据库 NOSQL: Not Only SQL ,意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型数据库 redis的数据及结构: redis储存的是:Key,Value格式的数据,其中key都是字符串,value有5种不同的数 ......
redis:redis是一款高性能的nosql系列的非关系型数据库

nosql: not only sql ,意即“不仅仅是sql”,是一项全新的数据库理念,泛指非关系型数据库

redis的数据及结构:

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

value的数据结构:

1.字符串类型 string

存储方式:set key value

获取方式: get key

删除方式: del key

2.哈希类型 hash:相当于map格式

存储方式: hset key field value(hset myhash username lisi),(hset myhash password 123)

获取方式: hget key field(hget myhash username)

删除方式: hdel key field

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

存储方式:lpush key value:将元素加入列表左边 (rpush加入右边)

获取方式:lrange key start end :范围获取

删除方式:lpop key :删除列表左边元素(rpop删除列表右边优速)

3.集合类型 set :不允许重复元素

存储方式:sadd key value

获取方式:smembers key(获取所有元素)

删除方式:srem key value

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

存储方式:zadd key score value(每一个元素都关联一个score,按照score排序)

获取方式:zrange key start end [withscores](:查询所有元素,加上withscores会获取到分数)

删除方式:zrem key value

通用命令

​ 1. keys * : 查询所有的键
​ 2. type key : 获取键对应的value的类型
​ 3. del key:删除指定的key value

持久化:redis是一个内存数据库,当redis服务器重启,或者电脑重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘中,确保数据不会对视

redis持久化机制

rdb:默认方式,不需要配置,默认使用

aof:日志记录的方式,可以记录每一天命令的操作。

java客户端 jedis

jedis:一款java操作redis数据库的工具

package com.data.jedis;


import com.data.util.jedispoolutils;
import org.junit.test;
import redis.clients.jedis.jedis;
import redis.clients.jedis.jedispool;
import redis.clients.jedis.jedispoolconfig;

import java.util.list;
import java.util.map;
import java.util.set;

public class testjedis {
    //字符串操作
    @test
    public void test1(){
        //获取连接
        jedis jedis = new jedis("localhost",6379);
        //2.存储操作
        jedis.set("username","zhangsan");
        //获取
        string username = jedis.get("username");
        system.out.println(username);
        //可以使用setex()方法储存可以指定过期时间
        jedis.setex("activecode",20,"123");//20秒后自动删除该键
        //关闭连接
        jedis.close();
    }

    //hash数据结构操作
    @test
    public void test2(){
        //获取连接
        jedis jedis = new jedis("localhost",6379);
        //2.存储操作
        jedis.hset("user","username","zhangsan");
        jedis.hset("user","age","22");
        jedis.hset("user","gender","male");
        //获取
        string user = jedis.hget("user","username");
        system.out.println(user);
        map<string,string> map = jedis.hgetall("user");
        set<string> keys = map.keyset();
        for(string key :keys){
            system.out.print(key);
            string value = map.get(key);
            system.out.println(":"+value);
        }
        //关闭连接
        jedis.close();
    }
    //list集合结构
    @test
    public void test3(){
        //获取连接
        jedis jedis = new jedis("localhost",6379);
        //2.存储操作
        jedis.lpush("username","a","b","c");//cba
        jedis.rpush("username","a","b","c");//abc
        //弹出
        string lpop1 = jedis.lpop("username");//c
        string rpop1 = jedis.rpop("username");//c
        system.out.println(lpop1);//c
        system.out.println(rpop1);//c
//        //范围获取
        list<string> list = jedis.lrange("username",0,-1);
        system.out.println(list);
        //关闭连接
        jedis.close();
    }
    //set集合
    @test
    public void test4(){
        //获取连接
        jedis jedis = new jedis("localhost",6379);
        //2.存储操作
        jedis.sadd("myset","a","b","c","c");//不可以重复
        //获取
        set<string> myset = jedis.smembers("myset");
        system.out.println(myset);
        //关闭连接
        jedis.close();
    }
    //sortedset集合
    @test
    public void test5(){
        //获取连接
        jedis jedis = new jedis("localhost",6379);
        //2.存储操作
        jedis.zadd("mysorteset",50,"张三");
        jedis.zadd("mysorteset",30,"李四");
        jedis.zadd("mysorteset",40,"王五");
        //获取
        set<string> mysorteset = jedis.zrange("mysorteset",0,-1);
        system.out.println(mysorteset);
        //关闭连接
        jedis.close();
    }
    //使用连接池
    @test
    public void test6(){
        //配置连接对象
        jedispoolconfig config = new jedispoolconfig();
        config.setmaxtotal(50);
        config.setmaxidle(50);
        //创建jedis连接池对象
        jedispool jedispool = new jedispool(config,"localhost",6379);
        //获取连接
        jedis jedis = jedispool.getresource();
        //存储数据
        jedis.set("hehe","heihei");
        //获取数据
        string s = jedis.get("hehe");
        system.out.println(s);
        jedis.close();
    }

    @test
    public void test7(){
        jedis jedis = jedispoolutils.getjedis();
        jedis.set("hello","world");
        string s = jedis.get("hello");
        system.out.println(s);
        jedis.close();
    }
}

配置jedis连接池工具类

package com.data.util;

import redis.clients.jedis.jedis;
import redis.clients.jedis.jedispool;
import redis.clients.jedis.jedispoolconfig;

import java.io.ioexception;
import java.io.inputstream;
import java.util.properties;

public class jedispoolutils {
    private static jedispool jedispool;//定义连接池对象
    //定义配置文件
    static{
        inputstream is = jedispoolutils.class.getclassloader().getresourceasstream("jedis.properties");
        properties pro =  new properties();
        try {
           pro.load(is);//把配置加载进入内存
        } catch (ioexception e) {
        }
        //获取参数,并且设置配置
        jedispoolconfig config = new jedispoolconfig();
        config.setmaxtotal(integer.parseint(pro.getproperty("maxtotal")));//参数需要int类型,传递进来的是字符串,需要转型
        config.setmaxidle(integer.parseint(pro.getproperty("maxidle")));
        //初始化jedispool
        jedispool = new jedispool(config,pro.getproperty("host"),integer.parseint(pro.getproperty("port")));
    }
    //创建jedispool工具类
    public static jedis getjedis(){
        return jedispool.getresource();//该方法返回jedis
    }
}