Redis 基础
文章目录
Redis简介
NoSQL
NoSQL:即not-onlySQL(泛指非关系型数据库),作为关系型数据库的补充。
作用:应对基于海量用户和海量数据前提下的数据处理问题。
特征:
-
可扩容,可伸缩
-
大数据量下高性能
-
灵活的数据模型
-
高可用
常见的NoSQL数据库:
- Redis
- memcache
- HBase
- MongoDB
Redis
概念:Redis(REmote DIctionaryServer)是用C语言开发的一个开源的高性能键值对(key-value)数据库。
特征:
- 数据间没有必然的关联关系
- 内部采用单线程机制进行工作
- 高性能。官方提供测试数据,50个并发执行100000个请求,读的速度是110000次/s,写的速度是80000次/s
- 多数据类型支持
- 字符串类型 string
- 列表类型 list
- 散列类型 hash
- 集合类型 set
- 有序集合类型 sorted_set
- 持久化支持。可以进行数据灾难恢复
Redis的应用
- 为热点数据加速查询(主要场景),如热点商品、热点新闻、热点资讯、推广类等高访问量信息等。
- 任务队列,如秒杀、抢购、购票排队等。
- 即时信息查询,如排行榜、访问量统计、公交到站信息、在线人数信息(聊天室、网站)。
- 时效性信息控制,如验证码控制、投票控制。
- 分布式数据共享,如分布式集群架构中的session分离。
- 消息队列
- 分布式锁
使用Redis
Redis核心文件:
- redis-server.exe 服务器启动命令
- redis-cli.exe 命令行客户端
- redis.windows.conf redis核心配置文件
- redis-benchmark.exe 性能测试工具
- redis-check-aof.exe AOF文件修复工具
- redis-check-dump.exe RDB文件检查工具(快照持久化文件)
启动Redis
- 通过启动redis-server.exe启动redis
命令行工具使用Reids
-
功能性命令
-
增加数据:设置key,value数据
-
//命令 set key value //范例 set name redis
-
-
信息查询:根据key查询对应的value,如果不存在返回(nil)
-
//命令 get key //范例 get name
-
-
删除数据:根据key删除指定数据,执行成功会返回integer,删除成功会返回1,失败或不存在返回0
-
//命令 del key //范例 del name
-
-
-
清除屏幕信息
-
clear
-
-
帮助信息查询
-
//命令 help 命令名 help @组名 //范例 help set 可查看set的详细用法 help @string 可查看string的所有命令
-
-
退出指令
-
quit exit <esc>
-
Redis数据类型
string类型
-
存储的数据:单个数据,最简单的数据存储类型,也是最常用的数据存储类型
-
存储数据的格式:一个存储空间保存一个数据
-
存储内容:通常使用字符串,如果字符串以整数形式展示,可以作为数字操作使用
Redis存储空间 key1---张三 key2---李四
hash类型
-
新的存储需求:对一系列的数据进行编组,方便管理,典型应用就是存储对象
-
需要的存储结构:一个存储空间保存多个键值对数据
-
hash的value只能是string,不可以嵌套
Redis存储空间 field1 value key field2 value field3 value
list类型
- 数据存储需求:存储多个数据,并对数据进入存储空间的顺序区分
- 需要的存储结构:一个存储空间保存多个数据,且通过数据可以体现进入顺序
- list类型:保存多个数据,底层使用双向链表结构实现
- list类型最好使用右进左出的顺序
- 一般用在消息队列,日志打印等
set类型
- 新的存储需求:存储大量的数据,在查询方面提供更高的效率
- 需要的存储结构:能够保存大量的数据,搞笑的内部存储机制,便于查询
- set类型:与hash存储结构完全相同,仅存键,不存值,并且值是不允许重复的
sorted_set类型
- 新的存储需求:数据排序有利于数据的有效展示,需要提供一种可以根据自身特征进行排序的方式
- 需要的存储结构:新的存储模型,可以保存可排序的数据
- sorted_set类型:在set的存储结构基础上添加可排序字段
- sorted_set是不允许重复的,反复插入会被覆盖,要修改score可通过zincrby
Java连接redis
引入jedis依赖
- 也可以引入jar包来使用,我这里使用的是spring boot的pop文件引入
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
使用Redis
- 通过Jedis自带的连接池获取连接
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public class JedisUtil {
private static JedisPool jp=null;
static {
JedisPoolConfig jpc=new JedisPoolConfig();
//设置最大链接数
jpc.setMaxTotal(30);
//设置活动链接数
jpc.setMaxIdle(10);
String host="127.0.0.1";
int port=6379;
jp=new JedisPool(jpc,host,port);
}
public static Jedis getJedis() {
return jp.getResource();
}
}
- 开始使用redis
import redis.clients.jedis.Jedis;
public class Test {
public static void main(String[] args) {
//获取redis连接
Jedis jedis = JedisUtil.getJedis();
//set一个数据
jedis.set("name","123");
System.out.println(jedis.get("name"));
//用完记得关闭
jedis.close();
//最终打印结果 123
}
}