在java中使用redis

Redis的命令就是java中jedis的方法,命令有多少种,方法就有多少。

jedis的使用:

一、Redis中String类型的使用:

1.可以将连接redis的数据池定义一个工具类

public class RedisUtil {
   private static JedisPool pool;
    static {
        String host="192.168.75.129";//redis的ip
        int port=6379;//redis的端口号
        //创建redis连接池  pool基本配置信息
        JedisPoolConfig poolConfig=new JedisPoolConfig();
        poolConfig.setMaxTotal(5);//最大的连接数
        poolConfig.setMaxIdle(1);//最大空闲数
        //。。。//更多配置可参考百度上的配置
        //连接池
        pool=new JedisPool(poolConfig,host,port);

    }

    public static  Jedis getJedis(){
        Jedis jedis = pool.getResource();
        jedis.auth("100600");
        return jedis;
    }
    public static void JedisClose(Jedis jedis){
        jedis.close();
    }

2.然后我们调用RedisUtils的中的方法来获取jedis

//获取redis的连接
          Jedis jedis = RedisUtil.getJedis();
          jedis.set("lxy","我爱你");
          String lxy = jedis.get("lxy");
          System.out.println("Redis的数据"+lxy);
          //关闭redis连接
         RedisUtil.JedisClose(jedis);

3.此时我们就获得了对redis的String类型的操作

二、Redis中Hash类型的使用

 /*
    * Jedis完成对Hash类型的操作
    *需求:Hash存储一个对象
    * 判断某key是否存在,如果存在,就从redis中查询
      如果不存在,就访问数据库
    * */
    @Test
    void t3(){
        String key ="users";
       /* User user=new User();
        user.setUid(1);
        user.setUname("sxh");
        user.setUpwd("123");
        user.setUrealname("司小虎");*/
        Jedis jedis = RedisUtil.getJedis();

        if (jedis.exists(key)){
            Map<String, String> stringStringMap = jedis.hgetAll(key);
            System.out.println("从redis查询:");
            System.out.println(stringStringMap.get("uid")+stringStringMap.get("uname"));
        }else {
            //查询数据库并返回结果
            int uid =1;
            String uname="lxy";
            String upwd="lxy";
            String urealname="秀英";
            jedis.hset(key,"uid",String.valueOf(uid));
            jedis.hset(key,"uname",uname);
            jedis.hset(key,"upwd",upwd);
            jedis.hset(key,"urealname",urealname);
            System.out.println("从数据库查询:");
            System.out.println(uid+uname);
        }

        RedisUtil.JedisClose(jedis);
    }

对上面Hash类型的的优化:

1.运用springdata jpa作为持久层的管理

1.1 首先在实体类

@Entity  //表明这个类是实体类
@Table(name = "user")  //创建表的名称
public class User {
    @Id   //配置主键id
    @GeneratedValue(strategy = GenerationType.IDENTITY)//配置主键生成策略
    @Column(name = "user_id")//对应表中的字段
    private Integer uid;
    @Column(name = "user_name")
    private String uname;
    @Column(name = "user_pwd")
    private String  upwd;
    @Column(name = "user_urealname")
    。。省略getter和seter
        
        
    //动态设置key的值  redis的命名规范:xx:xx:xx
      public static String getKeyName(){
        return "user:";
    }
 }

1.2 在持久层Repository包下创建接口,分别继承JpaRepository<实体类,主键类型>和JpaSpecificationExecutor<实体类>

@Repository  //表明这个是一个Repository相当于 mybatis中的mapper,dao层
public interface UserDao extends JpaRepository<User,Integer>, JpaSpecificationExecutor<User> {
}

1.3在配置文件中配置如下(我用的是yml):

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql:///ceshi?serverTimezone=UTC   //serverTimezone=UTC:配置mysql的时区
    password: 123
    username: root
  jpa:
    show-sql: true
    hibernate:
      ddl-auto: update  //当第一次创建的时候需要将这个改为 create 往后可以改为update
    database: mysql

1.4 在springboot主程序类中加上@ComponentScan、@EntityScan、@EnableJpaRepositories

@ComponentScan("com")   //扫描com下的所有包
@EntityScan("com.sxh.bean")   //扫描实体类 如在com.sxh.bean包下的所有带有Entity注解的实体类
@EnableJpaRepositories("com.sxh.Repository")  //扫描com.sxh.Repository包下的所有带有Repository注解的类
@SpringBootApplication
public class Springbootandredis1Application {

    public static void main(String[] args) {
        SpringApplication.run(Springbootandredis1Application.class, args);
    }

}

1.45在测试类中或者controller类中写如下:

 /*
    * 对上面的hash类型进行优化
    * */
    @Test
    @Transactional //若延迟加载唉,必须配置事务管理
    void t5(){
        Integer id=1;
        String key=User.getKeyName()+id;   //比如key=user:1,方便查询
        Jedis jedis = RedisUtil.getJedis();   //获取jedis
        if (jedis.exists(key)){//判断redis中是否存在这个key,如果存在在redis中查询
            //从redis中取出对象
            Map<String, String> map = jedis.hgetAll(key);  //redis中的hash是map的返回值
            System.out.println("从redis中查询得到的:"+map);
        }else {//如果不存在在xxx数据库中查询
            //从数据库中查询
            User users = userDao.getOne(id);
            //设置map集合,准备存入redis中
            Map<String,String> map=new HashMap<String,String>();
            map.put("uid",users.getUid()+"");
            map.put("uname",users.getUname());
            map.put("upwd",users.getUpwd());
            map.put("urealname",users.getUrealname());
            jedis.hset(key,map);//将从数据库查询的对象存入redis中
            System.out.println("从mysql查询的对象是"+users);
        }
        RedisUtil.JedisClose(jedis);
    }
Last modification:February 6th, 2020 at 02:55 pm
如果觉得我的文章对你有用,请随意赞赏