Redis的字符串类型

字符串是 Redis 中最常用的数据结构。字符串类型的值,简单字符串,JSON , XML,数字,二进制(图片等),最大 512MB 大小。

基本命令

设置值

set key value [ex seconds] [px milliseconds] [nx|xx]

ex 为键设置秒级过期时间
px 为键设置毫秒级过期时间
nx 键必须不存在,才可以设置成功,添加时使用
xx 键必须存在,才能设置成功,更新时使用

setex
与 set 的 ex 选项一样,设置失效时间。

setex key seconds value

setnx
与 set 的 nx 选项一样。

setnx key value

redis 是单线程命令处理机制,如果多个客户端同时执行 setnx 某个 key 的指令,只能有一个客户端设置成功。setnx 可以作为分布式锁的一种实现方案。

获取值

get key

如:

localhost:6379> get hello
"world"

如果键不存在返回 nil。

批量set/get

批量操作可以提高效率。由于 Redis 的执行命令时间已经足够高,但是网络请求的时间需要考虑,批量操作能够减少网络请求次数从而提高效率。

mset key value [key value ...]
mget key [key ...]

localhost:6379> mset a 1 b 2 c 3 d 4
OK
localhost:6379> mget a b c d
1) "1"
2) "2"
3) "3"
4) "4"

计数

incr key

对 key 对应的 value 的整数进行自增操作。如果不是整数,返回错误。如果是整数,返回自增结果。如果键不存在,按照 0 自增,返回结果是 1。

localhost:6379> exists key
(integer) 0
localhost:6379> incr key
(integer) 1

另外,还有 decr(自减),incrby(自增指定数字),decrby(自减指定数字),incrbyfloat(自增浮点数)等。

自增操作,在其他要考虑并发的系统或语言中,都会使用 CAS 原子机制来计数。但是 Redis 中因为是单线程架构,任何命令都要进行排队进行顺序执行,不需要考虑并发的问题。

内部编码

redis 会根据当前值的类型和长度来决定使用哪种内部编码实现。
字符串内部编码:
- int 8个字节的长整型。
- embstr 小于等于39个字节的字符串。
- raw 大于39个字节的字符串。

整数类型

localhost:6379> set str 999
OK
localhost:6379> object encoding str
"int"

短字符串

localhost:6379> set str hello
OK
localhost:6379> object encoding str
"embstr"

长字符串

localhost:6379> set longstr aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
OK
localhost:6379> object encoding longstr
"raw"

使用场景

缓存

在 Web 服务中,对用户的信息存储在 Mysql 中,使用 Redis 来缓存。大部分数据都由 Redis 中获取,降低 Mysql 的访问压力。
如果从 Redis 中没有获取到用户信息,那么需要从 Mysql 中获取,然后将结果写入 Redis 中,并可以添加一个过期时间。

计数

Redis 可以实现快速计数,查询缓存的功能。比如用户每次播放一次视频,相应的视频播放次数就自增1。

共享Session

分布式的 Web 服务会将用户的 Session 信息保存在各自的服务器中,但是由于负载均衡可能会将用户的请求均衡到不同的服务器,结果可能造成需要重新验证登陆的情况。
这种情况可以使用 Redis 来解决,将用户的 Session 使用 Redis 来进行集中管理。用户每次更新或者查询登陆都从 Redis 中来获取。

限速

某个 IP 禁止多次访问的话,可以通过在 Redis 中设置 IP 对应的键以及过期时间,此时间段中如果还有该 IP 的访问,经过 Redis 查询到存在,那么就进行对应的限制即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值