娱乐头条-02redis

1.概念

       redis是C语言开发的, redis基于内存的数据库(数据存储到了内存当中), redis中数据的存储是以KEY-VALUE的形式来存储,redis中也是有丰富的数据类型

2.特点

  • redis将数据存储到内存当中, redis的读写效率非常高: 读 11万/s 写 8万/s
  • redis中提供了丰富的数据类型: 五种 String hash list set sortedSet
  • 注意: redis中数据类型指的是value的数据类型,而key只有String
  • redis支持快捷移植数据,
  • redis操作都是原子性的,用来保证数据的完整性

3. redis的数据类型的使用场景

  • String(字符串):
  • 特点: 和java中String是类似的, 表示字符串
  • get;set;mget;mset;getrange;strlen;incr ;decr;incrby;decryby
  • 使用场景: 做缓存  计数器  点赞
  • hash(散列):
  • 特点: 和java中hashmap是类似的,
  • hset;hget;hkeys,hlen,hdel
  • 使用场景: 做缓存(一般可以被String所替代)
  • list(列表):
  • 特点: 和 java中linkedList类似,看做一个队列(FIFO)
  • lpush,rpush,lrange,lpop,rpop,llen,lindex
  • 使用场景: 模拟队列  栈    朋友圈点赞
  • set(集合):
  • 特点: 和java中set集合类型: 去重 无序
  • sadd,smembers,spop,srandmember,sismember
  • 使用场景: 去重操作   抽奖
  • sortedSet(有序集合):
  • 特点:  去重 有序
  • zadd,zrange,zrevrange,zscore(查看元素的的分值),zrangebyscore,zrank,
  • 使用场景: 排序(排行榜)

keys的命令:del,exists,keys

4.安装

链接https://pan.baidu.com/s/1EQ26tDdzXCiMOe9tgOwTWQ 
提取码:jhfb

傻瓜式安装

5.jedis

       jedis就是一款java连接redis的客户端工具, jedis中操作API与redis中命令是一样的,大大降低了学习成本,jedis也是redis官方推荐的一款java客户端工具

      如果想jedis, 就需要先进行导包:

        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>

      基本入门程序(添加测试依赖)

    @Test
    public void testIndexJedis(){
        //1.创建一个jedis对象
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        //2.测试是否连通
        String pong = jedis.ping();
        System.out.println(pong);
        //关闭
        jedis.close();
    }

(1) jedis操作redis -->String

    @Test
    public void testString() throws Exception{

        //1.创建一个jedis对象
        Jedis jedis = new Jedis("127.0.0.1", 6379);


        //2.执行相关的操作:String

        //2.1赋值
        jedis.set("age","24");
        //2.2取值
        String age = jedis.get("age");
        System.out.println(age);

        //2.3想让age+1操作
        Long age1 = jedis.incr("age");
        System.out.println(age1);
        //2.4想让age-1操作
        Long age2 = jedis.decr("age");
        System.out.println(age2);

        //2.5想让age只存活5秒,到时间后销毁即可
        jedis.expire("age",5);
        while(jedis.exists("age")){
            Long time = jedis.ttl("age");//以秒为单位,返回给定 key 的剩余生存时间
            System.out.println(time);
            Thread.sleep(1000);
        }

        //2.6新创建name的时候,为name添加有效时长为5秒
        jedis.setex("name",5,"哆啦A梦");
        while(jedis.exists("name")){
            Long time = jedis.ttl("name");
            System.out.println(time);
            Thread.sleep(1000);
        }

        //2.7删除一个key
        jedis.del("name");
        System.out.println(jedis.get("name"));//null
    }

(2)jedis操作redis --> list

    @Test
    public void testList(){

        //1.创建一个jedis对象
        Jedis jedis = new Jedis("127.0.0.1", 6379);


        //2.相关操作:list

        //2.1从左侧添加元素,从右侧弹出元素
        //注意,不要出现从左侧添加,从左侧弹出
        jedis.lpush("list1","a","b","c","d");
        String rpop = jedis.rpop("list1");
        System.out.println(rpop);

        //2.2遍历list集合
        List<String> list = jedis.lrange("list1", 0, -1);
        System.out.println(list);

        //2.3获取列表的个数
        Long len = jedis.llen("list1");
        System.out.println(len);

        //2.4从右侧弹出一个元素,将弹出的元素从左侧添加
        jedis.rpoplpush("list1","list1");
        list = jedis.lrange("list1",0,-1);
        System.out.println(list);
    }

(3)jedis操作redis --> set

    @Test
    public void testSet(){

        //1.创建一个jedis对象
        Jedis jedis = new Jedis("127.0.0.1", 6379);


        //2.相关操作:set

        //2.1添加数据
        jedis.sadd("set1","q","w","e","r","e");

        //2.2获取set集合所有的元素
        Set<String> set1 = jedis.smembers("set1");
        System.out.println(set1);//[e, w, r, q]

        //2.3判断w是否存在
        Boolean flag = jedis.sismember("set1", "w");
        System.out.println(flag);

        //2.4获取set集合中数量
        Long len = jedis.scard("set1");
        System.out.println(len);
    }

6. jedis中连接池

    @Test
    public void testJedisPool() throws Exception{

        //1.创建连接池对象
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(50);
        config.setMaxIdle(20);//最大的闲时连接
        config.setMinIdle(5);//最小的闲时连接
        /*
        * 第一个参数:连接池的配置对象
        * 第二个参数:主机名
        * 第三个参数:端口号
        * */
        JedisPool jedisPool = new JedisPool(config, "127.0.0.1", 6379);

        //2.获取连接
        Jedis jedis = jedisPool.getResource();

        //3.测试
        System.out.println(jedis.ping());

        //4.关闭
        jedis.close();
    }

抽取工具类

public class JedisUtil {
    private static  JedisPool jedisPool;
    //静态代码块:
    static {
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(50);
        config.setMaxIdle(20); // 最大的闲时连接
        config.setMinIdle(5); // 最小的闲时连接
        jedisPool = new JedisPool(config,"127.0.0.1",6379);
    }
    //获取连接
    public static Jedis getJedis(){

        return jedisPool.getResource();
    }
}
    @Test
    public void testJedisUtil(){
        Jedis jedis = JedisUtil.getJedis();
        System.out.println(jedis.ping());
        jedis.close();
    }

7.Mybatis整合Redis

二级缓存回顾

1、添加依赖

    <dependencies>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.25</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.25</version>
            <scope>test</scope>
        </dependency>


        <!--mybatis整合redis-->
        <dependency>
            <groupId>org.mybatis.caches</groupId>
            <artifactId>mybatis-redis</artifactId>
            <version>1.0.0-beta2</version>
        </dependency>
        
    </dependencies>

2、实体类

public class User implements Serializable{
    private Integer id;
    private String name;
    private Integer age;
    private Date birthday;
    private BigDecimal salary;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", birthday=" + birthday +
                ", salary=" + salary +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public BigDecimal getSalary() {
        return salary;
    }

    public void setSalary(BigDecimal salary) {
        this.salary = salary;
    }
}

3、工具类

public class MyBatisUtils {

    private static SqlSessionFactory factory = null;

    static{
        String resource = "Mybatis-config.xml";
        InputStream inputStream = null;
        try {
            inputStream = Resources.getResourceAsStream(resource);
        } catch (IOException e) {
            e.printStackTrace();
        }
        factory  = new SqlSessionFactoryBuilder().build(inputStream);
    }

    public static SqlSession getSession(){
        return factory.openSession();
    }
}

4、mapper接口

public interface UserMapper {
    User get(Integer id);
}

5、mapper映射文件

<mapper namespace="com.xj.cache.mapper.UserMapper">

    <cache/>

    <select id="get" resultType="com.xj.cache.bean.User">
        select * from user where id = #{id}
    </select>
</mapper>

6、主配置文件

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/Mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="com/xj/cache/mapper/UserMapper.xml"/>
    </mappers>

7、日志文件

# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.com.xj.cache=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

8、测试类

public class App {

    @Test
    public void testCache() throws Exception{
        SqlSession session = MyBatisUtils.getSession();
        UserMapper mapper = session.getMapper(UserMapper.class);
        User user = mapper.get(1);
        session.close();
        System.out.println(user);
        System.out.println("===========");

        SqlSession session2 = MyBatisUtils.getSession();
        UserMapper mapper2 = session2.getMapper(UserMapper.class);
        User user2 = mapper2.get(1);
        session.close();
        System.out.println(user2);
    }
}

Mybatis整合Redis

1、添加依赖

        <!--mybatis整合redis-->
        <dependency>
            <groupId>org.mybatis.caches</groupId>
            <artifactId>mybatis-redis</artifactId>
            <version>1.0.0-beta2</version>
        </dependency>

2、修改映射文件中添加的<cache>标签

<cache type="org.mybatis.caches.redis.RedisCache"/>

如果想更改默认配置,可以在资源文件中添加一个配置文件,例如,想更改数据库(默认存在0)

database=1

运行测试类,切换到数据库1

7.使用json缓存对象

1、添加依赖

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.47</version>
        </dependency>

2、自定义类

public class MyCache implements Cache {

    private String id;

    public MyCache(String id){
        this.id = id;
    }


    public String getId() {
        return id;
    }

    public void putObject(Object key, Object value) {
        Jedis jedis = JedisUtil.getJedis();

        jedis.hset(id.toString().getBytes(),key.toString().getBytes(), JSON.toJSONString(value).getBytes());

        jedis.close();
    }

    public Object getObject(Object key) {
        Jedis jedis = JedisUtil.getJedis();
        byte[] res = jedis.hget(id.toString().getBytes(), key.toString().getBytes());

        if(res == null){
            return null;
        }
        String jsonString = new String(res);

        List<User> users = JSON.parseArray(jsonString, User.class);

        jedis.close();
        return users;
        
    }

    public Object removeObject(Object key) {
        Jedis jedis = JedisUtil.getJedis();

        Long hdel = jedis.hdel(id.toString().getBytes(), key.toString().getBytes());
        jedis.close();
        return hdel;
    }

    public void clear() {
        Jedis jedis = JedisUtil.getJedis();

        Long hdel = jedis.hdel(id.toString().getBytes());
        jedis.close();
    }

    public int getSize() {
        return 0;
    }

    public ReadWriteLock getReadWriteLock() {
        return null;
    }
}

3、修改配置文件文件中的<cache>标签

<cache type="com.xj.cache.jsoncache.MyCache"/>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值