Redis的学习记录


现在工作中没有用到redis,但是经常在各种项目介绍中看到,所以准备学习一下。
简单学习后感觉上手还是非常简单的,就是key-value的进阶,多了一些数据类型的支持,并且在许多排行榜之类需要排序的功能中,大量数据的排序性能非常高,消耗也低。这篇学习之后打算之后做一个spring-boot+redis的项目练练手。

Redis介绍

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis支持数据的备份,即master-slave模式的数据备份。
性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

上面这段是从官方文档里抄过来的,很全面,也很明了。我自己对redis的初步看法。

  • 上手简单,不用安装,1mb多的文件解压出来就能用。
  • 能支持多种数据结构,应用范围广
  • 支持发布/订阅,脚本,事务功能
  • 自带性能检测,数据备份等功能

Redis基本语法

redis的储存语法格式一般为:

setcommand keyname keyvalue

不同数据类型的command分别为:
字符串(String):set
Hash:hmset。hash的 keyvalue的内容略微有点不一样,是一个string类型的field和value的映射表。如下

redis 127.0.0.1:6379> hmset hashTest name “gfk” age “23” sex “man”

List:lpush
set:sadd
sort set:zadd。有序集合和set一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

redis 127.0.0.1:6379> hget hashTest name
“gfk”
redis 127.0.0.1:6379> zadd setTest 1 a
(integer) 1
redis 127.0.0.1:6379> zadd setTest 2 aa
(integer) 1
redis 127.0.0.1:6379> zadd setTest 3 aaa
(integer) 1
redis 127.0.0.1:6379> zadd setTest 4 ab
(integer) 1
redis 127.0.0.1:6379> zadd setTest 5 ac
(integer) 1
redis 127.0.0.1:6379> zadd setTest 2 ad
(integer) 1
redis 127.0.0.1:6379> zrange setTest 0 5
1)“a”
2)“aa”
3)“ad”
4)“aaa”
5)“ab”
6)“ac”

HyperLogLog:pfadd。Redis 在 2.8.9 版本添加了 HyperLogLog 结构。
Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。(基数和set集合的size是一个意思)

查询语法格式:

searchcommand keyname (hash列表等会有valuename或者范围)

不同数据类型的command分别为:
字符串(String):get
Hash:hget。hash的查询出来keyname还可以跟上fieldname,当然也可以直接用hgetall来获取所有值

redis 127.0.0.1:6379> hget hashTest name

List:lrange,后面跟上查询范围

redis 127.0.0.1:6379> lrange listTest 0 5
1)“cd”
2)“vc”
3)“b”
4)“a”

set:smembers
sort set:有序集合的查询种类比较多,有字典区间、索引区间和分数等方式去查询。

ZRANGE key start stop [WITHSCORES] 通过索引区间返回有序集合成指定区间内的成员
ZRANGEBYLEX key min max [LIMIT offset count] 通过字典区间返回有序集合的成员
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] 通过分数返回有序集合指定区间内的成员

HyperLogLog:pfcount。

以上就是一些基本的插入查询语法,更详细的语法就不一一列举了 ,可以去Redis官网看 https://www.redis.net.cn/tutorial/3513.html

Redis的应用场景

热点数据的缓存

Redis的核心功能,常用数据的缓存可以减少数据库io,储存类型多。

排行榜数据

当数据量大时,关系型数据库在排行榜方面查询速度普遍偏慢。而用redis的SortedSet进行热点数据的排序,哪怕数据量非常大也非常快。

限时业务的运用

redis中可以使用expire命令设置一个键的生存时间,到时间后redis会删除它。利用这一特性可以运用在限时的优惠活动信息、手机验证码等业务场景。

分布式锁

这个主要利用redis的setnx命令进行,setnx:"set if not exists"就是如果不存在则成功设置缓存同时返回1,否则返回0 ,这个特性在俞你奔远方的后台中有所运用,因为我们服务器是集群的,定时任务可能在两台机器上都会运行,所以在定时任务中首先 通过setnx设置一个lock,如果成功设置则执行,如果没有成功设置,则表明该定时任务已执行。 当然结合具体业务,我们可以给这个lock加一个过期时间,比如说30分钟执行一次的定时任务,那么这个过期时间设置为小于30分钟的一个时间 就可以,这个与定时任务的周期以及定时任务执行消耗时间相关。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值