Redis简介
- 完全开源免费的高性能的key-value数据库。
- 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进
行使用; - 不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储;
- 支持数据的备份,即master-slave模式的数据备份;
- 性能极高,Redis能读的速度是110000次/s,写的速度是81000次/s;
- Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来;
-
支持publish/subscribe,通知, key过期等等特性。
Redis作用
- cache:做mysq|的缓存,从mysq|l读出来的数据,可以缓存到redis用于应用的访问。
- message broker:先把数据存到redis,到了一定阶段再保存到mysql
Redis缓存与CDN缓存的区别
- redis的缓存:redis是一 个服务, 把数据保存在内存中,根据redis协议,可以高速访问
- cdn缓存:cdn缓存的网页和图片,所以保存的是文件。通常使用nginx+nginx cache机制把文件放到内存中。接受http协议访问。他服务于文件,没法服务数据结构存储,比如无法保存一个数组或者词典。cdn是缓存文件,而不是数据库。
- 共同的特征:都充分利用了内存,把数据尽量放到内存中。只是存储的内容不同,服务的方式不同。
Redis安装
- 进入下载页:https://github.com/microsoftarchive/redis/releases
-
将下载好的文件解压,将文件夹重新命名为Redis,此文件只需解压无需安装
Redis使用
-
打开一个cmd窗口使用cd 命令切换目录到安装目录
-
运行
redis-server.exe redis.windows.conf
开启服务
如果遇到如下报错,解决方案:
win+R
然后输入services.msc
,调出Windows服务,
然后找到Redis,右键手动停止就好
- 另启一个cmd窗口,原来的不要关闭,不然就无法访问服务端,切换到redis目录下运行:
redis-cli.exe -h 127.0.0.1 -p 6379
基本数据结构
String:是二进制安全的,意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象,最大能存储512MB
Hash:—个string类型的key和value的映射表,hash特别适合用于存储对象,存储232-1键值对(40多亿)。
List:按照插入顺序排序,你可以添加一个元素到列表的头部(左边)或者尾部(右边)。可存储232-1元素(每个列表可存储40多亿)
Set:无序集合,通过哈希表实现的,所以添加,删除,查找的复杂度都是0(1)。
Sorted Set:有序集合每个元素都会关联—个double类型的分数,redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。
各个数据类型的应用场景
基本使用
-
String:
SET key member
:设置值;GET key
:获取值
-
Hash:
HMSET key field1 "Hello" field2 "World"
:设置值;HGET/HGETALL key field1
:获取值
-
List:
lpush key member
:创建列表;lrange key 0 10
:获取列表,前后数字代表列表开始和结尾的索引
-
Set:
sadd key member
:创建集合;smembers key
:获取集合的值
-
Sorted Set:
zadd key score member
:创建;ZRANGEBYSCORE key 0 1000
:获取
JAVA使用Redis引入依赖
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artiftactId>
<version>3.1.0</version>
</dependency>
Java使用Redis-创建Jedis实例
//连接本地的 Redis服务
Jedis jedis = new Jedis ("localhost") ;
jedis.auth("insane") ; /
此处为你设置的密码
System.out.println("连接成功");
//查看服务是否运行
System.out.println("服务正在运行: "+jedis.ping()) ;