Redis数据库的安装与基本应用

Stella981
• 阅读 710

一:了解NoSQL

1:介绍:Nosql的全称是Not Only Sql,这个概念早起就有人提出,在09年的时候比较火。Nosql指的是非关系型数据库,而我们常用的都是关系型数据库。就像我们常用的mysql,sqlserver一样,这些数据库一般用来存储重要信息,应对普通的业务是没有问题的。但是,随着互联网的高速发展,传统的关系型数据库在应付超大规模,超大流量以及高并发的时候力不从心。而就在这个时候,Nosql得到的告诉的发展。

2:NOSQl与关系型数据库的区别:

(1)存储方式:关系型数据库是表格式的,因此存储在表的行和列中。他们之间很容易关联协作存储,提取数据很方便。而Nosql数据库则与其相反,他是大块的组合在一起。通常存储在数据集中,就像文档、键值对或者图结构。Redis就是以键值对方式存储。

(2)存储结构:关系型数据库预定义结构带来了可靠性和稳定性,但是修改这些数据比较困难。而Nosql数据库基于动态结构,使用与非结构化数据。因为Nosql数据库是动态结构,可以很容易适应数据类型和结构的变化。

(3)性能:关系型数据库维护了数据稳定性和一致性,而NoSQL存储面对海量数据的时候效率相比关系型数据库非常高。

(4)略

3:NoSql的四大分类

1.键值(Key-Value)存储,如Redis(优势:快速查询 劣势:存储数据缺少结构化)

2.列存储,如HBase(优势:快速查询,扩展性强 劣势:功能相对局限)

3.文档数据库,如mongoDB(优势:数据结构要求不严格 劣势:查询性能不高,确实统一查询的语法)

4.图形数据库,如InfoGrid(优势:利用图结构相关算法 劣势:需要对整个图做计算才能得到结果,不容易做分布式的集群方案)

二:Redis学习

1:简介:NoSQL(not only sql)数据库的一种,主要以键值(Key-Value)的形式来存储数据,支持的键值数据类型有

1 字符串类型String、

2 列表类型list、

3 有序集合类型zset、

4 散列类型hash、

5 集合类型set,

应用场景有缓存、排行榜、任务队列、网站访问统计、数据过期处理、分布式集群架构中的session分离。

2:安装:

2.1Linux下,解压安装,后台启动·······操作很简单,都是和其他软件安装基本一致。

2.2其实我们大部分的开发还是在window下的,在window下开发一定要用Redis来模拟测试,在window下安装更加简单

    2.2.1首先:官网下载window的安装包      https://github.com/MicrosoftArchive/redis/releases

    Redis数据库的安装与基本应用

2.2.2 将压缩包解压到你想要安装的文件夹【D:\Redis】

  按住Shift+右键,在此窗口打开命令行输入指令【redis-server redis.windows.conf】启动服务,显示如图

Redis数据库的安装与基本应用

  然后再开一个命令行窗口,还是在该目录下Shift+右键,然后输入如下指令【redis-cli.exe -h 127.0.0.1 -p 6379】【注意:在此过程中服务的命令行窗口不能关】

设置键值对 【set myKey abc】

取出键值对 【get myKey】如图,成功

 Redis数据库的安装与基本应用

三:使用Jedis操作Redis

1 简介:Jedis是Redis官方首选的JAVA客户端开发包

Jedis源码工程地址:

https://github.com/xetorthio/jedis

2:使用:想要使用Jedis必须加载jar包或者添加maven依赖。在pom.xml中添加如下语句

1 <dependency>
2     <groupId>redis.clients</groupId>
3     <artifactId>jedis</artifactId>
4     <version>2.9.0</version>
5     <type>jar</type>
6     <scope>compile</scope>
7 </dependency>

Jedis当然也支持连接池,连接池的好处我就不再缀述,我就说说怎么用:

首先将配置参数抽取出来写成redis.properties文件。例如:

 1 #*****************jedis连接参数设置*********************
 2 #redis服务器ip
 3 redis.ip=xxx.xxx.xxx.xxx
 4 #redis服务器端口号
 5 redis.port=6379
 6 #redis访问密码
 7 redis.passWord=123456
 8 #与服务器建立连接的超时时间
 9 redis.timeout=3000
10 #************************jedis池参数设置*******************
11 #jedis的最大活跃连接数
12 jedis.pool.maxActive=100
13 #jedis最大空闲连接数
14 jedis.pool.maxIdle=50
15 #jedis池没有连接对象返回时,等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。
16 #如果超过等待时间,则直接抛出JedisConnectionException
17 jedis.pool.maxWait=1500
18 #从池中获取连接的时候,是否进行有效检查
19 jedis.pool.testOnBorrow=true
20 #归还连接的时候,是否进行有效检查
21 jedis.pool.testOnReturn=true

书写Redis连接池工具类RedisPoolUtil,网上有其他版本的方式,其实实现的本质都是一样的

 1 import java.util.Properties;
 2 import redis.clients.jedis.Jedis;
 3 import redis.clients.jedis.JedisPool;
 4 import redis.clients.jedis.JedisPoolConfig;
 5  
 6 /**
 7  * Redis连接池工具类
 8  */
 9 public class RedisPoolUtil {
10     private static JedisPool jedisPool = null;
11     private static String redisConfigFile = "redis.properties";
12     //把redis连接对象放到本地线程中
13     private static ThreadLocal<Jedis> local=new ThreadLocal<Jedis>();
14     
15     //不允许通过new创建该类的实例
16     private RedisPoolUtil() {
17     }
18  
19     /**
20      * 初始化Redis连接池
21      */
22     public static void initialPool() {
23         try {
24             Properties props = new Properties();
25             //加载连接池配置文件
26             props.load(RedisPoolUtil.class.getClassLoader().getResourceAsStream(redisConfigFile));
27             // 创建jedis池配置实例
28             JedisPoolConfig config = new JedisPoolConfig();
29             // 设置池配置项值
30             config.setMaxTotal(Integer.valueOf(props.getProperty("jedis.pool.maxActive")));
31             config.setMaxIdle(Integer.valueOf(props.getProperty("jedis.pool.maxIdle")));
32             config.setMaxWaitMillis(Long.valueOf(props.getProperty("jedis.pool.maxWait")));
33             config.setTestOnBorrow(Boolean.valueOf(props.getProperty("jedis.pool.testOnBorrow")));
34             config.setTestOnReturn(Boolean.valueOf(props.getProperty("jedis.pool.testOnReturn")));
35             // 根据配置实例化jedis池
36             jedisPool = new JedisPool(config, props.getProperty("redis.ip"),
37                     Integer.valueOf(props.getProperty("redis.port")),
38                     Integer.valueOf(props.getProperty("redis.timeout")),
39                     props.getProperty("redis.passWord"));
40             System.out.println("线程池被成功初始化");
41         } catch (Exception e) {
42             e.printStackTrace();
43         }
44     }
45     
46     /**
47      * 获得连接
48      * @return Jedis
49      */
50     public static Jedis getConn() { 
51         //Redis对象
52         Jedis jedis =local.get();
53         if(jedis==null){
54             if (jedisPool == null) {    
55                 initialPool();  
56             }
57             jedis = jedisPool.getResource();
58             local.set(jedis);
59         }
60         return jedis;  
61     }
62     
63     //归还连接
64     public static void closeConn(){
65         //从本地线程中获取
66         Jedis jedis =local.get();
67         if(jedis!=null){
68             jedis.close();
69         }
70         local.set(null);
71     }
72     
73     //关闭池
74     public static void closePool(){
75         if(jedisPool!=null){
76             jedisPool.close();
77         }
78     }
79 }

 最后Test方法测试使用上述方法即可。

注意::::可能会连接超时失败,其实是防火墙的问题,到时候打开防火墙口,然后重启防火墙就OK了。

四:Redis的持久化方式

为了能够高速查询,Redis将数据几乎都在内存中,但缺点显而易见,如何将Redis的数据持久化下来呢!官方提供了两种方法:

1:RDB:在指定时间间隔内生成数据集的时间点快照,但要是在指定时间间隔没到就断电了,那就JJ了啊!

2:AOF:以日志的方式记录下每一步写操作指令,并在服务器启动时,通过执行这些命令来还原数据库。但是体积比较大,速度慢。

3:一般将两种联合起来使用,其实一般在redis.conf中都已配置好,但是你想改也没人拦得住你啊!

五:其他操作

1:Redis其实共可有16个数据库,由0到15编号,默认选择0号,用seclect关键字选择

2:数据库肯定少不了事务操作

开启事务:multi

回滚:discard

提交:exec

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
java如何操作非关系型数据库redis(
redis简单介绍:是一种Nosql数据库,Nosql全称是NotOnlySQL,是一种不同于关系型数据库的数据库管理系统设计方式。对NoSQL最普遍的解释是“非关系型的”,强调KeyValueStores和文档数据库的优点,而不是单纯的反对RDBMSSowhatcanIdowithJedis?All
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这