非关系型数据库redis
Redis非关系型数据库。
一般作为关系型数据库的补充,把它们的优点都表现出来,弥补各自的缺点。
一般作为缓存存在。
安装和配置
1. 在安装目录创建一个bat文件
内容:redis-server.exe redis.windows.conf
2. 设置配置文件redis.windows.conf中 maxheap 1024000000
数据结构(指的是redis中value的数据结构)
string 字符串
hash 相当于java中的map集合,有key有value
list 队列的数据结构
set 集合,不允许重复元素。无序的
sortedset 有序集合。不允许重复元素
命令
string
1. 存储: set key value
2. 获取: get key
3. 删除: del key
hash
1. 存储: hset key field value
2. 获取:
hget key field: 获取指定的field对应的值
hgetall key:获取所有的field和value
3. 删除: hdel key field
4. 删除所有del key
list
1. 添加:
- lpush key value: 将元素加入列表左表
- rpush key value:将元素加入列表右边
2.lrange key start end :范围获取
start:开始索引
end:结束索引
-1代表获取到list的结尾
3. lpop key: 删除列表最左边的元素,并将元素返回
rpop key: 删除列表最右边的元素,并将元素返回
4. 删除所有del key
set
1. 存储:sadd key value
2. 获取:smembers key:获取set集合中所有元素
3. srem key value:删除set集合中的某个元素
4. 删除所有del key
sortedset
1. 存储:zadd key score value
score越小,排名越靠前
2. 获取:zrange key start end [withscores]
start:开始索引
end:结束索引
-1代表获取到集合的结尾
3. 删除:zrem key value
4. 删除所有del key
通用命令
1. keys * : 查询所有的键
2. type key : 获取键对应的value的类型
Jedis
使用Java代码操作redis。
使用步骤
1. 导入jar包
2. 创建Jedis对象
3. 使用jedis对象调用方法操作redis数据库,方法的名称和redis命令的名称一致
4. 释放资源
jedis.close()
setex设置一个有有效期的数据
jedis.zrevrange()倒序查询sortedset
jedis连接池
JedisPool
直接创建对象使用即可
new JedisPool(config,"localhost",6379)
获取连接
Jedis jedis = jedisPool.getResource();
案例
1. 在index.html中,当页面加载完成后,发送异步请求。
2. 在后台Servlet中,获取请求。
3. Servlet调用Service,Service调用DAO
service调用DAO之前,先从redis中获取数据
4. DAO查询数据库,返回省份列表数据。
5. 依次返回到Servlet后, list需要转为json格式的字符串返回到前台。
6. 在前台index.html中,异步请求的回调函数位置,获取返回的json数据。解析json数据,通过dom操作,把数据展示到页面中。
缓存
前提:
1. 数据需要经常进行查询
2. 数据不经常发生变化
策略:
优先从读取速度比较快的地方获取数据。
先从redis中拿,如果有,直接返回
如果没有,查询数据库,同时把数据存入redis
优化:
1. 时间换空间
byte[] bytes = new byte[1024];
2. 空间换时间
3. 空间换空间
4. 时间换时间