Day14_Redis 和 Jedis

一、Redis

1.非关系型数据库 和 redis

在这里插入图片描述
在这里插入图片描述

Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供测试数据,50个并发执行100000个请求,读的速度是110000次/s,写的速度是81000次/s,且Redis通过提供多种键值数据类型来适应不同场景下的存储需求,速度是非常之快的。

2.redis的安装

P417 03_redis_下载&安装
在这里插入图片描述

3.redis的数据结构

	1. redis的数据结构:
		* redis存储的是:key,value格式的数据,其中key都是字符串,value有5种不同的数据结构
			* value的数据结构:
				1) 字符串类型 string
				2) 哈希类型 hash : map格式  
				3) 列表类型 list : linkedlist格式。支持重复元素
				4) 集合类型 set  : 不允许重复元素
				5) 有序集合类型 sortedset:不允许重复元素,且元素有顺序

在这里插入图片描述

4.操作redis的数据

刚刚学了redis的五种数据结构,接下来就要针对每一种数据结构进行操作

字符串String类型

		1. 存储: set key value
		2. 获取: get key
		3. 删除: del key

在这里插入图片描述
哈希类型 hash

	哈希类型 hash
		1. 存储: hset key field value
			127.0.0.1:6379> hset myhash username lisi

			127.0.0.1:6379> hset myhash password 123

		2. 获取: 
			* hget key field: 获取指定的field对应的值
				127.0.0.1:6379> hget myhash username
				"lisi"
			* hgetall key:获取所有的field和value
				127.0.0.1:6379> hgetall myhash
				1) "username"
				2) "lisi"
				3) "password"
				4) "123"
				
		3. 删除: hdel key field
			127.0.0.1:6379> hdel myhash username

在这里插入图片描述
列表类型 list
在这里插入图片描述

	列表类型 list:可以添加一个元素到列表的头部(左边)或者尾部(右边)
		1. 添加:
			1. lpush key value: 将元素加入列表左表
				
			2. rpush key value:将元素加入列表右边
				
				127.0.0.1:6379> lpush myList a
				(integer) 1
				127.0.0.1:6379> lpush myList b
				(integer) 2
				127.0.0.1:6379> rpush myList c
				(integer) 3
				
		2. 获取:
			* lrange key start end :范围获取
				127.0.0.1:6379> lrange myList 0 -1  (这是0-1,表示获取所有)
				1) "b"
				2) "a"
				3) "c"
		3. 删除:
			* lpop key: 删除列表最左边的元素,并将元素返回
			* rpop key: 删除列表最右边的元素,并将元素返回

在这里插入图片描述
集合类型 set

集合类型 set : 不允许重复元素
		1. 存储:sadd key value

			127.0.0.1:6379> sadd myset a
			(integer) 1
			127.0.0.1:6379> sadd myset a
			(integer) 0
			
		2. 获取:smembers key:获取set集合中所有元素

			127.0.0.1:6379> smembers myset
			1) "a"

		3. 删除:srem key value:删除set集合中的某个元素	

			127.0.0.1:6379> srem myset a
			(integer) 1

在这里插入图片描述
有序集合类型 sortedset

	有序集合类型 sortedset:不允许重复元素,且元素有顺序.每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

		1. 存储:zadd key score value

			127.0.0.1:6379> zadd mysort 60 zhangsan
			(integer) 1
			127.0.0.1:6379> zadd mysort 50 lisi
			(integer) 1
			127.0.0.1:6379> zadd mysort 80 wangwu
			(integer) 1
			
		2. 获取:zrange key start end [withscores]

			127.0.0.1:6379> zrange mysort 0 -1
			1) "lisi"
			2) "zhangsan"
			3) "wangwu"

			127.0.0.1:6379> zrange mysort 0 -1 withscores (把score也拿出来)
			1) "zhangsan"
			2) "60"
			3) "wangwu"
			4) "80"
			5) "lisi"
			6) "500"
			
		3. 删除:zrem key value

			127.0.0.1:6379> zrem mysort lisi
			(integer) 1

在这里插入图片描述
通用命令

	通用命令
		1. keys * : 查询所有的键
		2. type key : 获取键对应的value的类型
		3. del key:删除指定的key value

在这里插入图片描述

5.持久化

P423 09_redis_持久化_RDB
P424 10_redis_持久化_AOF

	1. redis是一个内存数据库,当redis服务器重启,获取电脑重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中。
	2. redis持久化机制:
		1. RDB:默认方式,不需要进行配置,默认就使用这种机制
			* 在一定的间隔时间中,检测key的变化情况,然后持久化数据
			1. 编辑redis.windwos.conf文件
				#(15分钟内至少有一个key发生了改变就持久化一次,持久化就是将内存中的数据写到硬盘上)
				save 900 1
				# (5分钟内至少有10个key发生了改变就持久化一次)
				save 300 10
				# (60s内至少有10000个key发生了改变就持久化一次)
				save 60 10000
				
			2. 重新启动redis服务器,并指定配置文件名称
				D:\JavaWeb2018\day23_redis\资料\redis\windows-64\redis-2.8.9>redis-server.exe redis.windows.conf	
			
		2. AOF:日志记录的方式,可以记录每一条命令的操作。可以每一次命令操作后,持久化数据
			1. 编辑redis.windwos.conf文件
				appendonly no(关闭aof) --> appendonly yes (开启aof)
				
				# appendfsync always : 每一次操作都进行持久化
				appendfsync everysec : 每隔一秒进行一次持久化
				# appendfsync no	 : 不进行持久化
redis尽管可以持久化,但是还是不安全的,想要安全就找关系型数据库去

二、Jedis

1.jedis的jar包

Java客户端 Jedis
	* Jedis: 一款java操作redis数据库的工具.
	* 需要下载jedis的jar包

在这里插入图片描述

2.快速入门

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.Jedis操作各种redis中的数据结构

		1) 字符串类型 string
			set
			get
			
		2) 哈希类型 hash : map格式  
			hset
			hget
			hgetAll
			
		3) 列表类型 list : linkedlist格式。支持重复元素
			lpush / rpush
			lpop / rpop
			lrange start end : 范围获取
	
		4) 集合类型 set  : 不允许重复元素
			sadd
			smembers:获取所有元素

		5) 有序集合类型 sortedset:不允许重复元素,且元素有顺序
			zadd
			zrange

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.Jedis连接池

	* jedis连接池: JedisPool
		* 使用:
			1. 创建JedisPool连接池对象
			2. 调用方法 getResource()方法获取Jedis连接

在这里插入图片描述
在这里插入图片描述

5.Jedis连接池工具类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、案例

案例需求:
	1. 提供index.html页面,页面中有一个省份 下拉列表
	2. 当 页面加载完成后 发送ajax请求,加载所有省份
* 注意:使用redis缓存一些不经常发生变化的数据。
	* 数据库的数据一旦发生改变,则需要更新缓存。
		* 数据库的表执行 增删改的相关操作,需要将redis缓存数据情况,再次存入
		* 在service对应的增删改方法中,将redis数据删除。

在这里插入图片描述

1.准备工作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.代码编写

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ProvinceServiceImpl.class

public class ProvinceServiceImpl implements ProvinceService {

    private ProvinceDao dao = new ProvinceDaoImpl();
    
    @Override
    public List<Province> findAll() {
        return dao.findAll();
    }

    //使用redis缓存
    @Override
    public String findAllJson() {

        //获取redis客户端连接,从redis中查询数据
        Jedis jedis = JedisPoolUtils.getJedis();
        String province_json = jedis.get("province");

        //判断 province_json 数据是否为null
        if(province_json == null || province_json.length() == 0){
            //redis缓存中没有数据
            System.out.println("redis中没数据,查询数据库...");

            List<Province> ps = dao.findAll();

            //将list序列化为json
            ObjectMapper mapper = new ObjectMapper();
            try {
                province_json = mapper.writeValueAsString(ps);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }

            //将json数据存入redis
            jedis.set("province",province_json);

            //归还连接
            jedis.close();

        }else{
            System.out.println("redis中有数据,查询缓存...");
        }

        return province_json;
    }
}

在这里插入图片描述

3.运行结果

在这里插入图片描述
在这里插入图片描述

感谢浏览和收藏

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你的甲乙丙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值