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中提供了依赖注入的概念,使得 ...
随机推荐
- 针对MySQL的MVCC多版本并发控制的一些总结
MVCC MVCC细节太多,我直接备忘一下总结: MVCC就是通过事务的ID与行数据的版本(修改事务的ID)进行比较(通过redo log可以回溯版本)得出哪些版本的行数据可见和不可见而实现的事务隔离 ...
- 之前见汤姆大叔 写过一系列的 js 深入理解 呢 很是感觉经典
最近要把这些给翻个遍 加油 js 隐式全局变量 读后感 1:js 没有变量名称是否重复定义的检查,在cshrp里有这样的检查, 没有变量名称重复的检查,这样 当变量名称 重复定义的时候 相同命名的变 ...
- 发现 一个业务管理系统 解决了 orm 和 前端框架 剩下的 是 业务逻辑 了 。 哈
解决了 orm 和 前端框架 剩下的 是 业务逻辑 了 . 哈 还有 各种 aop 组件 呢 . 大家 high 来 准备 用 fluent data 和 mysql 写一个 wcf 的 接口呢. ...
- 在动作方法中生成输出URL (Generating Outgoing URLs in Action Methods) |
- Client API Object Model - Form Context
FormContext 提供界面或者界面上控件的的引用. 比如说 quick view control, row in an editable grid 等等. Xrm.Page 和 getFormC ...
- Java多态之Father f=new Son();
成员变量静态方法看左边,非静态方法编译看左边,运行看右边. 左边Father f其实是定义了一个Father类的对象,而右边new Son()可以只理解为是一个重写了Father类方法的对象. 因此, ...
- 【WPF学习】第二十三章 列表控件
WPF提供了许多封装项的集合的控件,本章介绍简单的ListBox和ComboBox控件,后续哈会介绍更特殊的控件,如ListView.TreeView和ToolBar控件.所有这些控件都继承自Item ...
- Nginx搭建过程
https://www.cnblogs.com/gscq073240/articles/6773000.html
- linux--->linux下composer 安装
composer 安装 进入var/src目录中 下载composer安装包 curl -sS https://getcomposer.org/installer | php 设置全局访问 sudo ...
- php--->php打印格式化
php打印格式化 当我们PHP调试的时候,用var_dump 或 print_r打印json数据或array数组时,html页面没有换行显示,看到的内容一大堆,不好定位.输出前添加html的pre标签 ...
