1.Redis安装
(1):下载Redis
Linux官方下载地址:https://redis.io/download,
Windows64位下载地址:https://github.com/ServiceStack/redis-windows
测试使用的Windows版本,redis-64.3.0.503,下载并解压
(2):修改配置
redis.windows.conf 是Redis相关的配置文件
requirepass 是设置密码,maxmemory 是设置最大内存
增加密码123456,注意 requirepass 123456 顶格,不要有空格,不然会报参数错误。
(3):启动Redis
使用命令提示符,进入Redis目录下,读取配置文件启动 redis-server.exe redis.windows.conf
(4):测试Redis
Redis已启动,再开一个命令提示符,进入到该目录,输入 redis-cli -a 123456 ,使用密码123456 连接Redis,进行测试。
若不使用密码,使用时会报 NOAUTH Authentication required 错误。
(5):安装Redis
但是这样启动Redis是不是很麻烦呢,每次还需要手动启动。我们可以将Redis安装成服务,如同mysql一样。
关闭之前启动的Redis,在Redis目录下执行 redis-server.exe –service-install redis.windows.conf –loglevel verbose 安装。
安装成功后,启动任务管理器,在服务一栏中可以找到Redis,启动(如果经常使用,可以设置开机自启)。
重新连接Redis 进行测试
如果不想每次都进入Redis目录,可以配置Redis的环境变量,将Redis 目录加入path中。
2.使用JAVA操作Redis
JAVA操作Redis需要使用 Jedis 提供的API接口
Jedis Client是Redis官网推荐的一个面向java客户端,库文件实现了对各类API进行封装调用。
想要使用Jedis必须加载jar包或者添加maven依赖,jar包可以自己上网下载。
这里建立一个Maven项目,所以在pom.xml中添加依赖:
(因为使用单元测试,所以一并增加Junit,单元测试不想写在test里,所以不加scope了,任性)
<dependencies>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
使用步骤:
(1):创建Jedis连接池来管理Jedis,设置JedisPool的参数,不写默认host是本机,端口号6379,超时时间2000
(2): 实例化Jedis,设置登录密码
使用JedisPool的原因是每次创建Jedis实例建立连接很耗费性能,可以从一个连接池中取出连接对象,用完还回去。
使用连接池的方案还能解决很多同步性问题。
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author zh
*/
public class RedisTest {
JedisPool pool;
Jedis jedis;
@Before public void setUp() {
pool = new JedisPool(new JedisPoolConfig(), "127.0.0.1");
jedis = pool.getResource();
jedis.auth("123456");
}
/**
* jedis操作字符串
*/
@Test public void testString() {
//添加
jedis.set("key1", "value1");
System.out.println(jedis.get("key1"));//执行结果:value1
//修改
//1、追加
jedis.append("key1", "value1");
System.out.println(jedis.get("key1"));//执行结果:value1value1
//2、覆盖
jedis.set("key1", "value2");
System.out.println(jedis.get("key1"));//执行结果:value2
//删除
jedis.del("key1");
System.out.println(jedis.get("key1"));//执行结果:null
}
/**
* jedis操作Map
*/
@Test public void testMap() {
Map<String, String> user = new HashMap<String, String>();
user.put("name", "zh");
user.put("pwd", "123456");
jedis.hmset("user", user);
System.out.println(jedis.hmget("user", "name"));//执行结果:zh
//删除map中键值
jedis.hdel("user","pwd");
System.out.println(jedis.hmget("user", "pwd")); //执行结果:null
System.out.println(jedis.hlen("user")); //执行结果:1
System.out.println(jedis.exists("user"));//执行结果:true
System.out.println(jedis.hkeys("user"));//返回map对象中的所有key 执行结果:[name]
System.out.println(jedis.hvals("user"));//返回map对象中的所有value 执行结果:[zh]
}
/**
* jedis操作List
*/
@Test public void testList() {
//清空
jedis.del("letter");
//存放数据
jedis.lpush("letter", "a");
jedis.lpush("letter", "b");
jedis.lpush("letter", "c");
System.out.println(jedis.lrange("letter", 0, -1));//执行结果:[c, b, a]
}
/**
* jedis操作Set
*/
@Test public void testSet() {
//添加
jedis.sadd("number", "1");
jedis.sadd("number", "2");
jedis.sadd("number", "3");
jedis.sadd("number", "4");
System.out.println(jedis.smembers("number"));//执行结果:[1, 2, 3, 4]
//移除4
jedis.srem("number", "4");
System.out.println(jedis.smembers("number"));//执行结果:[1, 2, 3]
System.out.println(jedis.sismember("number", "1"));//判断1是否是number集合的元素 执行结果:true
System.out.println(jedis.srandmember("number"));//随机元素
System.out.println(jedis.scard("number"));//返回集合的元素个数 执行结果:3
}
}