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类型!这是一种悲哀!
基础
#获取字符串长度
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自己实现的双向链表,可以两个方向进行添加访问
除了上面这两种指令之外
查看节点(查)
#查看所有节点
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,无序不重复集合
无序不重复
基础操作
#添加
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的基础上套了一层
hget hset hmset hmget hsetex hsetnx hexist ……这些方法hash基本上都有
#查看所有
hgetall myhash
#查看所有key
hkeys myhash
#查看所有的value
hvals myhash
用途:
- 存储对象(比string更具有优势)
Zsets,有序不重复集合
就是在set的基础上增加了score,方便排序
#添加
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