说明
- Redis入门环境为Windows
- Redis下载安装很简单,不叙述。
- 推荐《Redis实战》书籍,先看看Redis支持的五种数据结构
Window环境>>>>>>>>>>>>>>>>
Redis官网下载地址:https://redis.io/
Redis服务日常操作(cmd环境中)
1.注册服务: redis-server.exe --service-install redis.windows.conf
注册成功后,右键"计算机"-->属性-->管理--->服务和应用程序-->服务下就出现一个名为"Redis"的服务
跟常用的mysql服务一样。然后就点击启动它,redis服务器就启动了,
当然也可以在cmd中使用命令来操作:redis-server --service-start,启动成功后查询任务管理器中的进程就看见它了。
还可以使用另外一种方式(像启动mysql服务一样:net start mysql),cmd环境中
D:\Redis>net start Redis
Redis 服务正在启动 .
Redis 服务已经启动成功。
说明:将Redis注册成系统服务
由于我们每次在启动Redis时都需要手动在命令行中输入相应的指令,
而一旦控制台被关闭,则Redis也就随之关闭,这在平常的开发中往往需要频繁的重启Redis,
因而非常的低效而不人性化,所以说我们将其注册成系统服务。
例如:
D:\Redis>redis-server.exe --service-install redis.windows.conf
[9212] 07 Nov 15:51:51.462 # Granting read/write access to 'NT AUTHORITY\NetworkService' on: "D:\Redis" "D:\Redis\"
[9212] 07 Nov 15:51:51.472 # Redis successfully installed as a service.
#注意这里使用的是redis.windows.conf配置文件注册的服务,这里面是配置了服务器密码,端口等信息的
#所以客户端连接服务器时就需要指定端口和密码了,不能使用默认配置启动服务器那样直接启动客户端就能够连接服务器
D:\Redis>
2.Redis客户端连接Redis服务器
进入到Reddis安装目录下,输入以下命令
D:\Redis>redis-cli.exe -p 6379 -a foo666k
127.0.0.1:6379>
#-p 6379 表示指定端口, -a foo666k 表示指定密码或认证。
查看一下,在redis中设置了那些数据:
127.0.0.1:6379> keys *
1) "zset-key"
2) "hash-key"
127.0.0.1:6379>
3.删除服务: redis-server --service-uninstall
4.开启服务: redis-server --service-start
例如:
D:\Redis>redis-server --service-start
[8568] 07 Nov 15:55:39.112 # Redis service successfully started.
D:\Redis>
5.停止服务:
方式一
redis-server --service-stop
方式二(笔者习惯用这种方式):
D:\Redis>net stop Redis
Redis 服务已成功停止。
6.Windows中安装Redis客户端管理工具Redis Desktop Manager(RMD)
(这个工具就类似Oracle客户端工具PL/SQL Develop, Oracle默认客户端为:SQL Plus)
6.1 私人空间下载地址:
https://download.csdn.net/download/netaa001/10770782
说明:因为官方在 0.9.4 版本之后选择对所有的安装包收费,不再提供安装包下载,但是源码依旧公开。 这个是私人从官方提供的RDM源码包编译成的.exe文件,人家花了几个小时弄成的,并说:如果使用者有空并且愿意可以请它喝杯咖啡!哈哈
问题是这个作者没有留下联系方式,要不?大家请我喝杯咖啡!哈哈。(把安装程序打包放到CSDN中了,有需要的朋友也可以直接在哪里下载)
6.2 Redis的默认数据存放位置为db0
7.redis.windows.conf几个常用属性说明
daemonize no #默认表示不以守护进程方式运行服务器,
#比如,你直接打开redis服务器,是不是有一个cmd黑窗口,当你关掉时这个黑窗口时服务器就停掉了
#如果设置成yes时,就算你关了黑窗口,服务器依旧运行。
port 6379 #服务器监听的端口,类似于tomcat监听8080
databases 16 #设置Redis逻辑数据库上限为16个,类似于mysql中可以创建许多逻辑数据库
logfile "" #指定服务器生成的日志存储到哪个日志文件中
dir ./ #指定日志文件所在的目录为当前目录
requirepass foo666k #设置Redis服务器的密码为foo666k
说明:redis在windows上的支持版本为3.x, 对于Redis3.x后面的版本微软团队就不在提供支持。
8.java客户端Jedis
java应用如何连接Redis服务器呢,其实是通过Jedis来完成的。(类似于java是如何连接数据库的? java通过jdbc为连接数据库的)
一个很简单的java连接和使用Redis的Demo如下:
package org.yl.cache.redis;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.exceptions.JedisConnectionException;
/**
* java中使用redis
* 1.安装redis服务器,配置环境变量path,启动redis服务器:redis-server.exe
* 2.类路径下加入jedis.jar
* 3.连接并使用redis
* 4.redis简单增删改查,Jedis类似于一个JDBC连接
*
* @author QHW
*/
public class RedisJava {
private Jedis jedis;
/**
* 连接Redis服务器
*/
public void connect2RedisServer(){
//连接本地的Redis服务器,使用默认配置开启Redis服务器
//jedis = new Jedis("localhost");
//连接本地的Redis服务器,使用指定配置redis.windows.conf开启Redis服务器
jedis = new Jedis("localhost");
jedis.auth("foo666k");
//查看服务是否运行
String runResult = jedis.ping();
if("PONG".equals(runResult)){
System.out.println("*********连接成功,服务正在运行******");
}else{
System.out.println("*********服务没启动******");
}
}
/**
* 关闭Redis连接
*/
public void closeRedis(){
jedis.close();
}
/**
* 从Redis的当前DB中移到dbIndex中
* (Redis中有可以建立多个DB,数据库名用int类型表示从0开始到-1结束
* DB之间可以把key对应的数据进行移动到另一个DB中。)
* 默认Redis中可以配置16个数据库(这种概念相当于mysql中可以创建许多个数据库)
* 数据库切换:jedis.select(dbIndex),表示切换到dbindex数据库
*/
public void removeDB(String key ,int dbIndex){
jedis.move(key, dbIndex);
}
/**
* 测试
* @param args
*/
public static void main(String[] args) {
RedisJava redisJava = new RedisJava();
try {
redisJava.connect2RedisServer();
} catch (JedisConnectionException e) {
System.out.println("*********连接Redis服务异常*********");
}
//设置字符串类型的key-value到Redis中
redisJava.setString("str1", "我是字符串类型数据1");
System.out.println("通过Key获取字符串类型Value:" + redisJava.getStringData("str1"));
//多次运行此方法,就会有多个aaa,bbb,ccc数据(List特性:有序有重复)
System.out.println("list类型数据在Redis中的存取操作:");
// redisJava.setListData("keyList", "aaa");
// redisJava.setListData("keyList", "bbb");
// redisJava.setListData("keyList", "ccc");
List<String> listDataList = redisJava.getListData("keyList");
for(int i = 0; i < listDataList.size(); i++){
System.out.println(listDataList.get(i));
}
System.out.println("**********查询Redis中存储的所有的key****************");
redisJava.showAllKeys();
//根据key删除Redis数据
//redisJava.delByKey("keyList");
//更新Redis 中的Key
redisJava.updateKey("str1", "strNew");
System.out.println("str1: " + redisJava.getStringData("str1"));
System.out.println("strNew: " + redisJava.getStringData("strNew"));
//返回key的剩余缓存时间(-1表示永久好持久化到Redis中了,-2表示不存在)
System.out.println("获取strNew缓存剩余时间:" + redisJava.ttl("strNew"));
System.out.println("获取abclyc缓存剩余时间:" + redisJava.ttl("abclyc"));
//设置key在缓存中过期时间(单位秒)
redisJava.setCache("strNew", 20);
try {
//判断某个key是否存在Redis中
System.out.println("当前时间,strNew是否存在Redis中:" + redisJava.isExist("strNew"));
Thread.sleep(25000);
System.out.println("25s后获取strNew:" + redisJava.ttl("strNew"));
} catch (InterruptedException e) {
e.printStackTrace();
}
//关闭redis连接释放资源
redisJava.closeRedis();
}
/**
* 设置数据在Redis缓存中
* @param key
* @param expire expire秒过期
*/
public void setCache(String key, int expire){
jedis.expire(key,expire);
}
/**
* 将一个key持久化
* 在将过期键转换为普通键时撤消过期。
* @param key
*/
public void setPersist(String key){
jedis.persist(key);
}
/**
* 判断某个key是否存在Redis中
*/
public boolean isExist(String key){
return jedis.exists(key);
}
/**
* 返回key的剩余缓存时间(单位秒)
*/
public Long ttl(String key){
return jedis.ttl(key);
}
/**
* 设置String字符串
* @param key
* @param value
*/
public void setString(String key,String value){
//设置 redis 字符串数据
jedis.set(key, value);
}
/**
* 根据key获取Value
* @param key
* @return
*/
public String getStringData(String key){
return jedis.get(key);
}
/**
* 设置List列表
* @param listKey
* @param value
*/
public void setListData(String listKey,String value){
jedis.lpush(listKey, value);
}
/**
* 根据listKey获取List
* @param listKey
* @return
*/
public List<String> getListData(String listKey){
return jedis.lrange(listKey, 0 ,-1);
}
/**
* 展示所有的keys
*/
public void showAllKeys(){
// 获取数据并输出
Set<String> keys = jedis.keys("*");
Iterator<String> it=keys.iterator() ;
while(it.hasNext()){
String key = it.next();
System.out.println(key);
}
}
/**
* 通过Key删除Redis数据
*/
public void delByKey(String key){
jedis.del(key);
}
/**
* 更新Redis中的key
* @param oldKey
* @param newKey
*/
public void updateKey(String oldKey, String newKey){
jedis.rename(oldKey,newKey);
}
}