Java中使用Redis(即学即用)

一、为什么需要用Redis?

Redis(Remote Dictionary Server),一个基于内存的高性能key-value 数据库。针对关系型数据库性能瓶颈来设计的,处理关系型数据库不擅长做的业务场景。Redis 多用于项目的高速缓存,可以让项目性能更好。

 

补充:Redis的应用场景

1、缓存

当我们需要查询数据时,先去查询Redis的缓存,有就直接返回,没有再去关系型数据库查询,返回结果,最后把结果数据缓存到Redis(为下一次的查询)。(Redis是以key-value的形式缓存数据的,一般较多使用string类型,关于key,设计上要保证唯一,一种做法的类的全限定名+id,关于value,如果要存储对象,会直接把对象转成json格式,进行缓存。要查询时,查出来json格式的数据,再转成java对象返回。)

一般缓存都是对于不常变动的数据,如账号密码,一些(QQ、微信)等。

Java中使用Redis(即学即用)_第1张图片

2、实时统计点赞总数

一些短视频,推文,博客等的点赞,热度高的时候,可能瞬时爆发非常多的请求,如果都是直接操作关系型数据库,就会对数据库造成很大压力,甚至崩溃。

这时,我们会使用Redis,先把每一次的点赞先存到Redis,每点一次就+1(因为Redis是直接操作内存的,无惧这点点击量),然后隔一段时间(服务器压力小点时)定时把数据存储到关系型数据中(数据落地)。

Java中使用Redis(即学即用)_第2张图片

 

3、朋友圈点赞

这区别于上面的统计点赞数,因为统计点赞数,只是计算数量,在代码中也只是调用“incr key  ”把值递增1,而朋友圈点赞,还需要知道谁给谁点了赞。

Java中使用Redis(即学即用)_第3张图片

4、热门推荐

在网站或者App的首页的 推荐的热门内容 ,可以使用 list 形式存入R edis 中。这种,不管是哪个用户或者游客,不管多少人去点击,都是去Redis中查,不用直接查关系型数据库。(不管谁进入这个网站,看到的首页都是一样的)
 

Java中使用Redis(即学即用)_第4张图片

5、抽奖

 

6、好友推荐

 

 

二、安装Redis

 

1、下面提供其中一个版本的Redis:

链接:https://pan.baidu.com/s/1Z3QRpdMzUyPh8ODZJDgGEA 
提取码:j8vl 

 

2、初学时,直接全部next安装即可

3、安装完成后,进入Redis的安装目录

Java中使用Redis(即学即用)_第5张图片

双击打开redis-cli.exe,出现以下端口号6379,表明安装成功:

 Java中使用Redis(即学即用)_第6张图片

 注:当我们输入太多的命令后,可以使用命令“clear”清除掉,使用窗口更干净

三、管理Redis

1、管理密码(初学时不建议搞)

(1)设置密码   config set requirepass 123

设置密码后,这时就需要登录认证了,不然就会报错(下图)

 

(2)登录  auth 123 (登录后就可以继续操作了)

(3)获取密码  config get requirepass

 

 (4)取消密码  config set requirepass ''

2、管理key 

exists key -> 判断某个key是否存在
expire key second -> 设置key的过期时间
persist key -> 取消key的过期时间
select index -> 切换数据库索引,范围是0 ~ 15共16个分区
move key index -> 把某个key-value移动到其他索引中
rename oldKey newKey -> 把oldKey重命名为newKey
info -> 查看当前服务器信息
flushdb -> 清空当前库中的数据
flushall -> 清空所有库中的数据

四、Redis如何操作数据

Redis支持多种数据类型:string,hash,list,set,zset。

1、string类型

(1)普通的字符串类型,表示一个简单值,结构上:
 
key value
name Cindy

 

 

 

(2)操作string类型的常用命令:

 
set key value -> 存入键值对 
get key -> 根据键取出值 
getset key value -> 返回旧值后存入新值 
incr key -> 把值递增1 
decr key -> 把值递减1 
incrby key num -> 偏移值 
append key 'value' -> 原值后拼接新内容 
setnx key value -> 存入键值对,键存在时不存入 
setex key timeout value -> 存入键值对,timeout表示失效时间,单位s 
setrange key index value -> 修改键对应的值,index表示开始的索引位置 
mset k1 v1 k2 v2 ... -> 批量存入键值对 
mget k1 k2 ... -> 批量取出键值 
del key -> 根据键删除键值对

2、hash类型/hash对象

(1)hash类型实际上就是map类型,它的内部可以有多个键值对,可以用于存储对象。

key

value

student hkey hvalue
name Cindy
age 18

 

 

 

 

 

(2)操作hash类型的常用命令:

hset key hashkey hashvalue -> 存入一个hash对象
hget key hashkey -> 根据hash对象键取去值
hincrby key hashkey 递增值 -> 递增hashkey对应的值
hexists key hashkey -> 判断hash对象是含有某个键
hlen key -> 获取hash对象键的数量
hkeys key -> 获取hash对象的所有键
hvals key -> 获取hash对象的所有值
hgetall key -> 获取hash对象的所有数据
hdel key hashkey -> 根据hashkey删除hash对象键值对
同样有hsetnx,其作用跟用法和setnx一样

3、list类型

(1)list类型能直接操作首尾元素(队列)
 
    key                value
game LOL CF GOK

 

 

 
(2)操作list类型的常用命令:
rpush key value -> 往列表右边添加数据
lpush key value -> 往列表左边添加数据
lpop key -> 弹出列表最左边的数据
rpop key -> 弹出列表最右边的数据
lrange key start end -> 范围显示列表数据,全显示则设置0 -1
linsert key before/after refVal newVal -> 参考值之前/后插入数据
lset key index value -> 根据索引修改数据
lrem key count value -> 在列表中按照个数删除数据
ltrim key start end -> 范围截取列表
lindex key index -> 根据索引取列表中数据
llen key -> 获取列表长度

4、set类型

底层是哈希表,存入的元素,无序不可重复,可以通过命令来取到交、并、差集。

操作set类型的常用命令:

sadd key value -> 往set集合中添加元素
smembers key -> 列出set集合中的元素
srem key value -> 删除set集合中的元素
spop key count -> 随机弹出集合中的元素
sdiff key1 key2 -> 返回key1中特有元素
sdiffstore var key1 key2 -> 返回key1中特有元素存入另一个set集合
sinter key1 key2 -> 返回两个set集合的交集
sinterstore var key1 key2 -> 返回两个set集合的交集存入另一个set集合
sunion key1 key2 -> 返回两个set集合的并集
sunionstore var key1 key2 -> 返回两个set集合的并集存入另一个set集合
smove key1 key2 value -> 把key1中的某元素移入key2中
scard key -> 返回set集合中元素个数
sismember key value -> 判断集合是否包含某个值
srandmember key count -> 随机获取set集合中元素

5、zset类型

操作zset类型的常用命令:

zadd key num name -> 存入数值和名称
zrange key start end -> 按照数值升序输出名称
zrangebyscore key min max [withscores] -> 按照数值范围升序输出名称
zrevrange key start end -> 按照数值降序输出名称
zrevrangebyscore key max min [withscores] -> 按照数值范围降序输出名称
zrem key name -> 删除名称和数值
zincrby key num name -> 偏移名称对应的数值
zrank key name -> 升序返回排名
zrevrank key name -> 降序返回排名
zremrangebyscore key max min [withscores] -> 根据分数范围删除元素
zremrangebyrank key start end -> 根据排名删除元素
zcard key -> 返回元素个数
zcount key min max -> 按照分数范围统计个数

五、Java中如何操作Redis

在Java中操作Redis的手段还是很多的,但是下面只介绍常用的两种。

1、Jedis

(1)跟MySQL的使用类似,Java是不认识Redis的,所以要加入驱动包。依赖:

 
 
    redis.clients 
    jedis 

(2)然后就可以按特定的步骤,操作Redis。(跟MySQL的“贾琏欲执事”类型)

步骤:

①创建Jedis连接池

②从连接池中获取Jedis对象

③操作(和Redis命令名字很像,根据方法名调用即可)

Java中使用Redis(即学即用)_第7张图片

④释放资源

Java中使用Redis(即学即用)_第8张图片

演示代码:

链接:https://pan.baidu.com/s/1o7UvxzbToOnnmfAotvaHaw 
提取码:s5w7 
 

 

2、Spring Data Redis

(1)Spring Data Redis是Spring Data提供的一种对于Redis的解决方案。

【注】Spring Data是Spring全家桶的的一支,基本上常用的数据存储方案,它都支持,其中也包括Redis。

Java中使用Redis(即学即用)_第9张图片

(2)它是通过引入对应的依赖,然后注入里面的StringRedisTemplate来使用的,StringRedisTemplate继承了RedisTemplate。

在使用StringRedisTemplate时,需要先获取到对应的操作对象,opsForValue()操作string,opsForZSet() 操作zset,opsForHash() 操作Hash,opsForList() 操作List,opsForSet() 操作Set,然后再用操作对象去调用对应的方法。

Java中使用Redis(即学即用)_第10张图片

演示代码:

链接:https://pan.baidu.com/s/1QcFW78j-vzYcLx3YuRkQsg 
提取码:57z4 
 

你可能感兴趣的:(┉┇Database,redis)