Redis开发文档
AI-摘要
切换
Tianli GPT
AI初始化中...
介绍自己
生成本文简介
推荐相关文章
前往主页
前往tianli博客
一、pom.xml依赖引入
<!--SpringBoot封装stater场景启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--redis连接池-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
二、application.yml文件中的常用配置
spring:
redis:
host: 192.168.159.166
port: 6379
password: 123
database: 0
lettuce:
pool:
max-wait: -1 # 最长等待时间
min-idle: 2 # 最小连接数
max-idle: 10 # 最da连接数
max-active: 5 # 最大活动数
三、redis配置文件
配置redis以JSON的格式存储,同时不需要手动转换成JSON对象(但是会占用额外空间存储格式化信息)。
@Configuration
public class RedisAutoConfiguration {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
template.setKeySerializer(RedisSerializer.string());
//将任何Java对象转换为JSON格式的二进制数据,也可以将JSON格式的二进制数据转换为Java对象。
template.setValueSerializer(RedisSerializer.json());
template.setHashKeySerializer(RedisSerializer.string());
//将任何Java对象转换为JSON格式的二进制数据,也可以将JSON格式的二进制数据转换为Java对象。
template.setHashValueSerializer(RedisSerializer.json());
return template;
}
}
四、五种基本数据结构
通用指令
- keys parttern 查询key
(parttern即通配符,不是正则表达式,例如 keys a? 匹配以a开头的长度为2的key)
- del key 删除key
- exists key 获取key是否存在
- type key 获取key的类型
- expire key seconds 为指定key设置有效期,单位秒
- pexpire key milliseconds 为指定key设置有效期,单位毫秒
- ttl key 获取key的有效时间,单位秒
- pttl key 获取key的有效时间,单位毫秒
- persist key 切换key从时效性转换为永久性
- rename key newkey
- renamenx key newkey 改名,nx就是not exists不存在才能修改
- select index 切换数据库
- move key db 数据移动到另一个数据库
- dbsize 数据库中数据总数
- flushdb 清除当前库
- flushall 清空所有库
string类型指令
字符串(strings):字符串是Redis最基本的数据类型,它可以存储任何形式的文本或二进制数据,如数字,文本,图片,视频等。字符串的应用场景有:
- 缓存:可以将需要频繁访问的数据,如用户信息,商品信息,新闻文章等,缓存在Redis中,提高访问速度和降低数据库压力。
- 计数器:可以利用字符串的自增或自减功能,实现计数器的功能,如网站访问量,商品销量,用户积分等。
- 分布式锁:可以利用字符串的原子性和过期时间,实现分布式锁的功能,如秒杀活动,订单支付等。
常用指令:
- set key value 添加/修改数据
- get key 获取数据
- mset key1 value1 key2 value2 … 添加/修改多个数据
- mget key1 key2 … 获取多个数据
- strlen key 获取数据字符个数(字符串长度)
- append key value 追加信息到原始信息后部(如果原始信息存在就追加,否则新建)
- incr key 设置数值数据增加指定范围的值
- incrby key increment
- incrbyfloat key increment
- decr key 设置数值数据减少指定范围的值
- decrby key increment
- setex key seconds value 设置数据具有指定的生命周期
- psetex key milliseconds value
Hash类型指令
哈希(hashes):哈希是一种键值对的集合,它可以存储一个对象的多个属性和值,在Redis中为:Map
- 存储对象:可以将一个对象的各个字段和值存储在哈希中,方便进行增删改查操作。与字符串相比,哈希可以对对象的部分属性进行修改或获取,而不需要序列化或反序列化整个对象。
- 节省空间:当对象的属性较少时,使用哈希可以节省空间,因为哈希会根据键值对的数量动态分配内存空间。
常用指令:
这里主要是增删改查第二个Map中的内容,如果想删除整个对象,采用删除String类型的指令。参照上面的String指令,前面都加上h。
- hset key field value 添加/修改数据
- hget key field 获取key对象的field字段的数据
- hgetall key 获取key对象的所有字段信息
- hkeys key 获取哈希表中所有的字段名
- hvals key 获取哈希表中所有的字段值
- hdel key field1 [field2] 删除key对象的field1、field2字段的数据
- hmset key field1 value1 field2 value2 … 添加/修改多个数据
- hmget key field1 field2 … 获取多个数据
- hlen key 获取哈希表中字段的数量
- hexists key field 获取哈希表中是否存在指定的字段
- hincrby key field increment 设置指定字段的数值数据增加指定范围的值
- hincrbyfloat key field increment
List类型指令
列表(lists):列表是一种有序的字符串序列,它可以在两端进行插入或删除操作。列表的应用场景有:
- 消息队列:可以利用列表的先进先出(FIFO)或后进先出(LIFO)特性,实现消息队列的功能,如异步任务处理,邮件发送等。
- 最新列表:可以利用列表的有序性和长度限制,实现最新列表的功能,如最新消息,最新评论等。
常用指令:
- lpush key value1 [value2] …… 在左边添加/修改数据
- rpush key value1 [value2] …… 在右边添加/修改数据
- lrange key start stop 获取数据(循环变量) ,start和stop是下标,0开始,stop为-1代表到末尾
- lindex key index 从左获取key对象的index索引处的值
- llen key
- lpop key 获取并弹出数据
- rpop key
Set类型
集合(sets):集合是一种无序且唯一的字符串集合,它可以进行添加,删除和判断是否存在等操作。集合的应用场景有:
- 去重:可以利用集合的唯一性特性,实现去重的功能,如每个用户只能参与一次活动,每个用户只能领取一次优惠券等。
- 交并差集:可以利用集合提供的交并差集操作,实现一些集合运算的功能,如共同好友,共同兴趣爱好等。
常用指令:
- sadd key member1 [member2] 添加数据
- smembers key 获取全部数据
- srem key member1 [member2] 删除数据
- scard key 获取集合数据总量
- sismember key member 判断集合中是否包含指定数据
- srandmember key [count] 随机获取集合中指定数量的数据
- spop key [count] 随机获取集合中的某个数据并将该数据移出集合
- sinter key1 [key2] 求两个集合的交、并、差集
- sunion key1 [key2]
- sdiff key1 [key2]
- sinterstore destination key1 [key2] 求两个集合的交、并、差集并存储到指定集合中
- sunionstore destination key1 [key2]
- sdiffstore destination key1 [key2]
- smove source destination member 将指定数据从原始集合中移动到目标集合中
Sorted_set类型(ZSet)
有序集合(sorted sets):有序集合是一种有序且唯一的字符串集合,在set的基础上,可以给每个元素赋予一个分数(score),根据分数进行排序。有序集合的应用场景有:
- 排行榜:可以利用有序集合的排序和范围查询功能,实现排行榜的功能,如热门歌曲榜单,热门文章榜单等。
- 延时队列:可以利用有序集合的分数表示时间戳,实现延时队列的功能,如定时任务调度,订单超时取消等。
常用指令:
- zadd key score1 member1 [score2 member2] 添加数据
- zrange key start stop [WITHSCORES] 正序获取全部数据
- zrevrange key start stop [WITHSCORES] 逆序获取全部数据
- zrem key member [member ...] 删除数据
- zrangebyscore key min max [WITHSCORES] [LIMIT] (这个命令的作用是返回有序集合 key 中分数在 min 和 max 之间的所有成员,按照分数从小到大的顺序排列。如果指定了 WITHSCORES 选项,那么还会返回每个成员的分数值。如果指定了 LIMIT 选项,那么还可以限制返回的成员数量和偏移量。 )
- zrevrangebyscore key max min [WITHSCORES] 从大到小排序,并返回每个成员的分数值。
- zremrangebyrank key start stop 条件删除数据
- zremrangebyscore key min max
- zcard key start stop 获取集合数据总量
- zcount key min max
- zrank key member 排序后,获取数据对应的索引(排名),从0开始
- zrevrank key member
- zscore key member score值获取与修改
- zincrby key increment member
- zinterstore destination numkeys key [key ...] 集合交、并操作,并存储 (numkeys 是参与运算的key的个数)
- zunionstore destination numkeys key [key ...]
五、三种高级数据结构
Bitmaps
Bitmaps:Bitmaps是一种利用字符串的位操作来实现的数据结构,它可以用来存储和统计大量的布尔值,节省空间和提高性能。Bitmaps的应用场景有:
- 用户签到:可以利用Bitmaps来记录用户每天是否签到,每个用户对应一个字符串,每个字符串有365位,每一位表示一天,如果签到则为1,否则为0。这样可以方便地统计用户的签到天数,连续签到天数,以及全站的签到情况。
- 用户活跃度:可以利用Bitmaps来记录用户每天是否活跃,每个用户对应一个字符串,每个字符串有30位,每一位表示一天,如果活跃则为1,否则为0。这样可以方便地统计用户的月活跃度,以及全站的活跃情况。
- 用户画像:可以利用Bitmaps来记录用户的各种属性和偏好,每个用户对应一个字符串,每个字符串有若干位,每一位表示一个特征,如果具有则为1,否则为0。这样可以方便地进行用户分群和推荐。
常用指令:
SETBIT key offset value:将指定key的指定offset位置的bit设置为value(0或1)。
GETBIT key offset:获取指定key的指定offset位置的bit值(0或1)。
BITOP operation destkey key [key …]:对一个或多个key进行位运算(AND,OR,XOR,NOT),并将结果保存到destkey中。
BITCOUNT key [start end]:统计指定key中,指定范围内(默认全部)bit值为1的个数。
BITPOS key bit [start end]:返回指定key中,指定范围内(默认全部)第一个bit值为bit(0或1)的位置。
Hyperloglogs
Hyperloglogs:Hyperloglogs是一种用于估计集合基数(不同元素的数量)的概率数据结构。它们可以用来统计大量数据的唯一性,牺牲一定的精度换取节省空间。Hyperloglogs的应用场景有:
- 网站访问量:可以利用Hyperloglogs来记录网站每天的独立访客(UV)数量,每个网站对应一个Hyperloglog,每个访客的IP地址或Cookie作为一个元素添加到Hyperloglog中。这样可以方便地估计网站的流量和受众规模。
- 在线用户数:可以利用Hyperloglogs来记录在线游戏或社交平台每天的在线用户数量,每个游戏或平台对应一个Hyperloglog,每个用户的ID或账号作为一个元素添加到Hyperloglog中。这样可以方便地估计在线服务的人气和活跃度。
- 数据去重:可以利用Hyperloglogs来记录大数据分析过程中的数据去重情况,每个数据集对应一个Hyperloglog,每条数据的唯一标识作为一个元素添加到Hyperloglog中。这样可以方便地估计数据集的真实规模和重复率。
常用指令:
PFADD key element [element …]:向指定key的Hyperloglog中添加一个或多个元素。
PFCOUNT key [key …]:返回一个或多个key的Hyperloglog的近似基数。
PFMERGE destkey sourcekey [sourcekey …]:将一个或多个key的Hyperloglog合并为一个Hyperloglog,并保存到destkey中。
GEO
GEO:GEO是一种用于存储和操作地理位置信息(经度和纬度)的数据结构。它们可以用来实现地理位置相关的功能,如距离计算,附近查询等。GEO的应用场景有:
- 位置服务:可以利用GEO来记录用户或商家的位置信息,每个用户或商家对应一个GEO元素,包含名称和经纬度坐标。这样可以方便地实现位置服务的功能,如导航,路线规划等。
- 附近搜索:可以利用GEO来记录各种资源或服务的位置信息,每种资源或服务对应一个GEO元素,包含名称和经纬度坐标。这样可以方便地实现附近搜索的功能,如附近餐厅,附近加油站等。
- 地理围栏:可以利用GEO来记录特定区域或范围的位置信息,每个区域或范围对应一个GEO元素,包含名称和经纬度坐标。这样可以方便地实现地理围栏的功能,如进出提醒,位置授权等。
常用指令:
GEOADD key longitude latitude member [longitude latitude member …]:将一个或多个地理位置信息(经度,纬度,名称)添加到指定key中。
GEOHASH key member [member …]:返回一个或多个地理位置信息的Geohash编码。
GEOPOS key member [member …]:返回一个或多个地理位置信息的经纬度坐标。
GEODIST key member1 member2 [unit]:返回两个地理位置信息之间的距离,可以指定单位(默认为米)。
GEORADIUS key longitude latitude radius unit [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]:根据给定的经纬度坐标和半径,查询指定key中与中心点距离在给定范围内的地理位置信息。可以指定返回结果的格式和排序方式,也可以将结果保存到另一个key中。
GEORADIUSBYMEMBER key member radius unit [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]:根据给定的地理位置信息和半径,查询指定key中与该位置距离在给定范围内的其他地理位置信息。其他参数同GEORADIUS命令。
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 Gavana
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果