一、部署redis
1、下载Windows redis,并解压。
2、进入cmd,把目录指向redis解压的目录。
3、输入命令 redis-server redis.windows.conf ,启动redis。如下显示,表示启动成功。
4、 打开redis目录,双击redis-cli.exe 运行一个客户端。
5、设置redis服务。进入cmd,把目录指向redis解压的目录,输入命令 redis-server --service-install redis.windows-service.conf --loglevel verbose 。
6、设置redis服务成功。
二、redis简介
1、redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String)、 哈希(Map)、列表(list)、 集合(sets) 和 有序集合(sorted sets)等类型。
2、redis 三个特点:(1)redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
(2)redis不仅仅支持简单的key-value类型的数据,同时还提供list、set、zset、hash等数据结构的存储。
(3)redis支持数据的备份,即master-slave模式的数据备份。
3、redis 优势
(1)性能极高 ---Redis能读的速度是110000次/s,写的速度是81000次/s 。
(2)丰富的数据类型 ---Redis支持二进制案例的 Strings、 Lists、Hashes、Sets 及 Ordered Sets 数据类型操作。
(3)原子 ---redis的所有操作都是原子性的,同时redis还支持对几个操作全并后的原子性执行。
(4)丰富的特性---Redis还支持 publish/subscribe、通知、 key 过期等等特性。
三、redis数据类型
1、String(字符串)
string是redis最基本的类型,一个key对应一个value。string类型是二进制安全的,redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。一个键最大能存储512MB。
redis hash 是一个键名对集合。redis hash是一个string类型的field和value的映射表,hash适合用于存储对象。每个 hash 可以存储232 -1 键值对(40多亿)。
3、list(列表)
redis 列表是简单的字符串列表,按照插入顺序排序。可以添加一个元素到列表的头部(左边)或者尾部(右边)。列表最多可存储232 -
1 元素 (每个列表可存储40多亿)。
4、set(集合)
redis的Set是string类型的无序集合。集合是通过哈希表实现的,所以添加、删除、查找的复杂度都是O(1)。集合中最大的成员数为 232- 1( 每个集合可存储40多亿个成员)。
5、zset(sorted set:有序集合)
redis 也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。
四、redis事务
1、redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:
(1)事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
(2)事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。
2、一个事务从开始到执行会经历以下三个阶段:开始事务、命令入队、执行事务。
3、一个事务它先以 MULTI 开始一个事务, 然后将多个命令入队到事务中, 最后由 EXEC 命令触发事务, 一并执行事务中的所有命令
五、Java使用redis
例1:连接到redis服务
import redis.clients.jedis.Jedis;
public class RedisTest {
public static void main(String[] args) {
//连接本地的 Redis 服务
Jedis jedis = new Jedis("localhost");
System.out.println("连接成功");
//查看服务是否运行
System.out.println("服务正在运行: "+jedis.ping());
}
}
例2:redis 字符串
import redis.clients.jedis.Jedis;
public class RedisString {
public static void main(String[] args) {
//连接本地的 Redis 服务
Jedis jedis = new Jedis("localhost");
System.out.println("连接成功");
//设置 redis 字符串数据
jedis.set("xu", "123456");
// 获取存储的数据并输出
System.out.println("redis 存储的字符串为: "+ jedis.get("xu"));
}
}
import java.util.List;
import redis.clients.jedis.Jedis;
public class RedisList {
public static void main(String[] args) {
//连接本地的 Redis 服务
Jedis jedis = new Jedis("localhost");
System.out.println("连接成功");
//存储数据到列表中
jedis.lpush("site-list", "1");
jedis.lpush("site-list", "2");
jedis.lpush("site-list", "3");
// 获取存储的数据并输出
List<String> list = jedis.lrange("site-list", 0 ,2);
for(int i=0; i<list.size(); i++) {
System.out.println("列表: "+list.get(i));
}
}
}
import java.util.Iterator;
import java.util.Set;
import redis.clients.jedis.Jedis;
public class RedisKeys {
public static void main(String[] args) {
//连接本地的 Redis 服务
Jedis jedis = new Jedis("localhost");
System.out.println("连接成功");
// 获取数据并输出
Set<String> keys = jedis.keys("*");
Iterator<String> it=keys.iterator() ;
while(it.hasNext()){
String key = it.next();
System.out.println(key);
}
}
}