发表于: 2018-03-19 23:32:16
2 632
这几天一直在解决这个linux下面的redis连接的问题
开始一直是这个错误
DENIED Redis is running in protected mode because protected mode is enabled
https://www.cnblogs.com/lyh421/p/7145430.html(解决办法)
都修改了还是没有连接通
那个密码不要在redis.conf里面修改(我试了很多次还是不行)
必须通过上面的方式来设置密码()这个样子的设置才能生效
写了一个测试了,终于实现测试成功了
接下来查一下文档----->怎么实现redis的spring连接
(后面师兄提示一下是jar包的不兼容)
重新总结一下
主要jar包
<!--Redis start -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.6.1.RELEASE</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.7.3</version>
</dependency>
<!--Redis end -->
redis.properties 文件
接下来是redis的文件的引入
<!-- jedis 配置 -->
<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig" >
<property name="maxIdle" value="${redis.maxIdle}" />
<property name="maxWaitMillis" value="${redis.maxWait}" />
<property name="testOnBorrow" value="${redis.testOnBorrow}" />
</bean >
<context:property-placeholder location="classpath:redis.properties" />
<!-- redis服务器中心 -->
<bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" >
<property name="poolConfig" ref="poolConfig" />
<property name="port" value="${redis.port}" />
<property name="hostName" value="${redis.host}" />
<property name="password" value="${redis.password}" />
<property name="timeout" value="${redis.timeout}" ></property>
</bean >
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" >
<property name="connectionFactory" ref="connectionFactory" />
<property name="keySerializer" >
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
<property name="valueSerializer" >
<bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
</property>
</bean >
<!-- cache配置 -->
<bean id="redisUtil" class="com.fuwei.util.RedisUtil" >
<property name="redisTemplate" ref="redisTemplate" />
</bean >
接下来就是RedisUtil类的实现
package com.fuwei.util;
import org.springframework.cache.Cache;
import org.springframework.cache.support.SimpleValueWrapper;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import java.io.*;
/**
* Created by ${MIND-ZR} on 2017/12/1.
*/
public final class RedisUtil implements Cache {
private RedisTemplate<String, Object> redisTemplate;
private String name;
public RedisTemplate<String, Object> getRedisTemplate() {
return redisTemplate;
}
public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) {
this.redisTemplate = redisTemplate;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
// TODO Auto-generated method stub
return this.name;
}
public Object getNativeCache() {
// TODO Auto-generated method stub
return this.redisTemplate;
}
public ValueWrapper get(Object key) {
// TODO Auto-generated method stub
System.out.println("get key");
final String keyf = key.toString();
Object object = null;
object = redisTemplate.execute(new RedisCallback<Object>() {
public Object doInRedis(RedisConnection connection)
throws DataAccessException {
byte[] key = keyf.getBytes();
byte[] value = connection.get(key);
if (value == null) {
return null;
}
return toObject(value);
}
});
return (object != null ? new SimpleValueWrapper(object) : null);
}
public void put(Object key, Object value) {
// TODO Auto-generated method stub
System.out.println("put key");
final String keyf = key.toString();
final Object valuef = value;
final long liveTime = 86400;
redisTemplate.execute(new RedisCallback<Long>() {
public Long doInRedis(RedisConnection connection)
throws DataAccessException {
byte[] keyb = keyf.getBytes();
byte[] valueb = toByteArray(valuef);
connection.set(keyb, valueb);
if (liveTime > 0) {
connection.expire(keyb, liveTime);
}
return 1L;
}
});
}
private byte[] toByteArray(Object obj) {
byte[] bytes = null;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(obj);
oos.flush();
bytes = bos.toByteArray();
oos.close();
bos.close();
}catch (IOException ex) {
ex.printStackTrace();
}
return bytes;
}
private Object toObject(byte[] bytes) {
Object obj = null;
try {
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bis);
obj = ois.readObject();
ois.close();
bis.close();
} catch (IOException ex) {
ex.printStackTrace();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
return obj;
}
public void evict(Object key) {
// TODO Auto-generated method stub
System.out.println("del key");
final String keyf = key.toString();
redisTemplate.execute(new RedisCallback<Long>() {
public Long doInRedis(RedisConnection connection)
throws DataAccessException {
return connection.del(keyf.getBytes());
}
});
}
public void clear() {
// TODO Auto-generated method stub
System.out.println("clear key");
redisTemplate.execute(new RedisCallback<String>() {
public String doInRedis(RedisConnection connection)
throws DataAccessException {
connection.flushDb();
return "ok";
}
});
}
public <T> T get(Object key, Class<T> type) {
// TODO Auto-generated method stub
return null;
}
public ValueWrapper putIfAbsent(Object key, Object value) {
// TODO Auto-generated method stub
return null;
}
}
还有连接的类的查询的implement类
上面还有引入文件的引入
还是出现一个问题
https://www.cnblogs.com/yuefenghui/p/5551583.html(参考文档)
就是那个实体类 添加public class Student implements Serializable
在服务器上面的redis缓存的数据
前台的数据也打印了
终于在不同的尝试终于打通了
还是有一点问题就是乱码的数据
改了utf-8还是不行(时间不早了) 先交日报
今天完成的事情:这几天发现错误一直在弄bug,卡了一周了,终于打通了,后面还是解决乱码的问题,顺便在弄那个测试压力就结束任务六
今天遇到的困难:就是那个jar包的版本的不同,兼容性不好,就是后面的乱码的情况.
明天的计划:就是解决乱码和最后的压力测试
评论