Redis客户端操作之Jedis

短命女 2022-02-03 12:57 415阅读 0赞

Jedis

Jedis Client是Redis官网推荐的一个面向java客户端,库文件实现了对redis各类API进行封装调用,通过这些API我们会非常方便的操作我们的Redis数据库。

redis配置文件地修改

1.注释掉绑定地信息

在redis.conf的配置文件中bind配置的信息表示的是redis服务可以接收外部访问的地址,这个主要还是为了提高安全性,我们在学习阶段可以将这个信息直接注释掉,这样的话任意的外部ip地址都可以访问。bind是protected-mode配合使用的

  1. bind 127.0.0.1

2.关闭保护模式

redis3.2版本后新增protected-mode配置,默认是yes,即开启。设置外部网络连接redis服务,设置方式如下:
1、关闭protected-mode模式,此时外部网络可以直接访问
2、开启protected-mode保护模式,需配置bind ip或者设置访问密码

创建项目

添加依赖

  1. <dependency>
  2. <groupId>redis.clients</groupId>
  3. <artifactId>jedis</artifactId>
  4. <version>2.9.0</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>junit</groupId>
  8. <artifactId>junit</artifactId>
  9. <version>3.8.1</version>
  10. </dependency>

redis单机版

案例代码:

  1. /**
  2. * 测试是否连接成功
  3. */
  4. public void ping(){
  5. Jedis jedis = new Jedis("192.168.119.12", 6379);
  6. System.out.println(jedis.ping());
  7. }
  8. /**
  9. * 设置key/value对
  10. */
  11. public void set(){
  12. Jedis jedis = new Jedis("192.168.119.12", 6379);
  13. jedis.set("name", "張三");
  14. jedis.set("age", "18");
  15. jedis.close();
  16. }
  17. /**
  18. * 通过key获取对应的value
  19. */
  20. public void get(){
  21. Jedis jedis = new Jedis("192.168.119.12", 6379);
  22. String name = jedis.get("name");
  23. String age = jedis.get("age");
  24. System.out.println(name+"--"+age);
  25. jedis.close();
  26. }
  27. /**
  28. * 通过Jedis的连接池Pool
  29. */
  30. public void testJedisPool() {
  31. // 创建Jedis连接池
  32. JedisPool pool = new JedisPool("192.168.119.12", 6379);
  33. // 从连接池中获取Jedis对象
  34. Jedis jedisItem = pool.getResource();
  35. String name = jedisItem.get("name");
  36. System.out.println(name);
  37. jedisItem.close();
  38. pool.close();
  39. }
  40. /**
  41. * 操作incr方法自增1
  42. */
  43. public void incr(){
  44. Jedis jedis = new Jedis("192.168.119.12", 6379);
  45. Long age = jedis.incr("age");
  46. System.out.println(age);
  47. }

redis数据
在这里插入图片描述
控制台输出
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Jedis整合Spring

添加依赖

  1. <dependencies>
  2. <dependency>
  3. <groupId>redis.clients</groupId>
  4. <artifactId>jedis</artifactId>
  5. <version>2.9.0</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>junit</groupId>
  9. <artifactId>junit</artifactId>
  10. <version>3.8.1</version>
  11. </dependency>
  12. <dependency>
  13. <groupId>org.springframework</groupId>
  14. <artifactId>spring-context</artifactId>
  15. <version>4.3.3.RELEASE</version>
  16. </dependency>
  17. </dependencies>

Redis单机环境【Spring地配置文件】

  1. <beans xmlns="http://www.springframework.org/schema/beans"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
  3. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  5. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
  6. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
  7. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
  8. <context:component-scan base-package="com.sxt.dao.impl"></context:component-scan>
  9. <!-- 连接池配置 -->
  10. <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
  11. <!-- 最大连接数 -->
  12. <property name="maxTotal" value="30" />
  13. <!-- 最大空闲连接数 -->
  14. <property name="maxIdle" value="10" />
  15. <!-- 每次释放连接的最大数目 -->
  16. <property name="numTestsPerEvictionRun" value="1024" />
  17. <!-- 释放连接的扫描间隔(毫秒) -->
  18. <property name="timeBetweenEvictionRunsMillis" value="30000" />
  19. <!-- 连接最小空闲时间 -->
  20. <property name="minEvictableIdleTimeMillis" value="1800000" />
  21. <!-- 连接空闲多久后释放, 当空闲时间>该值 且 空闲连接>最大空闲连接数 时直接释放 -->
  22. <property name="softMinEvictableIdleTimeMillis" value="10000" />
  23. <!-- 获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1 -->
  24. <property name="maxWaitMillis" value="1500" />
  25. <!-- 在获取连接的时候检查有效性, 默认false -->
  26. <property name="testOnBorrow" value="false" />
  27. <!-- 在空闲时检查有效性, 默认false -->
  28. <property name="testWhileIdle" value="false" />
  29. <!-- 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true -->
  30. <property name="blockWhenExhausted" value="false" />
  31. </bean>
  32. <!-- jedis客户端单机版 -->
  33. <bean id="redisClient" class="redis.clients.jedis.JedisPool">
  34. <constructor-arg name="host" value="192.168.119.12"></constructor-arg>
  35. <constructor-arg name="port" value="6379"></constructor-arg>
  36. <constructor-arg name="poolConfig" ref="jedisPoolConfig"></constructor-arg>
  37. </bean>
  38. </beans>

定义user对象

  1. package com.sxt.bean;
  2. public class User {
  3. private Integer id;
  4. private String username;
  5. private String password;
  6. @Override
  7. public String toString() {
  8. return "User [id=" + id + ", username=" + username + ", password=" + password + "]";
  9. }
  10. public Integer getId() {
  11. return id;
  12. }
  13. public void setId(Integer id) {
  14. this.id = id;
  15. }
  16. public String getUsername() {
  17. return username;
  18. }
  19. public void setUsername(String username) {
  20. this.username = username;
  21. }
  22. public String getPassword() {
  23. return password;
  24. }
  25. public void setPassword(String password) {
  26. this.password = password;
  27. }
  28. }

定义接口和实现类

dao层

  1. package com.sxt.dao;
  2. import java.util.List;
  3. import com.sxt.bean.User;
  4. public interface UserDao {
  5. //查询方法
  6. public List<User> query(User user);
  7. //添加方法
  8. public int add(User user);
  9. //删除方法·
  10. public int delete(Integer id);
  11. //更新数据
  12. public int update(Integer id);
  13. }

dao层实现类

  1. package com.sxt.dao.impl;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.List;
  5. import java.util.Map;
  6. import java.util.Set;
  7. import javax.annotation.Resource;
  8. import org.springframework.stereotype.Service;
  9. import com.sxt.bean.User;
  10. import com.sxt.dao.UserDao;
  11. import redis.clients.jedis.Jedis;
  12. import redis.clients.jedis.JedisPool;
  13. @Service
  14. public class UserDaoImpl implements UserDao{
  15. @Resource
  16. private JedisPool jedis1;
  17. private Jedis jedis;
  18. @Override
  19. public List<User> query(User user) {
  20. jedis = jedis1.getResource();//从连接池获取jedis对象
  21. Set<String> set = jedis.keys("user:*");
  22. List<User> list= new ArrayList<>();
  23. for (String key : set) {
  24. User user2 = new User();
  25. String hget = jedis.hget(key, "id");
  26. String hget2 = jedis.hget(key,"username");
  27. String hget3 = jedis.hget(key,"password");
  28. user2.setId(Integer.parseInt(hget));
  29. user2.setUsername(hget2);
  30. user2.setPassword(hget3);
  31. list.add(user2);
  32. }
  33. return list;
  34. }
  35. @Override
  36. public int add(User user) {
  37. jedis = jedis1.getResource();
  38. jedis.hset("user:"+user.getId(), "username", user.getUsername());
  39. jedis.hset("user:"+user.getId(), "id",user.getId()+"");
  40. jedis.hset("user:"+user.getId(), "password", user.getPassword());
  41. return 0;
  42. }
  43. @Override
  44. public int delete(Integer id) {
  45. jedis = jedis1.getResource();
  46. jedis.del("user:"+id);
  47. return 0;
  48. }
  49. @Override
  50. public int update(Integer id) {
  51. jedis = jedis1.getResource();
  52. Map<String,String> map = new HashMap<>();
  53. map.put("username", "zhangsan");
  54. map.put("id", 1+"");
  55. map.put("password", "321");
  56. jedis.hmset("user:"+id, map);
  57. return 0;
  58. }
  59. }

测试

  1. package com.sxt;
  2. import java.util.List;
  3. import org.junit.Before;
  4. import org.springframework.context.ApplicationContext;
  5. import org.springframework.context.support.ClassPathXmlApplicationContext;
  6. import com.sxt.bean.User;
  7. import com.sxt.dao.UserDao;
  8. public class Test {
  9. private UserDao dao;
  10. @org.junit.Test
  11. @Before
  12. public void test() {
  13. ApplicationContext ac = new ClassPathXmlApplicationContext("application.xml");
  14. dao = ac.getBean(UserDao.class);
  15. }
  16. //查询
  17. @org.junit.Test
  18. public void test1(){
  19. User user = new User();
  20. List<User> list = dao.query(user);
  21. System.out.println(list);
  22. }
  23. //添加
  24. @org.junit.Test
  25. public void test2(){
  26. User user = new User();
  27. user.setId(2);
  28. user.setUsername("lisi");
  29. user.setPassword("321");
  30. dao.add(user);
  31. }
  32. //删除
  33. @org.junit.Test
  34. public void test3(){
  35. dao.delete(2);
  36. }
  37. //更新
  38. @org.junit.Test
  39. public void test4(){
  40. dao.update(1);
  41. }
  42. }

效果截图从上到下

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这样redis和spring整合实现

发表评论

表情:
评论列表 (有 0 条评论,415人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Redis 客户Jedis 事务

    Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证: 1.事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他