redis_入门
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_入门的更多相关文章
- redis_入门网址
redis中文网: http://www.redis.cn/ 可以 试用 以及 下载 redis百度百科:http://baike.baidu.com/link?url=MEkE5MpGAOfJ7ci ...
- Redis入门指南之二(安装及配置)
本节主要内容 1. 前言2. redis安装3. 启动和停止Redis 1. 前言 安装Redis需要知道自己需要哪个版本,有针对性的安装,比如如果需要redis GEO这个地理集合的特性,那么red ...
- redis入门指南书中概要
一.简介 1.redis是一个开源的.高性能的.基于键值对的缓存和存储系统,通过提供多种键值数据类型适应不同场景下的缓存和存储需求,同时redis高级功能能胜任消息队列.任务队列等不同角色. 2.内存 ...
- Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求
上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...
- ABP入门系列(1)——学习Abp框架之实操演练
作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...
- Oracle分析函数入门
一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...
- Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数
上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...
- Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数
上一篇:Angular2入门系列教程-服务 上一篇文章我们将Angular2的数据服务分离出来,学习了Angular2的依赖注入,这篇文章我们将要学习Angualr2的路由 为了编写样式方便,我们这篇 ...
- Angular2入门系列教程4-服务
上一篇文章 Angular2入门系列教程-多个组件,主从关系 在编程中,我们通常会将数据提供单独分离出来,以免在编写程序的过程中反复复制粘贴数据请求的代码 Angular2中提供了依赖注入的概念,使得 ...
随机推荐
- 【红外DDE算法】聊聊红外图像增强算法的历史进程(第一回)
宽动态红外图像增强算法综述回顾过去带你回顾宽动态红外图像增强算法的历史进程,历来学者的一步步革命(新的算法框架提出),一步步改革(改进优化),从简单粗暴到细致全面.正所谓是:改革没有完成时,只有进行时 ...
- CQBZOJ 【重庆市NOIP模拟赛】避难向导
题目描述 "特大新闻,特大新闻!全国爆发了一种极其可怕的病毒,已经开始在各个城市 中传播开来!全国陷入了巨大的危机!大量居民陷入恐慌,想要逃到其它城市以 避难!经调查显示,该病毒来自于C 市 ...
- OpenCV2.4.13+VS2013配置方法
先说一下vc几代表的对应版本: vc8 = Visual Studio 2005 vc9 = Visual Studio 2008 vc10 = Visual Studio 2010 vc11 = V ...
- COCOAPI for windows error!
refer this https://github.com/philferriere/cocoapi However, you may encounter a bug where you cannot ...
- springIOC源码接口分析(六):ResourceLoader
参考博客: https://www.cnblogs.com/jixp/articles/10702486.html 一 定义方法 Spring提供了ResourceLoader接口用于实现不同的Res ...
- vue项目使用keep-alive
作用: 在vue项目中,难免会有列表页面或者搜索结果列表页面,点击某个结果之后,返回回来时,如果不对结果页面进行缓存,那么返回列表页面的时候会回到初始状态,但是我们想要的结果是返回时这个页面还是之前搜 ...
- Android Studio中Gradle sync failed
问题:Android Studio中更新同步Gradle 失败 Gradle sync failed: Could not find com.android.tools.build:gradle:3. ...
- Hibernate(四)
==================================投影(查询)=============================投影查询:查询一个持久化类的一个或多个属性值 1.将每条 ...
- ATL的GUI程序设计(1)
from:http://blog.titilima.com/atlgui-1.html 第一章 不能免俗的"Hello, World!" 在这一章里,就像所有的入门级教程一样,我也 ...
- BZOJ 1601 [Usaco2008 Oct]灌水 (建图+mst)
题意: 300个坑,每个坑能从别的坑引水,或者自己出水,i从j饮水有个代价,每个坑自己饮水也有代价,问让所有坑都有谁的最少代价 思路: 先建一个n的完全图,然后建一个超级汇点,对每个点连w[i],跑m ...