四、Redis 常见数据结构
Redis 数据存储格式:
Redis 是 Map 类型的存储方式,其中所有的数据是采用 key:value 的形式存储。我们讨论的数据类型指的是存储数据的类型,也就是 value 部分的类型。key 部分永远都是字符串
Redis 存储 key:value 格式数据,key 为字符串,value 有 5 种数据类型。
value 的数据结构:
- 1、字符串类型:String
- 2、哈希类型:hash,hashmap
- 3、列表类型(支持重复元素):list,linkedList
- 4、集合类型(不允许重复元素):set,HashSet
- 5、有序(排序)集合类型(不允许重复元素,且元素有顺序):sortedset(ZSet),TreeSet
1、String 类型
字符串类型是 redis 最基本的类型,他允许存储任何形式的字符串,可以存储JSON转换过后的字符串。
一个字符串允许最大的存储容量为 512M。
可存储 “ 对象序列化 ”,“ Java 序列化 ”,“ 二进制的字符串 ”,“ Json 字符串 ”
字符串常用操作
// 字符串常用操作
// 1、存入字符串键值对
SET key value
// 2、获取一个字符串键值
GET key
// 3、批量存储字符串键值对
MSET key value [key value ...]
// 4、批量过去字符串键值
MGET key [key ...]
// 5、删除一个键或者多个键
DEL key [key ...]
// 6、设置一个键的过期时间(秒)
EXPIRE key seconds
普通的单值存储 key-value
// 1、单值缓存
SET key value
GET key
// 2、对象缓存
SET user:1 value(JSON格式数据)
MSET user:1:name zs user:1:balance 6666
MGET user:1:name user:1:balance
计数器 incr key 原子加,比如统计文章的阅读量
// 原子加减
// 1、将key中存储的数字值加1
INCR key
// 2、将key中存储的数字值减1
DECR key
// 3、将key所存储的值加上increment(依次递增指定的数量)
INCRBY key increment
// 4、将key所存储的值减去decrement(依次递减指定的数量)
DECRBY key decrement
// 计数器
INCR article:readcount:{文章id}
GET article:readcount:{文章id}
分布式锁 setnx key value
// 分布式锁
// 1、返回1代表获取锁成功,返回0代表获取锁失败
SETNX product:1001 true
// 2、执行业务操作
// 3、执行完业务释放锁
DEL product:1001
// 防止程序意外终止导致死锁
SET product:1001 true ex 10 nx
// key设置为多少秒(seconds)过期,value关联key
SETEX key seconds value
// 只有key不存在时设置可以的值
SETNX key value
// 分布式系统全局序列号
// redis批量生成序列号提升性能
INCRBY orderId 1000
分布式 session
// Web集群session共享
spring session + redis实现session共享
适用场景
场景 1、通过微信来进行海选投票时,每个微信号只能每隔四个小时投 1 票
场景 2、推荐的热门商品不能一直处于热门期,每种商品热门期维持 3 天,3 天后自动取消热门。
场景 3、热点新闻最大的特征时对时效性,如何自动控制热点新闻的时效性
场景 4、短信验证码,其它验证码
场景 5、比如点赞商品,视频,文章等的点赞量,点一下加一次。incr item:1
场景 6、分布式锁
场景 7、分布式 id 生成
解决方案( 两种方式 ):
1、在 Redis 中为大 V 用户设定用户信息,以用户主键和属性值作为 key,后台设定时间定时刷新即可。user:id:10001:focus:2000user:id:10001:fans:100000user:id:10001:blogs:4324
2、在 Redis 中以 JSON 格式存储大 V 用户,定时刷新set user:id:10001{id:10001,focus:2000,fans:100000,blogs:4324}
数据库中的热点数据 key 的命名规则:
表名 : 主键名 : 主键值 : 字段名eg1: order : id : 29437 : nameeg2: equip : id : 390472 : typeeg3: news : id : 202004 : title