首页 > 数据库 >day23 --> (redis)

day23 --> (redis)

时间:2022-12-05 01:00:30浏览次数:70  
标签:-- redis day23 获取 jedis value key Jedis

Redis : 

1.概念:redis 是一款高性能的NOSQL系列的非关系型数据库

2.下载安装:

1、官网:https://redis.io

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

3.解压可以直接使用:

redis.windows.conf : 配置文件

redis-cli.exe : redis 的客户端

redis-server.exe : redis 服务器端

3.命令操作

1、redis 的数据结构:

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

value 的数据结构 : 

(1)、字符串类型 :string

(2)、哈希类型 hash : map格式

(3)、列表类型 list :linkedList格式【链表】

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

(5)、有序集合类型 sortedset :排序、元素不重复

 

2.字符串类型:string

1、存储:set key value

set username zhangsan

2、获取:get key

get username    --> "zhagnsan"

3、删除:del key

del username

3.哈希类型 hash

1、存储 :hset key field value

hset myhash username lisi

2、获取 :hget key field

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

hget myhash username

hgetall key : 获取所有的field和value

hgetall myhash

3、删除 :hdel key field

hdel myhash username

4.列表类型 list : 可以添加一个元素到列表的头部(左边)或者尾部(右边)

 

1、添加:

1. lpush key value : 从元素加入到列表的左边

lpush mylist a

lpush mylist b 

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

rpush mylist c

2、获取:

1. lrange key start end : 范围获取

lrange mylist 0 -1    --> "b","a","c"

3、删除:

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

lpop mylist --> "b" 【"a","c"】

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

rpop mylish --> "c"【"a"】

5.集合类型 set : 不允许重复元素(无序)

1.存储 :sadd key value 

sadd myset a b c d

2.获取 :smembers key : 获取 set 元素集合中所有元素

smembers myset  --> "a","b","d","c"

3.删除 : srem key value : 删除 set 集合中的某个元素

srem myset a  --> "b","d","c"

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

1、存储 :zadd key score value : 【value:数据,score:分数,将来会按照score(double类型) 排序 value】

zadd mysort 60 zhangsan

zadd mysort 50 lisi

zadd mysort 80 wangwu 

2、获取 :zrange key start end 

zrange mysort 0 -1   -->  【"lisi","zhangsan","wangwu"】

获取值带上value :zrange mysort 0 -1 withscors   -->  【"lisi","50","zhangsan","60","wangwu","80"】

3、删除 :zrem key value

zrem mysort lisi   -->   【"zhangsan","wangwu"】

--------------------------------------------------------------------------------

ps : zadd mysort zhangsan 600  --> 【"wangwu","zhangsan"】, 即:如果添加的键名一样但是 score 不一样,则会根据新添加的键名的 score 进行排序

7.通用命令

1.key * : 查询所有的键

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

3.del key :删除指定的 key value

4.持久化

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

 2.redis 的持久化机制 :

1.RDB【推荐使用】 : 默认方式,不需要进行配置,默认就使用这种机制

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

1.编辑 redis.windows.conf 文件

 

 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

eg : 900秒(15分钟)之后有一个 key 发生变化就持久化一次

2.重新启动 redis 服务器并指定配置文件名称 : redis-server.exe redis.windows.conf

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

1.编辑 redis.windows.conf 文件

【默认关闭AOF】 ,把 no 更改为 yes 【开启AOF】

 

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

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

no : 不进行持久化 【redis就相当于非常大的一个 map 集合】

 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

步骤:修改配置文件 --> ,然后从命令行以配置文件的方式启动redis服务器 : redis-server.exe redis.windows.conf,会生成一个 .aof 的文件,此后的数据将会随着陪着文件的更改从而【每次操作 || 每一秒 || 从不】持久化一次数据

5. Java 客户端 Jedis 

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

使用步骤:

1.下载 Jedis 的 jar 包

 

2.使用

 

        //1、获取连接
        Jedis jedis = new Jedis("localhost",6379);
        //2、操作
        jedis.set("username","zhangsan");
        //3、关闭连接
        jedis.close();

 

 

 

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

(1)字符串类型 string 

get 

set

        //1、获取连接
        Jedis jedis = new Jedis(); //如果使用空参构造,默认值 "localhost",6379 端口
        //2、存储
        jedis.set("username","zhangsan");
        //获取
        String username = jedis.get("username");
        System.out.println(username);

        //可以使用setex() 方法可以指定过期时间的 key -- value
        //将 activecode : hehe 键值对存入redis,并且20秒后自动删除该键值对
        jedis.setex("activecode",20,"hehe");

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

 

(2)哈希类型 hash : map 格式

hset 

hget / hgeall

        //1、获取连接
        Jedis jedis = new Jedis(); //如果使用空参构造,默认值 "localhost",6379 端口
        //2、存储
        jedis.hset("user","name","lisi");
        jedis.hset("user","age","23");
        jedis.hset("user","gender","male");
        //获取 hash
        String name = jedis.hget("user","name");
        //System.out.println(name);

        //获取 hash 的所有 map 中的数据
        Map<String,String> user = jedis.hgetAll("user");
        Set<String> keySet = user.keySet();
        for (String key : keySet) {
            String value = user.get(key);
            System.out.println(key + "--" + value);
        }

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

 

(3) 列表类型 list : linkedList 格式,支持重复元素

lpush / rpush\

lpop / rpop

lrange start end : 范围获取

    //list的操作
    @Test
    public void test4(){
        //1、获取连接
        Jedis jedis = new Jedis(); //如果使用空参构造,默认值 "localhost",6379 端口
        //2、存储
       jedis.lpush("mylist","a","b","c"); // c b a
       jedis.rpush("mylist","a","b","c"); // a b c

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

        //list弹出
        String ele1 = jedis.lpop("mylist"); //左边弹出
        System.out.println(ele1);
        String ele2 = jedis.rpop("mylist");//右边弹出
        System.out.println(ele2);

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

 

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

sadd

smembers : 获取所有数据

        //1、获取连接
        Jedis jedis = new Jedis(); //如果使用空参构造,默认值 "localhost",6379 端口
        //2、存储
        jedis.sadd("myset","java","php","c++");

        //获取
        Set<String> myset = jedis.smembers("myset");
        System.out.println(myset);

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

 

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

zadd

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

        //获取
        Set<String> mysortedset = jedis.zrange("mysortedset", 0, -1);
        System.out.println(mysortedset);

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

 

 Jedis 连接池 :JedisPool

使用 :

1.创建 JedisPool 连接池对象

2.调用方法 getResource()方法获取Jedis连接

        //拓展 :创建一个配置对象
        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();
    }

 

 Jedis连接池工具类:

/*
    1、加载配置文件,配置连接池的参数
    2、提供获取连接的方法
 */
public class JedisPoolUtils {
    private static JedisPool jedisPool;

    //加载配置文件
    static {
        //读取配置文件
        InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
        //创建Properties对象
        Properties properties = new Properties();
        //关联文件
        try {
            properties.load(is);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        //获取数据,设置到JedisPoolConfig中
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(Integer.parseInt(properties.getProperty("maxTotal")));
        config.setMaxIdle(Integer.parseInt(properties.getProperty("maxIdle")));
        //初始化JedisPool
        jedisPool = new JedisPool(config,properties.getProperty("host"),Integer.parseInt(properties.getProperty("port")));
    }

    //获取连接方法
    public static Jedis getJedis(){
        return jedisPool.getResource();
    }

}
    //Jedis连接池工具类使用
    @Test
    public void test8(){
        //通过连接池工具类获取
        Jedis jedis = JedisPoolUtils.getJedis();

        jedis.set("hello","world");

        //4、关闭 归还到连接池中
        jedis.close();
    }

 

 

 

 案例:

案例需求:

1.提供 index.html 页面,页面中有一个省份 下拉列表

2.当页面加载完成后,发送 Ajax 请求,加载所有省份

 案例代码提交至码云:点击跳转

 

 

 注意 :使用 redis 缓存一些不经常发生变化的数据

数据库的数据一旦发生改变,则需要更新缓存

数据库的的表执行增删改的相关操作【service对应方法】,需要将 redis 缓存数据清空,再次存入

 

标签:--,redis,day23,获取,jedis,value,key,Jedis
From: https://www.cnblogs.com/yumengqifei/p/16949646.html

相关文章