【Java学习笔记(四十一)】之Redis,NOSQL,Jedis的介绍

本文章由公号【开发小鸽】发布!欢迎关注!!!


老规矩–妹妹镇楼:

一. Redis

(一) 概述

       Redis 高性能的NOSQL系列的菲关系型数据库。Redis通过提供多种键值数据类型来适应不同场景下的存储需求。

(二) Redis支持的数据类型

  1. 字符串类型 String

  2. 哈希类型 hash

  3. 列表类型 list

  4. 集合类型 set

  5. 有序集合类型 sortedset

(三) Redis的应用场景

  1. 缓存(数据查询,短连接,内容)

  2. 任务队列(秒杀,抢购)

  3. 应用排行榜

  4. 数据过期处理

  5. 分布式集群架构中的session分离

(四) 安装与使用

1. Redis下载

       大陆地区请到Redis中文网http://www.redis.net.cn/,下载redis。

2. 使用

       解压下载的压缩包,可以得到一些文件:

       redis.windows.conf是配置文件

       redis-cli.ext是redis的客户端

       redis-server.exe是redis的服务器端

       要使用redis,,先要打开服务器端,再打开客户端连接到服务器。

(五) Redis的数据结构

       Redis存储的是键值对的数据,key都是字符串,value有5种不同类型:

       字符串类型 String

       哈希类型 hash

       列表类型 list

       集合类型 set

       有序集合类型 sortedset

(六) Redis的命令操作

1. 字符串类型String
(1) 存储

       set key value
如:set age 22

(2) 获取

       get key
如:get age

(3) 删除

       del key
如:del age

2. 哈希类型 hash
(1) 存储

       hset key field value

如:field value是一个键值对

hset user name 22

(2) 获取

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

如:hget user name

       hgetall key获取所有的field和value

如:hgetall user

(3) 删除

       hdel key field

如:hdel user name

3. 列表类型list
(1) 添加

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

       lpush key value 将元素添加到列表的左边

       rpush key value 将元素添加到列表的右边
如:

lpush mylist 1
rpush mylist  10

(2) 获取

       可以通过一个范围获取元素:

       lrange key start end
如:

lrange mylist 1 2

(3) 删除

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

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

4. 集合类型set

       set集合不允许有重复的元素。

(1) 存储

       sadd key value
如:

sadd age 22

(2) 获取

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

如:

smembers age

(3) 删除

       srem key value, 删除set集合中的某个元素

srem age 22

5. 有序集合类型sortedset

       不仅不允许重复元素,且元素有序

(1) 存储

       zadd key score value, 通过score分数来排序

如:

zadd age 80 22

(2) 获取

       zrange key start end

如:

zrange age 0 -1

(3) 删除

       zrem key value

如:

zrem age 22

6. 通用命令
(1) keys *

       查询所有的键

(2) type key

       获取键对应的value的类型

(3) del key

       删除指定的key value

(七) 持久化

1. 概述

       Redis是一个内存数据库,当Redis服务器重启或关闭时,数据就会丢失,我们需要将Redis内存中的数据持久化到硬盘上。

2. Redis持久化机制
(1) RDB

       Redis持久化的默方式,不需要进行配置,在一定的间隔时间中,会自动检测key的变化情况,然后持久化数据。

       想要修改RDB的间隔时间,可以到conf配置文件中进行修改

找到如下的字段:

save 900 1		:至少一个key变化时900s后持久化
save 300 10	:至少10key变化时300s后持久化
save 60 10000 :至少10000key变化时,60s后持久化

       通过注释来阅读并修改。修改后,重启服务器,并制定配置文件名称。

       cd 到redis的文件夹,执行redis-server.exe命令并 添加 配置文件,如:

redis-server.exe redis.windows.conf

(2) AOF

       通过日志记录的方式,可以记录每一条命令的操作,在执行每一条Redis命令后,都会持久化数据。

       同样的,我们可以在conf配置文件中修改AOF的配置:

appendonly no 表示着关闭AOF
appendonly yes 表示着开启AOF

appendfsync always 表示着每一次操作有持久化
appendfsync everysec 表示这每隔一秒进行一次持久化
appendfsync no	 表示这不进行持久化

二. NOSQL

(一)概述

       Not Only SQL,泛指非关系型数据库。随着Web2.0的兴起,传统的关系型数据库对于超大规模与高并发的Web2.0网站已经显得力不从心了。菲关系型数据库可以用作缓存来解决大数据的应用难题。由于NOSQL将数据存储在缓存中,查询速度会非常快。且NOSQL的存储格式有很多种,如key ,value,文档,图片。

(二)NOSQL与关系型数据库的优劣

1. 菲关系型数据库的优势

       (1) 性能NOSQL是基于键值对的,可以想象成表中的主键和之的对应关系,不需要经过SQL层的解析,性能很高。

       (2) 可扩展性也是基于键值对,数据之间没有耦合性,所有容易扩展。

2. 关系型数据库的优势

       (1) 复杂查询可以用SQL语句方便地在一个表以及多个表之间做复杂查询。

       (2) 事务支持使得对于安全性能很高的数据访问得以实现。


三. Jedis

(一) 概述

       如同我们之前使用JDBC连接MySql数据库一样,Jedis用于Java操作Redis数据库。

(二) 使用步骤

  1. 导入jedis的jar包

  2. 通过Java编写程序操作Redis数据库

package redis;

import org.junit.Test;
import redis.clients.jedis.Jedis;

/**
 * jedis的测试类
 */
public class RedisTest {

    @Test
    public void test1(){
        //获取连接
        Jedis jedis = new Jedis("localhost", 6379);
        //操作
        jedis.set("username", "hehe");
        //关闭连接
        jedis.close();

    }

}

(三) 字符串的操作

       Jedis中的方法名与Redis的操作是相同的。

       set存储,get获取,setex存储有时间限制的键值对。

Jedis jedis = new Jedis();
jedis.set(“username”, “hehe”);
String username = jedis.get(“username”);
jedis.setex(“activecode”, 20, “hehe”);	//20秒后删除
jedis.close();

(四) 哈希类型的操作

       hset, hget。

jedis.hset(“user”, “name”, “eee”);
jedis.hset(“user”, “age”,23);

String name – jedis.hget(“user”, “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);
}

(五) 列表list的操作

       lpush, rpush, lpop, rpop

jedis.lpush(“mylist”, “a”);
jedis.rpush(“mylist”, “b”);
List<String> mylist = jedis.lrange(“mylist”, 0, -1);

(六) 集合set的操作

       sadd,smembers

jedis.sadd(“myset”, “java”);
jedis.sass(“myset”, “c”);
Set<String> myset = jedis.smembers(“myset”);

(七) Jedis连接池

       Jedis内置了连接池JedisPool,使用方法非常简单:

       首先创建JedisPool连接池对象,再调用getResource()方法获取Jedis连接。

JedisPool jedisPool = new JedisPool();
Jedis jedis = jedisPool.getResource();
jedis.set(“name”, “hehe”);
jedis.close();

       可以通过配置对象来配置JedisPool。在创建JedsiPool连接池对象时要将该配置对象传进去。

JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(50);
config.setMaxIdle(10);
JedisPool jedisPool = new JedisPool(config, “localhost”, 6379);

       也可以通过设置一个RedisPoolUtils工具类专用于连接Redis数据库以及通过redis.properties配置文件来配置RedisPool连接池。

package utils;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.util.JedisURIHelper;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class JetisUtils {

    private static JedisPool jedisPool;
    static {
        //读取配置文件
        InputStream is = JetisUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
        //创建Properties对象
        Properties pro = new Properties();
        //冠梁文件
        try {
            pro.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //获取数据,设置到JedisPoolConfig中
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(Integer.parseInt(pro.getProperty("maxTotal")));
        config.setMaxIdle(Integer.parseInt(pro.getProperty("maxIdle")));

        //初始化JedisPool
        jedisPool = new  JedisPool(config, pro.getProperty("host"), Integer.parseInt(pro.getProperty("port")));


    }

    public static Jedis getJedis(){
        return jedisPool.getResource();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值