Redis五大数据类型,快来学习吧!

Redis五大数据类型

Redis支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)

Redis 的命令不区分大小写,但是 key 严格区分大小写!!!

String,字符串(基本)

90%的人就只会使用String类型!这是一种悲哀!

Redis五大数据类型,快来学习吧!

基础

#获取字符串长度
strlen key
#追加字符串,如果不存在就自动新建
append key value
#检查是否存在
exist key
#设置
set key value
#得到
get key
#先获取旧值,再设置新值,没有旧值就为空(nil)
getset key value
#删除
del key

浏览量自增

set views 0

#加一
incr views
#加特定步长
incrby views 10

#减一
decr views
#减特定步长
decyby views 8

字符串截取与替换

set study "Hello,Redis"

#字符串截取[0,5]
getrange study 0 5
#截取全部的字符串
getrange study 0 -1

#替换后面的字符串,从的七个字符串开始替换
setrange study 6 "I am study Redis"

存在相关设置

#设置存在时间
setex key seconds value
#查看存在时间
ttl key

#不存在才赋值
setnx key value

批量设置与获取

#批量设置
mset k1 v1 k2 v2 k3 v3

#批量获取
mget k1 k2 k3

#同时他是原子性操作,要么都失败要么都成功!
msetnx k1 v k4 v4
>false

同时你可以设置对象

#但其实也没啥特殊的,:也没什么特殊的,只是一种软规定罢了
mset user:1:name zheng user:1:age 21
mget user:1:name zheng user:1:age 21

用途

  • 计数器
  • 统计多单位的数量:uid:123666:follow 0
  • 粉丝数
  • 对象存储缓存

List,有序可重复集合

在Redis里面我们可以把list玩成 栈,队列,阻塞队列

有序可重复

list的数据结构:https://cloud.tencent.com/developer/article/1710612

List是Redis自己实现的双向链表,可以两个方向进行添加访问

Redis五大数据类型,快来学习吧!

Redis五大数据类型,快来学习吧!

除了上面这两种指令之外

查看节点(查)

#查看所有节点
lrange mylist 0 -1
#查看指定节点
lrange mylist 0 2

#查看指定下标的节点
lindex mylist 1
#查看总长度
llen mylist

移除(删)

lrem key count value
#lrem mylist 1 one
#从前往后移除一个mylist中的one元素

截取

ltrim mylist 1 2

移动旧元素到新List

rpoplpush oldlist newlist

更新(改)

lset mylist 0 newnode
#把原先的0位置的元素变为新的元素,如果原下标没有元素就会报错

插入(增)

#在mylist中的one元素前面插入zero这个元素
linsert mylist before one zero
#在mylist中的one元素后面插入two这个元素
linsert mylist after one two

用途

  • 消息排队
  • 消息队列

Set,无序不重复集合

无序不重复

Redis五大数据类型,快来学习吧!

基础操作

#添加
sadd myset hello
sadd myset world
sadd myset redis

#查看全部,但他是无序的
smembers myset
#查看是否存在
sismember myset java
>0没有 1有

#获取个数
scard myset

#移除,myset中的hello元素
srem myset hello

随机

#随机获取,可加个数
srandmember myset (count)
#随机删除,可加个数
spop myset (count)

移动

#移动hello元素从oldset到newset
smove oldset newset hello

集(例如:共同关注)

#差集
sdiff set1 set2
#交集
sinter set1 set2
#并集
sunion set1 set2

用途

  • 共同关注

Hash,散列

Map集合

其本质就是在String的基础上套了一层

Redis五大数据类型,快来学习吧!

hget hset hmset hmget hsetex hsetnx hexist ……这些方法hash基本上都有

#查看所有
hgetall myhash
#查看所有key
hkeys myhash
#查看所有的value
hvals myhash

用途:

  • 存储对象(比string更具有优势)

Zsets,有序不重复集合

就是在set的基础上增加了score,方便排序

Redis五大数据类型,快来学习吧!

#添加
zadd salary 2500 zheng
zadd salary 3000 liao
zadd salary 5000 huang

#删除
zrem salary yuan

#查看
zrange salary 0 1
#查看第一个到第二个的元素
zrevrange salary 0 1
#查看倒序后的第一个到第二个元素

#通过score来排序,可以是否带有score这个参数,key用 -inf +inf 查看
zrangebyscore salary 0 3000 (withscores)
#查看score在[0,3000]范围的元素

##通过score倒序来排序,可以是否带有score这个参数,key用 +inf -inf 查看
zrevrangebyscore salary 0 3000

#查看个数
zcard salary

#获得指定score区间的个数
count salary 0 3000
> 2

用途:

  • 成绩表,工资表
  • 权重
  • 排行榜 Top N
上一篇:SQL60 统计salary的累计和running_total


下一篇:设计模式之策略模式