玩转redis

作者: 哈二聊技术 | 来源:发表于2018-10-23 00:18 被阅读0次

很多小伙伴刚接触redis都是拿来当缓存用,然而强大的redis可不仅仅能做这点小事。

K V数据库

redis用的最多的就是它的kv结构了,利用set和get实现数据缓存。然而kv结构还有更高级的用法,就是setnx。这个方法在key存在返回false,然后不存在则写入返回true。通过这一特性,很容易实现锁操作。

# 设置指定key的value
set key value [过期时间]
# 获取指定的key的value
get key
# 设置key的值并且获取key的旧value
getset key value
# key不存在的时候写入
setnx key value
# 获取多个key的value
mget key1 [key2]...
# 设置多个key的value
mset key1 value1 [key2 value2]
# 设置多个key的value(仅仅所有的key都不存在)
msetnx key1 value1 [key2 value2]

计数器

redis提供原子增加和减少的功能,就是incr和decr。然后通过这个特性可以拿唯一id,也可以做限流器(防止过多请求)。

# 自增1
incr key
# 自增指定的值
incrby key increment
# 自增浮点的值
incrbyfloat key increment
# 自减1
decr key
# 自减指定的值
decrby key decrement

list

redis提供list的数据结构。可以从左右两边插入和弹出数据,并且支持阻塞读取(直到有数据才返回)。利用这些特性,我们可以基于list实现队列和栈的数据结构。

我们来看看redis的list的应用场景:

  • 消息(任务)队列
  • 最近若干条热点数据
# 获取列表长度
llen key
# 获取并移除列表第一个元素
lpop key
# 在列表头部插入一个或多个元素
lpush key value [value2]
# 获取并移除队列最后一个元素
rpop key
# 在队列后面添加一个或多个元素
rpush key value [values]
# 获取并移除列表第一个元素,如果没有值的时候会一直阻塞,直到有值或者超时
blpop key timeout
# 获取并移除列表最后一个元素,如果没有值的时候会一直阻塞,直到有值或者超时
brpop key timeout

set

redis的集合支持普通的集合和有序集合。
普通集合可以用于数据去重,并且集合的交集,并集,差集可以快速实现共同好友,二度人脉等需求。
而有序集合可以做排行版。

# 向集合添加一个或者多个元素
sadd key value [value2]
# 获取集合的成员数
scard key
# 获取指定集合的差集
sdiff key [key1]
# 获取指定集合的交集
sinter key [key2]
# 判断元素是否是集合的成员
sismember key member
# 返回集合的所有成员
smembers key
# 移除并返回集合随意一个元素
spop key
# 移除集合里面一个或者多个成员
srem member [member2]
# 获取指定集合并集
sunion key [key2]
# 往有序集合添加一个或者多个成员
zadd key score1 member1 [score2 member2]
# 获取有序集合的成员个数
zcard key
# 计算有序集合指定分数区间的成员数
zcount key min max
# 移除有序集合中一个或者多个成员
zrem key member [member2]
# 移除分数区间的成员
ZREMRANGEBYLEX key min max
# 获取指定分数区间的成员
ZREMRANGEBYSCORE key min max
# 获取指定分数区间的成员(分数从高到低)
ZREVRANGE key start stop 
# 获取指定分数区间的成员(分数从低到高)
ZREVRANGEBYSCORE key max min

hash

redis的hash结构,类似于两层的字典。key为字典的第一层,field为字典的第二层。这种结构可以方便存储对象的属性。

# 删除一个或者多个hash字段
hdel key field [field2]
# 判断hash里面field是否存在
hexists key field
# 获取hash里面field字段的值
hget key field
# 获取hash里面指定key所有field和value
hgetall key
# 获取hash里面指定key所有field
hkeys key
# 获取hash里面指定key的field数量
hlen key
# 获取hash指定field的值
hmget key field [field2]
# 设置hash里面一个field的值
hset key field value
# 设置hash里面多个field的值
hmset key field value [field2 value2]
# 设置hash里面多个field的值(当field不存在的时候)
hsetnx key field value
# 获取hash里面指定key所有field的值
hvals key

订阅和发布

redis支持通过主题的订阅和发布,并且支持模式匹配订阅。但是redis的订阅发布不支持持久化存储,所以发布了信息之后,如果客户端没连接上,消息会直接丢失。
这种功能一般用于解耦,例如一个用户注册之后,要初始化各种信息,还要推送信息。就可以把用户注册当成发布信息,各个子系统订阅该信息,然后再处理。

# 订阅一个或多个模式频道
PSUBSCRIBE pattern [pattern2]
# 往一个频道发送信息
PUBLISH channel message
# 退订一个或者多个模式频道
PUNSUBSCRIBE pattern [pattern2]
# 订阅一个或多个频道
SUBSCRIBE channel [channel2]
# 退订一个或者多个频道
UNSUBSCRIBE channel [channel2]

事务

redis的事务仅仅是把指令打包执行,失败了不会回滚也不会终止后面的命令。

redis支持的数据结构

  • string
  • hash
  • list
  • set
  • 有序集合
  • 地理空间

其它通用命令

# 删除一个key
del key
# 判断key是否存在
exists key
# 为给定key一个过期时间(秒为单位)
expire key second
# 为给定key一个过期时间(unix时间戳)
expireat key timestamp
# 为给定key一个过期时间(毫秒为单位)
pexpire key milliseconds
# 为给定key一个过期时间(unix时间戳,毫秒)
pexpireat key timestamp
# 查找符合规则的key
keys pattern
# 返回key剩余过期时间,毫秒
pttl key
# 返回key剩余过期时间,秒
ttl key
# 获取key的类型
type key

相关文章

  • Redis

    15天玩转redis —— 第一篇 开始入手15天玩转redis —— 第九篇 发布/订阅模式redis是个内存存...

  • 玩转Redis-删除了两百万key,为什么内存依旧未释放?

    本文关键字:玩转Redis、Redis内存碎片、Redis内存释放; 大纲 背景 如何查看Redis内存数据 内存...

  • 【redis】redis好文

    Redis最佳实践:7个维度+43条使用规范,带你彻底玩转Redis http://kaito-kidd.com/...

  • 玩转redis

    很多小伙伴刚接触redis都是拿来当缓存用,然而强大的redis可不仅仅能做这点小事。 K V数据库 redis用...

  • 玩转Redis集群(下)

    接上一篇《玩转Redis集群(上)》,我们来继续玩~ Redis集群操作实践 数据的分布性 从上面的操作,你可以看...

  • 玩转redis缓存

    五种数据结构简介 Redis是使用C编写的,内部实现了一个struct结构体redisObject对象,通过结构体...

  • 玩转本地Redis

    初学Redis的时候,利用Spring提供的Redis模板(StringRedisTemplate),操作本地Re...

  • 支撑微博亿级社交平台,小白也能玩转Redis集群(实战篇)

    上篇文章《支撑微博亿级社交平台,小白也能玩转Redis集群(原理篇)》介绍了Redis集群相关原理,这篇文章将介绍...

  • Data Lake Analytics: 以SQL方式查询Red

    Data Lake Analytics作为云上数据处理的枢纽,最近加入了对于Redis的支持, 这篇教程带你玩转 ...

  • 玩转Redis集群(上)

    这是redis集群介绍的上篇,主要是关于Redis集群的搭建。后续将为大家介绍Redis集群的常用命令、Java操...

网友评论

    本文标题:玩转redis

    本文链接:https://www.haomeiwen.com/subject/rjbdzftx.html