Redis基本概念及用法

Redis

Redis是什么

  • 开源的(BSD协议),使用ANSI C 编写,基于内存的且支持持久化,高性能的Key-Value的NoSQL数据库。
  • 支持数据结构类型丰富,有如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。
  • 丰富的支持主流语言的客户端,C、C++、Python、Erlang、R、C#、Java、PHP、Objective-C、Perl、Ruby、Scala、Go、JavaScript。
  • 用途:缓存、数据库(微博)、消息中间件(微博)
  • 官方网站:https://redis.io

NoSQL分类

Redis数据模型

键Key

  • Redis key 值是二进制安全的,这意味着可以用任何二进制序列作为key值,从形如”foo”的简单字符串到一个JPEG文件的内容都可以。空字符串也是有效key值。
  • Key取值原则
    • 键值不需要太长,消耗内存,且在数据中查找这类键值的计算成本较高
    • 键值不宜过短,可读性较差

String

  • 字符串是一种最基本的Redis值类型。Redis字符串是二进制安全的,这意味着一个Redis字符串能包含任意类型的数据
    • 例如: 一张JPEG格式的图片或者一个序列化的Ruby对象
  • 一个字符串类型的值最多能存储512M字节的内容

命令

登录客户端后获取帮助

  • Help
  • Help
  • Help set
  • Help @string
Help
help
Help set
help set

Help @string

help @string

设置字符串值

  • SET key value [EX seconds] [PX milliseconds] [NX|XX]
    • EX 设置过期时间,秒,等同于SETEX key seconds value
    • PX 设置过期时间,毫秒,等同于PSETEX key milliseconds value
    • NX 键不存在,才能设置,等同于SETNX key value
    • XX 键存在时,才能设置

这里我们主要了解CRUD(增删改除)

set K V
#set K V
set name 靓仔

#查   这里得到的结果是16进制存储的
get name

set age 20

get age

过期

  • Redis中可以给Key设置一个生存时间(秒或毫秒),当达到这个时长后,这些键值将会被自动删除
  • 设置多少秒或者毫秒后过期
    • EXPIRE key seconds
    • PEXPIRE key milliseconds
  • 设置在指定Unix时间戳过期
    • EXPIREAT key timestamp
    • PEXPIREAT key milliseconds-timestamp
  • 删除过期
    • PERSIST key
set K V NX

NX 键不存在,才能设置,等同于 SETNX key value

set score 100 NX

get score
set age 23

get age

set age 24 NX

get age
set K V [EX|PX]
#EX 的单位是秒,表示的是只存活多少秒,5秒后获取不到值
set ttl dead EX 5

get ttl
get ttl

#PX 的单位是毫秒,表示的是只存活多少毫秒,5000毫秒后获取不到值
set ttl dead PX 5000

get ttl
get ttl
get ttl

这个命令适合做热搜的缓存,存活时间一过就过期,没有必要让这个数据一直保留

设置多个键的字符串值

  • MSET key value [key value …]
mset k1 v1 k2 v2 k3 v3

get k1
get k2
get k3

键不存在时,设置字符串值

  • MSETNX key value [key value …]
  • 注意:这是原子操作
multi
set k4 v4
set k5 v5
set k6 v6

get k1
get k4

exec
get k1
get k2
get k4
get k5
multi
set k7 v7
set k8 v8
DISCARD
get k7
EXPIRE 过期
EXPIRE k4 6
get k4
# 等6秒
get k4
# 当时间戳到达这个时间戳就会过期
EXPIREAT k2 1642778319
get k2
get k2
get k2
删除过期PERSIST KEY
expire k3 11
PERSIST k3

get k3
# 等待命令执行后11秒再查看数据
get k3
生存时间
  • Time To Live,Key的剩余生存时间
查看剩余生存时间
  • TTL key
  • PTTL key
  • key存在但没有设置TTL,返回-1
  • key存在,但还在生存期内,返回剩余的秒或者毫秒
  • key曾经存在,但已经消亡,返回-2(2.8版本之前返回-1)

查找键

  • KEYS pattern

pattern取值

  • 任意长度字符
    ?任意一个字符
    []字符集合,表示可以是集合中的任意一个
KEYS pattern
# 这里是正则表达式的思想
keys k*
keys k?
keys k[1365]
keys ??
键类型
  • TYPE key
键是否存在
  • EXISTS key
键重命名
  • RENAME key newkey
  • RENAMENX key newkey
键删除
  • DEL key [key …]
获取值
  • GET key
获取多个给定的键的值
  • MGET key [key …]
返回旧值并设置新值
  • GETSET key value
  • 如果键不存在,就创建并赋值
字符串长度
  • STRLEN key
追加字符串
  • APPEND key value
  • 如果键存在就追加;如果不存在就等同于SET key value
获取子字符串
  • GETRANGE key start end
  • 索引值从0开始,负数表示从字符串右边向左数起,-1表示最有一个字符
覆盖字符串
  • SETRANGE key offset value

步长

步长1的增减
  • INCR key
  • DECR key
  • 字符串值会被解释成64位有符号的十进制整数来操作,结果依然转成字符串
步长增减
  • INCRBY key decrement
  • DECR key decrement
  • 字符串值会被解释成64位有符号的十进制整数来操作,结果依然转成字符串

位图bitmap

  • 位图不是真正的数据类型,它是定义在字符串类型中
  • 一个字符串类型的值最多能存储512M字节的内容
  • 位上限:2(9+10+10+3)=232b
设置某一位上的值
  • SETBIT key offset value
  • offset偏移量,从0开始
  • value不写,默认是0
获取某一位上的值
  • GETBIT key offset
返回指定值0或者1在指定区间上第一次出现的位置
  • BITPOS key bit [start] [end]
位操作
  • 对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保存到 dteskey 上
  • operation 可以是 AND 、 OR 、 NOT 、 XOR 这四种操作中的任意一种
  • BITOP AND destkey key [key …] ,对一个或多个 key 求逻辑并,并将结果保存到 destkey
  • BITOP OR destkey key [key …] ,对一个或多个 key 求逻辑或,并将结果保存到 destkey
  • BITOP XOR destkey key [key …] ,对一个或多个 key 求逻辑异或,并将结果保存到 destkey
  • BITOP NOT destkey key ,对给定 key 求逻辑非,并将结果保存到 destkey
  • 除了 NOT 操作之外,其他操作都可以接受一个或多个 key 作为输入
  • 当 BITOP 处理不同长度的字符串时,较短的那个字符串所缺少的部分会被看作 0
  • 空的 key 也被看作是包含 0 的字符串序列
  • 思考:a位或b是什么?
统计指定位区间上值为1的个数
  • BITCOUNT key [start] [end]
  • 从左向右从0开始,从右向左从-1开始,注意官方start、end是位,测试后是字节
  • BITCOUNT testkey 0 0表示从索引为0个字节到索引为0个字节,就是第一个字节的统计
  • BITCOUNT testkey 0 -1等同于BITCOUNT testkey
  • 最常用的就是 BITCOUNT testkey
Redis的二进制位
登录不同的库
  • redis-cli --help
  • redis-cli -n 2
清除当前数据
  • FLUSHDB
清除所有库中的数据
  • FLUSHALL
网站用户的上限次数统计(活跃用户)

用户ID为key,天作为offest,上线置为1
ID为500的用户,今年的第1天上线、第30天上线

SETBIT u500 1 1
SETBIT u500 30 1
BITCOUNT u500
KYES u*
按天统计网站活跃用户
天作为key,用户ID为offset,上线置为1
求一段时间内活跃用户数
SETBIT 20160602 15 1
SETBIT 20160601 123 1
SETBIT 20160606 123 1
求6月1日到6月10日的活跃用户
BITOP OR 20160601-10 20160601 20160602 20160603 20160610
BITCOUNT 20160601-10
结果为2
  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liangzai2048

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值