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. OAuth2.0的那点荒唐小秘密 -几个简单概念和原理

    OAuth2.0这个名词你是否在项目中时常听到呢?是否觉得好像懂,又好像不太懂呢? 最近一直想写篇关于OAuth2.0的东西,记录下我的学习与感悟,然各种理由的拖延,直到今日才静下心来写下这篇博客.当 ...

  2. 洛谷P3645 [APIO2015]雅加达的摩天楼

    题目描述 印尼首都雅加达市有 N 座摩天楼,它们排列成一条直线,我们从左到右依次将它们编号为 0 到 N − 1.除了这 NN 座摩天楼外,雅加达市没有其他摩天楼. 有 M 只叫做 “doge” 的神 ...

  3. [洛谷P3254] [网络流24题] 圆桌游戏

    Description 假设有来自m 个不同单位的代表参加一次国际会议.每个单位的代表数分别为ri (i =1,2,--,m). 会议餐厅共有n 张餐桌,每张餐桌可容纳ci (i =1,2,--,n) ...

  4. 资源| 学习视频库-永久有效,持续更新!附赠java面试汇总

    每天进步一丢丢,连接梦与想 我们总是羡慕他人的光芒,却忘记自己也会发光 声明 资源来自于网络,小编只是资源的搬运工,若有侵权,联系小编即删. 期待已久的学习视频库来啦! 经过小编多日整理,整理了1.5 ...

  5. Mac 查看端口占用情况及杀死进程

    查看端口占用情况命令 sudo lsof -i :9000 冒号后面就是你需要查看的端口号. TheEternityZhang-MacBook:project zhtony$ sudo lsof -i ...

  6. Xen+OpenQRM快速部署

    一.选择系统平台 a)   Ubuntu-11.10-server-amd64 二.Xen安装 a)   Xen安装 # apt-get -y install xen-hypervisor-4.1-a ...

  7. Unity SurfaceShader详解

    声明:文章主要是总结手游开发的经验,只涉及到了前向渲染.未涉及延迟渲染. Unity的Surface Shader本质上就是VS/PS.只不过Unity经过精心设计,将shader划分为了几个关键部分 ...

  8. C#数字图像处理(十四)击中击不中变换 (Hit-miss)

    击中击不中变换定义 击中击不中变换(HMT)需要两个结构元素B1和B2,合成一个结构元素对B=(B1,B2) 一个用于探测图像内部,作为击中部分;另一个用于探测图像外部,作为击不中部分.显然,B1和B ...

  9. Python中随机数的生成

    在Python中要实现随机数的生成,需要使用random模块中randint方法. 其具体实现方法如下: import random a = random.randint(1,20) #(1,20)为 ...

  10. Java Swing图形界面开发

    本文转自xietansheng的CSDN博客内容,这是自己见过的最通俗易懂.最适合快速上手做Java GUI开发的教程了,这里整合一下作为自己以后复习的笔记: 原文地址:https://blog.cs ...