использование jedis в сервлете

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import redis.clients.jedis.*;
public class Welcome extends HttpServlet
{
Jedis jedis;

public void init(ServletConfig sc) throws ServletException
{

        Jedis jedis = new Jedis("localhost");
}
public void doGet(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException
{
int count=0;
PrintWriter out=response.getWriter();
jedis.set("k1","123");//This statement is not working
}
public void destroy(){}
}

Я пытался получить доступ к ключам и их значениям в Redis с помощью jedis. Он отлично работает с обычным кодом Java. но когда дело доходит до сервлетов, это не работает. Не могу найти причины. Пожалуйста, ответьте мне подробно, как я могу использовать jedis.set() в сервлетах.


person Karthikeyan Gopall    schedule 16.02.2015    source источник
comment
Вы не устанавливаете переменную экземпляра jedis. Обратный вызов init создает экземпляр Jedis и присваивает его локальной переменной, а не переменной экземпляра. Измените Jedis jedis = new Jedis("localhost"); на jedis = new Jedis("localhost"); или this.jedis = new Jedis("localhost");, чтобы было понятнее   -  person c.P.u1    schedule 16.02.2015
comment
спасибо братан @c.P.u1 это работает .. :)   -  person Karthikeyan Gopall    schedule 17.02.2015


Ответы (1)


Тем не менее, мы не должны использовать объект Jedis в качестве переменной экземпляра из-за безопасности потоков. Вместо этого мы используем объект подключения в ServletContext, реализуя ContextListener или внедрение ресурсов. Я думаю, что мы всегда учитываем безопасность потоков при использовании экземпляра сервлета. Отдельный экземпляр Jedis не является потокобезопасным! или же; используйте Джедиспул. это потокобезопасно.

Пул JedisPool = новый JedisPool (новый JedisPoolConfig(), "localhost");

person Erdal76t    schedule 30.01.2016