首页 > 其他 > 详细

Redis数据类型及常用命令

时间:2021-06-09 09:36:44      阅读:24      评论:0      收藏:0      [点我收藏+]

redis 数据存储格式

1.redis 自身是一个 Map,其中所有的数据都是采用 key : value 的形式存储

2.数据类型指的是存储的数据的类型,也就是 value 部分的类型,key 部分永远都是字符串

String类型数据操作

1.添加/修改数据

set key value

mset key1 value1 key2 value2 …

2.获取数据

get key

mget key1 key2 …

3.删除数据

del key

4.获取数据字符个数(字符串长度)

strlen key

5.追加信息到原始信息后部(如果原始信息存在就追加,否则新建)

append key value

string 类型数据的扩展操作

业务场景

大型企业级应用中,分表操作是基本操作,使用多张表存储同类型数据,但是对应的主键 id 必须保证统一性,不能重复。Oracle 数据库具有 sequence 设定,可以解决该问题,但是 MySQL数据库并不具有类似的机制,那么如何解决?

解决方案

6.设置数值数据增加指定范围的值

incr key

incrby key increment

incrbyfloat key increment

7.设置数值数据减少指定范围的值

decr key

decrby key increment

业务场景

”最强女生“启动海选投票,只能通过微信投票,每个微信号每 4 小时只能投1票。电商商家开启热门商品推荐,热门商品不能一直处于热门期,每种商品热门期维持3天,3天后自动取消热门。新闻网站会出现热点新闻,热点新闻最大的特征是时效性,如何自动控制热点新闻的时效性。

解决方案

8.设置数据具有指定的生命周期

setex key seconds value seconds:秒

psetex key milliseconds value milliseconds:毫秒

setex后,如果再set,则生命周期消失

string 类型数据操作的注意事项

1.数据操作不成功的反馈与数据正常操作之间的差异

① 表示运行结果是否成功

(integer) 0 →false 失败

(integer) 1 → true 成功

② 表示运行结果值

(integer) 3 → 3 3个

(integer) 1 → 1 1个

2.数据未获取到:(nil)等同于null

3.数据最大存储量: 512MB

4.数值计算最大范围(java中的long的最大值)

9223372036854775807

string 类型应用场景

业务场景

主页高频访问信息显示控制,例如新浪微博大V主页显示粉丝数与微博数量

解决方案

1.在redis中为大V用户设定用户信息,以用户主键和属性值作为key,后台设定定时刷新策略即可

eg: user?:id:3506728370:fans → 12210947

eg: user?:id:3506728370:blogs → 6164

eg: user?:id:3506728370:focuss → 83

2.在redis中以json格式存储大V用户信息,定时刷新(也可以使用hash类型)

eg: user?:id:3506728370

→{"id":3506728370,"name":"春晚","fans":12210862,"blogs":6164, "focus":83}

Tips 3:

redis应用于各种结构型和非结构型高热度数据访问加速

key 的设置约定

数据库中的热点数据key命名惯例

? 表名 :主键名 :主键值 :字段名

eg1:oeder :id :1351512 : name

eg2: quip : id : 3391165 : type

------------------------------------

hash 类型数据的基本操作

1.添加/修改数据

hset key field value

hmset key field1 value1 field2 value2 …

2.获取数据

hget key field

hgetall key

hmget key field1 field2 …

3.删除数据

hdel key field1 [field2]

4.获取哈希表中字段的数量

hlen key

5.获取哈希表中是否存在指定的字段

hexists key field

6.判断当前key中是否有这个field,field有值什么也不做,没值就添加

hsetnx key field value

hash 类型数据扩展操作

6.获取哈希表中所有的字段名或字段值

hkeys key

hvals key

7.设置指定字段的数值数据增加指定范围的值

hincrby key field increment

hincrbyfloat key field increment

------------------------------------

list 类型数据基本操作

list类型:保存多个数据,底层使用双向链表存储结构实现

1.添加/修改数据

lpush key value1 [value2] ……

rpush key value1 [value2] ……

2.获取数据

lrange key start stop

lindex key index

llen key

3.获取并移除数据

lpop key

rpop key

list 类型数据扩展操作

4.规定时间内获取并移除数据

blpop key1 [key2] timeout(秒)

brpop key1 [key2] timeout

brpoplpush source destination timeout

5.移除指定数据

lrem key count value

count:删除几个

value:删除的元素

------------------------------------

set 类型数据的基本操作

set类型:与hash存储结构完全相同,仅存储键,不存储值(nil),并且值是不允许重复的

1.添加数据

sadd key member1 [member2]

2.获取全部数据

smembers key

3.删除数据

srem key member1 [member2]

4.获取集合数据总量

scard key

5.判断集合中是否包含指定数据

sismember key member

set 类型数据的扩展操作

业务场景

每位用户首次使用今日头条时会设置3项爱好的内容,但是后期为了增加用户的活跃度、兴趣点,必须让用户

对其他信息类别逐渐产生兴趣,增加客户留存度,如何实现?

业务分析

系统分析出各个分类的最新或最热点信息条目并组织成set集合

随机挑选其中部分信息

配合用户关注信息分类中的热点信息组织成展示的全信息集合

解决方案

6.随机获取集合中指定数量的数据

srandmember key [count] count:个数

7.随机获取集合中的某个数据并将该数据移出集合

spop key [count]

业务场景

脉脉为了促进用户间的交流,保障业务成单率的提升,需要让每位用户拥有大量的好友,事实上职场新人不具有更多的职场好友,如何快速为用户积累更多的好友?

新浪微博为了增加用户热度,提高用户留存性,需要微博用户在关注更多的人,以此获得更多的信息或热门话题,如何提高用户关注他人的总量?

QQ新用户入网年龄越来越低,这些用户的朋友圈交际圈非常小,往往集中在一所学校甚至一个班级中,如何帮助用户快速积累好友用户带来更多的活跃度?

微信公众号是微信信息流通的渠道之一,增加用户关注的公众号成为提高用户活跃度的一种方式,如何帮助用户积累更多关注的公众号?

美团外卖为了提升成单量,必须帮助用户挖掘美食需求,如何推荐给用户最适合自己的美食?

解决方案

8.求两个集合的交、并、差集

sinter key1 [key2]

sunion key1 [key2]

sdiff key1 [key2]

9.求两个集合的交、并、差集并存储到指定集合中

sinterstore destination key1 [key2]

sunionstore destination key1 [key2]

sdiffstore destination key1 [key2]

10.将指定数据从原始集合中移动到目标集合中

smove source destination member

11.求两个集合的交、并、差集

sinter key1 [key2]

sunion key1 [key2]

sdiff key1 [key2]

12.求两个集合的交、并、差集并存储到指定集合中

sinterstore destination key1 [key2] destination:指定的集合

sunionstore destination key1 [key2]

sdiffstore destination key1 [key2]

13.将指定数据从原始集合中移动到目标集合中

smove source destination member

例:将u2的w3移动到u1 smove u2 u1 w3

------------------------------------

sorted_set 类型数据的基本操作

1.添加数据

zadd key score1 member1 [score2 member2] score:排序字段 member:值

2.获取全部数据

zrange key start stop [WITHSCORES] start:开始索引 stop:结束索引(-1代表最后一个元素) withscores:写上代表显示排序字段

zrevrange key start stop [WITHSCORES] (反向)

3.删除数据

zrem key member [member ...]

4.按条件获取数据

zrangebyscore key min max [WITHSCORES] [LIMIT] min、max:排序字段值

zrevrangebyscore key max min [WITHSCORES] (反向)

5.条件删除数据

zremrangebyrank key start stop 按照索引范围删除

zremrangebyscore key min max 按照排序字段值范围删除

6.获取集合数据总量

zcard key

zcount key min max

7.集合交、并操作

zinterstore destination numkeys key [key ...] (求交集,并求和,必须是每个集合中都有的元素才会被)

destination:存到哪儿 numkeys:参与操作的集合个数 key:对应的集合

zunionstore destination numkeys key [key ...]

sorted_set 类型数据的扩展操作

业务场景

票选广东十大杰出青年,各类综艺选秀海选投票

各类资源网站TOP10(电影,歌曲,文档,电商,游戏等)

聊天室活跃度统计

游戏好友亲密度

业务分析

为所有参与排名的资源建立排序依据

解决方案

8.获取数据对应的索引(排名)

zrank key member

zrevrank key member(反向)

9.score值获取与修改(score:排序字段)

zscore key member

zincrby key increment member

Redis数据类型及常用命令

原文:https://www.cnblogs.com/da-chun/p/14864833.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!