看本文章的前提是已掌握Redis的基础操作,如插入、读取、删除数据等
示例使用ShardedJedisPool操作,实际开发可以使用RedisTemplate
目录:
1.解释
2.保存
3.读取
4.设置过期时间
5.模糊查询
6.应用场景
1.解释
Redis Hset 命令用于为哈希表中的字段赋值 。
如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。
如果字段已经存在于哈希表中,旧值将被覆盖。
保存的数据为一个key中包含若干field,可以针对field模糊查询
2.保存
redis Hset 命令基本语法如下:
redis 127.0.0.1:6379> HSET KEY_NAME FIELD VALUE
3.读取
redis 127.0.0.1:6379> HGET KEY_NAME FIELD_NAME
4.设置过期时间
不能为每个field设置过期时间,只能对key设置过期时间,对同一个key下所有field都生效
5.模糊查询
ShardedJedis jedis = shardedJedisPool.getResource();
ScanParams params = new ScanParams();
params.match("test*");
ScanResult<Entry<String, String>> scanResult = jedis.hscan("test_key", "0", params);
上面的代码是查询redis中key为“test_key”下所有field前缀为"test"的数据
6.使用场景
微博点赞操作,因为点赞是随手的动作,导致数据请求频繁,如果用户每次点赞都写入数据库,会对数据库造成很大压力,这时可以使用redis缓存点赞操作,然后定时从redis读取缓存,持久化至数据库
例如:缓存key为“weibo",点赞操作的field为"id:博文id:like:total", 值为点赞数量,每次有点赞可以将缓存数量+1
//参数 1.key 2.field 3.增加数量
jedis.hincrBy(key, field, 1);
取消点赞可以-1
jedis.hincrBy(key, field, -1);
hincrBy操作是单线程,无需担心应用多线程操作造成数据错误
定时持久化至数据库时可以使用模糊查询查询出缓存所有博文的点赞数量
ShardedJedis jedis = shardedJedisPool.getResource();
ScanParams params = new ScanParams();
params.match("*:like:total");
ScanResult<Entry<String, String>> scanResult = jedis.hscan("weibo", "0", params);
注意:hscan的第二个参数为cursor。"0"代表从头开始查询,返回scanResult.getStringCursor()获取下一次要查询的cursor,根据获取的cursor循环查询值,直到通过scanResult.getStringCursor()返回值为"0"停止查询