一、安装
(1)、安装gcc(redis是由C语言编写的,所以安装gcc来编译)
[root@localhost ~]# yum install gcc-c++
(2)、wget方式下载redis安装包并解压(wget如不能使用,就先下载:yum -y install wget)
[root@localhost ~]# wget http://download.redis.io/releases/redis-3.2.10.tar.gz
[root@localhost ~]# tar -zxvf redis-3.2.10.tar.gz
(3)、输入 ll 查看一下
(4)、进入目录进行编译并且安装到/usr/local/redis目录下
[root@localhost ~]# cd redis-3.2.10
[root@localhost redis-3.2.10]# make
[root@localhost redis-3.2.10]# make PREFIX=/usr/local/redis install
(5)、将redis.conf配置文件复制到redis目录下
[root@localhost redis-3.2.10]# cp redis.conf /usr/local/redis/
(6)、测试一下是否启动成功,出现如下图标代表成功启动
[root@localhost redis-3.2.10]# cd /usr/local/redis/
[root@localhost redis]# bin/redis-server
(7)、这种启动是前端启动,程序退出就终止了,所以必须改为后端运行;按Ctrl + C,退出当前启动程序,使用vi打开redis.conf文件,找到daemonize,按i,把no改为yes,按Esc键退出,输入 :wq 保存
[root@localhost ~]# vi /usr/local/redis/redis.conf
(8)、此时进入redis目录,加载配置文件启动后端服务
[root@localhost ~]# cd /usr/local/redis/
[root@localhost redis]# ./bin/redis-server ./redis.conf
(9)、查询是否启动成功(6379:端口号)
[root@localhost redis]# ps -ef | grep -i redis
(10)、关闭服务
[root@localhost redis]# ./bin/redis-cli shutdown
[root@localhost redis]# ps -ef | grep -i redis
二、使用
(1)、在Maven中下载jar包
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
(2)、通过Jedis连接池来使用Redis
package com.demo.test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.Transaction;
public class JedisPoolTest {
public static void main(String[] args) {
JedisPoolConfig config =new JedisPoolConfig();
config.setMaxTotal(100); //最大连接数
config.setMaxIdle(10); //最大空闲连接数
JedisPool jedisPool =new JedisPool(config,"****",6379); //参数二:linux上的主机名;参数三:linux上的端口号
Jedis jedis =null;
try {
jedis = jedisPool.getResource();
//jedis.auth("123456"); //密码
//支持string操作
/*jedis.set("name", "甲123..."); //存储数据
jedis.append("name", "追加456..."); //追加
jedis.mset("age","1","addr","海南"); //存储多个字符
System.out.println("value:"+jedis.get("name"));
System.out.println(jedis.mget("name","age","addr"));*/
//支持hash操作
/*Map<String,String> map = new HashMap<String,String>();
map.put("name", "乙123...");
map.put("age", "2");
jedis.hmset("user", map); //存储数据
System.out.println( jedis.hmget("user", "name","age") );//读取数据 返回一个列表类型
System.out.println( jedis.hkeys("user") ); //获取所有哈希表中的字段,返回一个列表
System.out.println( jedis.hvals("user") ); //获取哈希表中所有值
System.out.println( jedis.hlen("user") ); //获取哈希表中字段的数量
Iterator<String> iter = jedis.hkeys("user").iterator(); //获取所有的键 迭代操作
while(iter.hasNext()) {
String key = iter.next();
System.out.println( key+"--"+jedis.hmget("user", key) );
}*/
//支持list操作
/*jedis.del("Programming language"); //开始前,先移除所有的内容
jedis.lpush("Programming language", "Java"); //将一个或多个值插入到列表头部
jedis.lpush("Programming language", "Python");
jedis.lpush("Programming language", "C++");
//获取数据 返回一个list(参数1:key,参数2:显示的起始位置,参数3:显示的结束位置)
//其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
System.out.println( jedis.lrange("Programming language", 0, -1) );
//将一个值插入到已存在的列表头部
jedis.lpushx("Programming language", "php");
System.out.println( jedis.lrange("Programming language", 0, -1) );
//在列表中添加一个或多个值
jedis.rpush("Programming language", "C");
System.out.println( jedis.lrange("Programming language", 0, -1) );*/
//支持set(无序)操作
/*jedis.sadd("webSite", "阿里巴巴","网易"); //向集合添加一个或多个成员
jedis.sadd("webSite", "腾讯");
System.out.println( jedis.scard("webSite") ); //获取集合的成员数
System.out.println( jedis.smembers("webSite") ); //返回集合中的所有成员 返回类型列表,注意顺序不唯一
System.out.println(jedis.sscan("webSite", "0") ); //迭代集合中的元素*/
//支持set(有序)操作
/*//Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
//不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
//有序集合的成员是唯一的,但分数(score)却可以重复。
jedis.zadd("city", 0, "北京");
jedis.zadd("city", 1, "上海");
jedis.zadd("city", 2, "杭州");
System.out.println( jedis.zcard("city") ); //获取有序集合的成员数
System.out.println( jedis.zrevrangeByScore("city", 5, 0) ); //返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序*/
//支持事务操作
Transaction transaction = jedis.multi(); //标记一个事务块的开始
transaction.set("name", "甲");
//int a = 6 / 0; //抛出异常(java中不可以除以0)
//transaction.append("name", "追加456...");
transaction.exec(); //执行所有事务块内的命令
System.out.println(jedis.get("name"));
} catch (Exception e) {
e.printStackTrace();
}finally {
if(jedis != null){
jedis.close();
}
if(jedisPool != null){
jedisPool.close();
}
}
}
}
注:
(1)、运行时如果出现连接超时的报错,那是因为6379端口没有权限,先输入firewall命令配置下防火墙,再进入redis.conf配置文件,按 i ,在bind 127.0.0.1前加入一个 # 进行注销,按Esc键退出,输入 :wq 保存
[root@localhost ~]# firewall-cmd --zone=public --add-port=6379/tcp --permanent
[root@localhost ~]# firewall-cmd --reload
[root@localhost ~]# cd /usr/local/redis/
[root@localhost redis]#vi /usr/local/redis/redis.conf
(2)、运行时如果出现如下错误,那是因为远程连接redis时,redis启动自我保护,拒绝访问;设置密码,通过密码访问就行了
[root@localhost ~]# cd /usr/local/redis/
[root@localhost redis]# ./bin/redis-cli
127.0.0.1:6379> config set requirepass 123456
127.0.0.1:6379> quit
[root@localhost redis]# ./bin/redis-cli
127.0.0.1:6379> auth 123456
OK