一、为什么需要用Redis?
Redis(Remote Dictionary Server),一个基于内存的高性能key-value 数据库。针对关系型数据库性能瓶颈来设计的,处理关系型数据库不擅长做的业务场景。Redis 多用于项目的高速缓存,可以让项目性能更好。
补充:Redis的应用场景
1、缓存
当我们需要查询数据时,先去查询Redis的缓存,有就直接返回,没有再去关系型数据库查询,返回结果,最后把结果数据缓存到Redis(为下一次的查询)。(Redis是以key-value的形式缓存数据的,一般较多使用string类型,关于key,设计上要保证唯一,一种做法的类的全限定名+id,关于value,如果要存储对象,会直接把对象转成json格式,进行缓存。要查询时,查出来json格式的数据,再转成java对象返回。)
一般缓存都是对于不常变动的数据,如账号密码,一些(QQ、微信)等。
2、实时统计点赞总数
一些短视频,推文,博客等的点赞,热度高的时候,可能瞬时爆发非常多的请求,如果都是直接操作关系型数据库,就会对数据库造成很大压力,甚至崩溃。
这时,我们会使用Redis,先把每一次的点赞先存到Redis,每点一次就+1(因为Redis是直接操作内存的,无惧这点点击量),然后隔一段时间(服务器压力小点时)定时把数据存储到关系型数据中(数据落地)。
3、朋友圈点赞
这区别于上面的统计点赞数,因为统计点赞数,只是计算数量,在代码中也只是调用“incr key ”把值递增1,而朋友圈点赞,还需要知道谁给谁点了赞。
4、热门推荐
推荐的热门内容
,可以使用
list
形式存入R
edis
中。这种,不管是哪个用户或者游客,不管多少人去点击,都是去Redis中查,不用直接查关系型数据库。(不管谁进入这个网站,看到的首页都是一样的)
5、抽奖
6、好友推荐
二、安装Redis
1、下面提供其中一个版本的Redis:
链接:https://pan.baidu.com/s/1Z3QRpdMzUyPh8ODZJDgGEA
提取码:j8vl
2、初学时,直接全部next安装即可
3、安装完成后,进入Redis的安装目录
双击打开redis-cli.exe,出现以下端口号6379,表明安装成功:
注:当我们输入太多的命令后,可以使用命令“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类型
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类型
key | value | ||
game | LOL | CF | GOK |
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的驱动包:jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
(2)然后就可以按特定的步骤,操作Redis。(跟MySQL的“贾琏欲执事”类型)
步骤:
①创建Jedis连接池
②从连接池中获取Jedis对象
③操作(和Redis命令名字很像,根据方法名调用即可)
④释放资源
演示代码:
链接:https://pan.baidu.com/s/1o7UvxzbToOnnmfAotvaHaw
提取码:s5w7
2、Spring Data Redis
(1)Spring Data Redis是Spring Data提供的一种对于Redis的解决方案。
【注】Spring Data是Spring全家桶的的一支,基本上常用的数据存储方案,它都支持,其中也包括Redis。
(2)它是通过引入对应的依赖,然后注入里面的StringRedisTemplate来使用的,StringRedisTemplate继承了RedisTemplate。
在使用StringRedisTemplate时,需要先获取到对应的操作对象,opsForValue()操作string,opsForZSet() 操作zset,opsForHash() 操作Hash,opsForList() 操作List,opsForSet() 操作Set,然后再用操作对象去调用对应的方法。
演示代码:
链接:https://pan.baidu.com/s/1QcFW78j-vzYcLx3YuRkQsg
提取码:57z4
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/117790.html