Redis_day01

1. NoSql

1.1 NoSql是什么

NoSQL(不仅仅是SQL not only SQL),泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在处理web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,出现了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题;

(a) nosql 它是非关系型数据库

(b) nosql 解决网站里面 大数据和高并发的问题(SNS社交网络上面/电商/12306)

1.2 NoSql数据库的分类(特点)

Key-value(键值对形式)型NoSql数据库

2. redis的认识

(1) redis开源 高性能nosql数据库,数据可以存储在内存或磁盘上面

(2) Redis 主要key-value结构形式存储,redis底层支持各种类型的数据存储结构

包括 list set map(hash) string等

3. Redis特点

(1) 数据存储内存,速度比较快

(2) 支持类型比较多

string(字符串)、list(链表)、set(集合)、 zset(sorted set --有序集合)和hash(哈希类型)。

(3) 支持磁盘存储 -- 完成持久化操作

(4) 支持数据的过期

(5) 支持集群操作

(6) 支持订阅和发布

4. redis的使用场景

(1)redis使用最多的地方 就是缓存 --(内存最多)

(2)可以处理大数据量的计数问题 --(微博转发 点赞)

(3)实时的攻防系统

银行登录 (登出多少次 会锁定) --暴力破解(穷举法)

(4)有效期应用 -- 优惠劵

(5)自动去重应用 -- set

(6)队列的结构 -- (FIFO) (list存储) -->消息队列(RabbitMQ) --地铁

(7)消息订阅和发布

5. redis使用

5.1 安装

下载后直接解压即可

5.2 启动服务和客户端

5.3 对String的操作命令

set key value

get key

5.4 key的操作命令

keys *

expire key second

ttl key

5.5 list操作

lpush/rpush key value1/value2

lrange key start end

lindex key index

5.6 set操作

sadd key val1 /val2/val3

smembers key

srem key member

5.7 hash操作

hset key name value

hget key name

hmset key name1 key1 name2 key2

hmget key name1 name2

5.8 事务

multi  //标记一个事务块的开始。

exec   //执行所有事务块内的命令。

弱事务 : 日志

强事务 :同时成功 同时失败-- 金融数据

discard //取消事务,放弃执行事务块内的所有命令。

Redis的事务在执行exec指令时,才批量执行操作,没有回滚操作

5.9 订阅/发布

QQ群

SUBSCRIBE channel [channel ...] //订阅给定的一个或多个频道的信息。

PUBLISH channel message //将信息 message 发送到指定的频道 channel 。

新开一个客户端订阅tv频道

发布nihao!消息到tv频道

订阅tv频道的客户端可以收到nihao!消息

5.10 设置密码

1. 通过命令动态调整密码

CONFIG SET 命令可以动态地调整 Redis 服务器的配置而无须重启,重启后失效

CONFIG SET requirepass 123456 //将密码设置为123456

CONFIG SET requirepass "" //清除密码

AUTH 123456  //输入密码进行认证

2. 通过配置文件设置密码

在配置文件redis.widows.conf中增加一行代码

requirepass 123456

将密码123456设置到配置文件中,redis启动时加载该文件,即可启用密码

6 java代码操作redis

6.1 jar包

6.2 简单配置

public void testRedis() throws Exception {
//连接ip
String host = "127.0.0.1";
//连接端口
int port = 6379;
//超时时间
int timeout = 1000;
Jedis jedis = new Jedis(host, port, timeout); //执行操作
jedis.set("name", "艾瑞利亚");
System.out.println(jedis.get("name"));
//关闭连接
jedis.close();
}

简单连接

6.3 连接池连接

 public void testPool() throws Exception {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(10);
config.setMaxTotal(10);
//获取连接是测试连接是否畅通
config.setTestOnBorrow(true);
//连接ip
String host = "127.0.0.1";
//连接端口
int port = 6379;
//超时时间
int timeout = 1000;
JedisPool jedisPool = new JedisPool(config, host, port, timeout);
Jedis jedis = jedisPool.getResource();
jedis.set("name", "内瑟斯");
System.out.println(jedis.get("name")); //查询所有的key cmd命令key *
Set<String> keys = jedis.keys("*");
System.out.println(keys); //清空当前数据库
jedis.flushDB();
}

配置连接池连接

6.4 对list的操作

 public void testPoolList() throws Exception {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(10);
config.setMaxTotal(10);
//获取连接是测试连接是否畅通
config.setTestOnBorrow(true);
//连接ip
String host = "127.0.0.1";
//连接端口
int port = 6379;
//超时时间
int timeout = 1000;
JedisPool jedisPool = new JedisPool(config, host, port, timeout);
Jedis jedis = jedisPool.getResource();
jedis.lpush("students", "{name:张三}", "{age:35}", "{sex:男}");
List<String> students = jedis.lrange("students", 0, -1);
System.out.println(students);
}

对list的操作

6.5 对set的操作

 public void testPoolSet() throws Exception {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(10);
config.setMaxTotal(10);
//获取连接是测试连接是否畅通
config.setTestOnBorrow(true);
//连接ip
String host = "127.0.0.1";
//连接端口
int port = 6379;
//超时时间
int timeout = 1000;
JedisPool jedisPool = new JedisPool(config, host, port, timeout);
Jedis jedis = jedisPool.getResource();
jedis.flushDB();
jedis.sadd("students", "{name:张三}", "{age:35}", "{sex:男}");
Set<String> students = jedis.smembers("students");
System.out.println(students);
}

对set的

6.6 对hash的操作

 public void testPoolHash() throws Exception {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(10);
config.setMaxTotal(10);
//获取连接是测试连接是否畅通
config.setTestOnBorrow(true);
//连接ip
String host = "127.0.0.1";
//连接端口
int port = 6379;
//超时时间
int timeout = 1000;
JedisPool jedisPool = new JedisPool(config, host, port, timeout);
Jedis jedis = jedisPool.getResource();
jedis.flushDB();
//方式一
jedis.hset("student:1", "name", "德莱厄斯");
System.out.println(jedis.hget("student:1", "name")); //方式二 map方式(键值都必须为string类型)
Map<String, String> map = new HashMap();
map.put("name", "德莱文");
map.put("age", "32");
map.put("sex", "男");
jedis.hmset("student01", map);
List<String> student01 = jedis.hmget("student01", "name", "age", "sex");
System.out.println(student01);
}

对hash操作的代码

6.7 对sort(排序)的操作

public void testPoolSort() throws Exception {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(10);
config.setMaxTotal(10);
//获取连接是测试连接是否畅通
config.setTestOnBorrow(true);
//连接ip
String host = "127.0.0.1";
//连接端口
int port = 6379;
//超时时间
int timeout = 1000;
JedisPool jedisPool = new JedisPool(config, host, port, timeout);
Jedis jedis = jedisPool.getResource();
jedis.flushDB();
//对字符数字操作
jedis.lpush("nums", "32", "12", "90", "35", "52");
System.out.println(jedis.sort("nums")); //排序规则
SortingParams params = new SortingParams();
//倒序 从大到小
params.desc();
System.out.println(jedis.sort("nums", params)); //对英文操作
jedis.lpush("english", "java", "php", "python", "web");
SortingParams params1 = new SortingParams();
//根据ascall值排序
params1.alpha();
//正序 从小到大
params.asc();
System.out.println(jedis.sort("english", params1));
}

对sort的操作代码

6.8 对Transaction(事务)的操作

 public void testPoolTransaction() throws Exception {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(10);
config.setMaxTotal(10);
//获取连接是测试连接是否畅通
config.setTestOnBorrow(true);
//连接ip
String host = "127.0.0.1";
//连接端口
int port = 6379;
//超时时间
int timeout = 1000;
JedisPool jedisPool = new JedisPool(config, host, port, timeout);
Jedis jedis = jedisPool.getResource();
//开启事务
Transaction multi = jedis.multi();
multi.set("name", "tom");
multi.set("age", "24");
multi.incr("name");
multi.incr("age");
//提交事务
List<Object> exec = multi.exec();
//打印事务执行结果
System.out.println(exec); System.out.println(jedis.get("age")); //关闭连接
jedis.close();
//销毁连接池
jedisPool.destroy();
}

对事物操作的代码

7 redis持久化

为什么需要持久化?

防止数据丢失

怎么持久化?

磁盘存储 和 内存磁盘

redis如果要实现磁盘存储(做持久化过程) 两种方案

rdb方式 : 在一个时间点内 保存一个数据的快照

save 1 1 1s钟之内至少有一个变化的时候,做持久化

1s 之内的数据 操作时候,丢失,不能做持久化

aof方式 :

追加执行的配置文件的方式 (配置文件就有操作的命令)

redis_入门的更多相关文章

  1. redis_入门网址

    redis中文网: http://www.redis.cn/ 可以 试用 以及 下载 redis百度百科:http://baike.baidu.com/link?url=MEkE5MpGAOfJ7ci ...

  2. Redis入门指南之二(安装及配置)

    本节主要内容 1. 前言2. redis安装3. 启动和停止Redis 1. 前言 安装Redis需要知道自己需要哪个版本,有针对性的安装,比如如果需要redis GEO这个地理集合的特性,那么red ...

  3. redis入门指南书中概要

    一.简介 1.redis是一个开源的.高性能的.基于键值对的缓存和存储系统,通过提供多种键值数据类型适应不同场景下的缓存和存储需求,同时redis高级功能能胜任消息队列.任务队列等不同角色. 2.内存 ...

  4. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

  5. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  6. Oracle分析函数入门

    一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...

  7. Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数

    上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...

  8. Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数

    上一篇:Angular2入门系列教程-服务 上一篇文章我们将Angular2的数据服务分离出来,学习了Angular2的依赖注入,这篇文章我们将要学习Angualr2的路由 为了编写样式方便,我们这篇 ...

  9. Angular2入门系列教程4-服务

    上一篇文章 Angular2入门系列教程-多个组件,主从关系 在编程中,我们通常会将数据提供单独分离出来,以免在编写程序的过程中反复复制粘贴数据请求的代码 Angular2中提供了依赖注入的概念,使得 ...

随机推荐

  1. SSM框架整合中,不报错,数据库只能存ID进去问题解决

    嗯,这个错误其实不能算错误,是粗心造成的,在配置文件中对于传递的参数没有写#字符,直接写的的属性名.居然错了两次,哎!!! 嗯,还有一个问题,在动态SQL中,if标签中test属性中判断时,不能用大写 ...

  2. Python入门小建议

    "java从心"正式更名"KEN DO EVERTHING".Ken(Can) Do Everything,无所不能 Believe youseft then ...

  3. IntelliJ IDEA编辑文件的时候CPU飙高问题的解决

    原文地址:https://www.javatang.com/archives/2018/04/26/25582403.html 上篇文章中说明了解决IntelliJ IDEA中文输入法无提示的问题,最 ...

  4. (转)调皮的location.href

    来自 wooyun'drops --->呆子不开口 0x00 背景 随着水瓶月的到来,在祖国繁荣昌盛的今天,web系统的浏览器端也越来越重,很多的功能逻辑都放在了js中,前端的漏洞也越来越多. ...

  5. ASP.NET MVC4 使用UEditor富文本

    原帖:http://user.qzone.qq.com/369175376/infocenter?ptlang=2052     第一步:先到http://ueditor.baidu.com/webs ...

  6. 异想家IDEA的偏好配置

    最好将配置文件位置改为软件安装目录下,因为只有自己用,易于便携. 修改bin目录下的idea.properties,注释#去掉修改idea.config.path.idea.system.path配置 ...

  7. linux下svn安装和使用(centos)

    1.安装svn 本地测试环境 centos6.5 # yum安装 yum -y install subversion # 查看svn版本 svnserve --version # 建立版本库目录 mk ...

  8. CTF--HTTP服务--暴力破解

    开门见山 1. 扫描靶机ip,发现PCS 192.168.1.103 2. 用nmap扫描靶机开放服务和服务版本 3. 再扫描全部信息 4. 用nikto探测敏感文件 5. 打开敏感网页发掘信息 6. ...

  9. Docker | Mac 通过 Docker 安装 Oracle

    Docker | Mac 通过 Docker 安装 Oracle 前言: Oracle 10g 以后就不支持 Mac 版本,因此 Mac 用户需要安装的话可以通过虚拟机或者 Docker 1.在 do ...

  10. AS中使用真机调试时出现解析错误的问题

    时间:2019/12/8 今天使用usb调试程序时手机上出现了解析错误的问题,其实这个问题很简单,主要可能是你想要调试的程序的最低版本号大于你手机的安卓版本号的原因,只需要修改下面这个地方: buil ...