关于网站建设的调查报告自己做音乐网站
web/
2025/9/27 11:57:01/
文章来源:
关于网站建设的调查报告,自己做音乐网站,查重网站开发,国外做网站被动收入文章目录 String简单介绍常见命令应用场景 Hash简单介绍常见命令应用场景 List简单介绍常见命令应用场景 Set简单介绍常见命令应用场景 Sorted Set(Zset)简单介绍常见命令应用场景 Bitmap简单介绍常见命令应用场景 附录 Redis支持多种数据类型#xff0c;比如String、hash、li… 文章目录 String简单介绍常见命令应用场景 Hash简单介绍常见命令应用场景 List简单介绍常见命令应用场景 Set简单介绍常见命令应用场景 Sorted Set(Zset)简单介绍常见命令应用场景 Bitmap简单介绍常见命令应用场景 附录 Redis支持多种数据类型比如String、hash、list、Set、SortedSet、Streams、Bitmap、Hyperloglog、Geo物理位置等等在
官网也给出了说明本博客就挑一些比较常有的数据类型说说本文例子基于Redisson实现 String
简单介绍
在Redis中所有的数据都是key-value的数据结构存储的那么在Redis中这个string类型的value值只能存储String类型的数据其实不然redis中string类型的value值是可以支持多种类型的比如String、Number、Float、Bits等等但是最大还是只能存储512M。Redis中key也是string类型存储的所以最大也只能存储512M
常见命令
set、get命令就不演示了下面给出一些常有命令
批量设置多个key
mset tkey1 tvalue tkey2 111批量获取多个key值
mget tkey1 tkey2获取长度
strlen tkey字符串后面追加内容
append tkey tstring获取指定范围的字符
# 取0~3之间的字符返回1tst
getrange tkey 0 3key进行递增(整数)
# 返回1
incr ikey
# 递增指定大小的值返回124
incrby ikey 124key进行递增(浮点数)
# 设置初始浮点数值
set fkey 1.2
# 在原来基础上递增2.4返回3.6
incryfloat fkey 2.4加上key过期时间
expire tkey 10分布式锁实现set if not exists可以使用setnx单个命令也可以使用set结合nx命令来实现
# set tkey过期时间10秒nx如果键不存在时设置
set tkey aaa ex 10 nx
# setnx命令相当于set和nx命令一起用
setnx tkey aaaEX 设置指定的到期时间(以秒为单位)。 PX : 设置指定的到期时间(以毫秒为单 NX 仅在键不存在时设置键。 XX 只有在键已存在时才设置。 String 更多指令请参考官网文档https://redis.io/commands/?groupstring
应用场景
对于Redis String类型的应用场景也比较多比如很常有的做缓存处理也可以用于分布式锁、分布式ID 分布式锁的实现主要依赖于命令setnx 分布式ID主要是利用incr这个命令 基于Redis实现一个分布式ID生成器
package com.example.redis.common.handlers;import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;import javax.annotation.Resource;/*** pre* Redis分布式ID生成器* /pre** pre* 修改记录* 修改后版本: 修改人 修改日期: 2023/11/07 14:18 修改内容:* /pre*/
Component
public class RedisIdentifierGenerator implements IdentifierGenerator {Resourceprivate RedisTemplate redisTemplate;Overridepublic Number nextId(Object entity) {String key entity.getClass().getName();return redisTemplate.opsForValue().increment(key);}}
Hash
简单介绍
Hash哈希数据类型也是一种比较常见的数据结构相对于Redis的string类型而言其实就是多了一层key(field)所以说只要string类型适用的场景hash都是支持的
常见命令
hash设置key为hkeyfield为a的值
hset hkey a aaaa获取hkey的field值
hget hkey a设置多个field值
hmset hkey a 1 b 2 c 3 d 4获取多个field值
hmget hkey a b c d获取key所有的field
hkeys hkey获取key所有field的值
hvals hkey获取key所有fileld和值
hgetall hkey给key某个字段field添加值
hincrby hkey a 10对于Hash的更多命令请参考https://redis.io/commands/?grouphash
应用场景
对于hash的应用场景其实只要redis string类型适用的hash都是适用的不过hash这种特殊的数据结构还是适用于一些特殊场景的
存储一个对象类的数据这个对象的多个字段就对应hash的field存储一些统计类的数据比如访问量、点击量等等
如图如果要统计博客的pv、uv还有评论数量(evaluation_count)随着博客数量的增加存储到数据库里后面肯定会查询比较慢所以可以使用redis进行缓存 使用Redisson来写一个例子 Resourceprivate RedissonClient redissonClient;Testvoid contextLoads() throws ExecutionException, InterruptedException {RMapObject, Object redissonClientMap redissonClient.getMap(recordMap);MapString,Integer map new HashMap();map.put(pv , 1000);map.put(uv , 1500);map.put(evaluation_count,30)redissonClientMap.putAll(map);System.out.println(redissonClientMap.addAndGet(pv, 2));} List
简单介绍
redis中的数据类型存储有序的字符串列表元素是可以重复列表的最大长度为2^32-1个元素4294967295即每个列表超过40亿个元素
常见命令
左右添加元素
# 左边添加元素
lpush queueList a
lpush queueList b c# 右边添加元素
rpush queueList d e
左右弹出第一条
# 左边弹出一个元素
lpop queueList
# 右边弹出一个元素
rpop queueList左右弹出一个元素并且设置超时直到无数据弹出或者超时
blpop queueList 10
brpop queueList 10应用场景 微信公众号、微博等消息流列表 RDequeObject recordList redissonClient.getDeque(recordList);
recordList.addFirst(1.新闻1);
recordList.addFirst(2.新闻2);
recordList.addFirst(3.新闻3);
IntStream.range(0,3).forEach(a-{System.out.println(recordList.poll());
});消息队列使用redis也可以实现消息队列比如使用rpush/lpop实现简单队列blpop或者是brpop来实现阻塞读取队列补充说明同时stream、pub/sub(订阅发布模式)、sortedSet等等也是可以实现的 不过还是不建议使用Redis来实现消息队列因为我们已经有成熟的MQ框架使用redis实现队列有可能有下面的问题 存在内存可能会有数据丢失不能重复消费消费后不能回应没有ack确认机制
Set
简单介绍
Redis中的Set类型是无序集合最大存储数量为2^32-1大概有40亿左右添加、删除元素的时间复杂度都是O(1)
常见命令
添加一个或者多个元素
sadd skey a b c d e f g h获取所有的元素
smembers skey获取集合元素的个数
scard skey随机获取一个元素
srandmember skey随机弹出一个元素
spop skey弹出指定的元素
# 如果两个元素都有返回2
srem skey a g检查元素是否存在
# 元素存在返回1
sismember skey e获取前一个集合有而后面一个集合没有的元素
sdiff skey skey1获取集合的交集
sinter skey skey1获取集合的并集
sunion skey skey1Set的更多命令请参考https://redis.io/commands/?groupset
应用场景 抽奖程序利用spop跟standmember随机弹出元素 RSetString recordSet redissonClient.getSet(recordSet);
ListString members Lists.newArrayList(alice, tim,tom , 风清扬, jack );
recordSet.addAll(members);
RFutureSetString threeSet recordSet.removeRandomAsync(3);
RFutureSetString twoSet recordSet.removeRandomAsync(2);
RFutureSetString oneSet recordSet.removeRandomAsync(1);
System.out.println(三等奖threeSet.get());
System.out.println(二等奖twoSet.get());
System.out.println(一等奖oneSet.get());集合交集sinter、并集sunion的场景可以实现共同关注等场景 RSetObject tom redissonClient.getSet(tom);
tom.addAll(Lists.newArrayList(令狐冲,james,风清扬));
RSetObject jack redissonClient.getSet(jack);
jack.addAll(Lists.newArrayList(令狐冲,tim,jack));
System.out.println(共同关注的人tom.readIntersectionAsync(jack).get());sadd 集合存储实现点赞、签到的业务场景
Sorted Set(Zset)
简单介绍
相对于set来说sorted set是一种有序的set排序是根据每个元素的score排序的score相同时根据key的ASCII码排序 常见命令
批量添加元素
zadd z1 10 a 20 b 30 c 40 d 50 e 60 f 70 g 80 h 90 i根据分数从低到高
zrange z1 0 -1 withscore根据分数从高到低
zrevrange z1 0 -1 withscores根据分数范围取值
zrangebyscore z1 20 30移除元素
zrem z1 i获取有序集合个数
zcard z1给某个元素加分值
zincrby z1 20 a获取范围内的个数
zcount z1 50 60返回指定元素的索引值
# 假如d元素排在第4位索引值就返回3
zrank z1 d获取元素的分数
zscore z1 hSorted Set的更多命令请参考https://redis.io/commands/?groupsorted_set
应用场景 排行榜 RScoredSortedSetString school redissonClient.getScoredSortedSet(school);
school.add(60, tom);
school.add(60, jack);
school.add(60, tim);
school.addScore(tom, 20);
school.addScore(jack, 10);
school.addScore(tim, 30);
RFutureCollectionScoredEntryString collectionRFuture school.entryRangeReversedAsync(0, -1);
IteratorScoredEntryString iterator collectionRFuture.get().iterator();
System.out.println(成绩从高到低排序);
while(iterator.hasNext()) {ScoredEntryString next iterator.next();String value next.getValue();System.out.println(value);
}
RFutureCollectionScoredEntryString collectionRFuture1 school.entryRangeReversedAsync(0, 2);
IteratorScoredEntryString iterator1 collectionRFuture1.get().iterator();
System.out.println(成绩前三名);
while (iterator1.hasNext()) {System.out.println(iterator1.next().getValue());
}Bitmap
简单介绍
位图不是实际的数据类型而是String类型中定义的一种面向位的操作所以这个位图的最大存储量也是512M。可以容纳最少2^32不同的位可以在不同的位置设置0或者1
常见命令
设置位的值
# 将位2设置为1
setbit permit 2 1获取位的值
getbit permit 2获取key的为1的个数
# 获取位为1的总数
bitcount permit获取0或者1的第一位
# 获取key permit 位为1的第一个位置
bitpos permit 1获取多个bitmap的位操作比如 、|
# 获取bkey和permit这两个的运算并且赋值给hbit
bitop AND hbit bkey permit应用场景 实时的数据统计 比如人员的考勤打卡记录例如学生tom每次来上课就将相关的位记录位1
假如当月的第一天、第五天、第十天都来了
setbit tom 1 1
setbit tom 5 1
setbit tom 10 1如何每月考勤统计一下这个用户当月来了几天
bitcount tom 也可以应用于统计一个网站一天有多少用户访问例如用户ID为123、124、125的用户访问了csdn
setbit csdn:2023-11-08 123 1
setbit csdn:2023-11-08 124 1
setbit csdn:2023-11-08 125 1
...
# 统计一下当天的访问次数
bitcount csdn:2023-11-08 存储用户权限比如用1来表示有权限0表示没权限使用位图可以节省很大的存储空间
附录
Redis命令查询网站https://redis.io/commands/
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/82753.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!