Redis学习笔记—数据类型:字符串(string)


字符串是Redis最基础的数据结构。首先键是字符串类型,而且其他几种类型都是在字符串类型的基础上构建的。字符串类型的值实际可以是字符串(简单的字符串、复杂的字符串(例如JSON、XML))、数字(整数、浮点数),甚至是二进制(图片、音频、视频),但是值最大不能超过512MB。

设置值

set命令

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

ex seconds:为键设置秒级过期时间

127.0.0.1:6379> set hello world ex 50
OK

px milliseconds:为键设置毫秒级过期时间。

127.0.0.1:6379> set hello world px 50000
OK

nx:键必须不存在,才可以设置成功,用于添加。

127.0.0.1:6379> set hello world nx
OK
127.0.0.1:6379> set hello world nx
(nil)

xx:与nx相反,键必须存在,才可以设置成功,用于更新。

127.0.0.1:6379> del hello
(integer) 1
127.0.0.1:6379> set hello world xx
(nil)
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> set hello world1 xx
OK

setex命令(设置过期时间)

setex key seconds value

下面四个例子都是设置key为hello的缓存过期时间50秒

127.0.0.1:6379> setex hello 50 world
OK
127.0.0.1:6379> set hello world ex 50
OK
127.0.0.1:6379> set hello world px 50000
OK
127.0.0.1:6379> expire java 50
(integer) 1

setnx命令(如果key存在则不做操作,如果没有则创建)

setnx key value

由于Redis的单线程命令处理机制,如果有多个客户端同时执行setnx key value,根据setnx的特性只有一个客户端能设置成功,setnx可以作为分布式锁的一种实现方案,Redis官方给出了使用setnx实现分布式锁的方法:http://redis.io/topics/distlock

获取值

get key

批量设置值

mset key value [key value ...]

批量设置a,b,c三个key

127.0.0.1:6379> mset a 1 b 2 c 3
OK

批量获取值按顺序返回

mget key [key ...]

批量获取a,b,c三个key值

127.0.0.1:6379> mget a b c
1) "1"
2) "2"
3) "3"

批量操作可以减少项目和redis数据库的网络请求,如果循环获取每条,那每条都要走网络请求,跟内存速度比,网络绝对是性能的瓶颈,所以批量操作是交给redis内部处理,一次请求,一次返回,有利于提高业务处理效率;但是要注意的是每次批量操作所发送的命令数不是无节制的,如果数量过多可能会造成Redis的阻塞或者网络拥塞。

计数

自增

incr key

自减

decr key

自增指定数

incr key increment

自减指定数

decrby key decrement

自增浮点数

incrbyfloat key increment

很多存储系统和编程语言内部使用CAS机制实现计数功能,会有一定的CPU开销,但在Redis中完全不存在这个问题,因为Redis是单线程架构,任何命令到了Redis服务端都要顺序执行。

追加值

append key value

举例说明:

127.0.0.1:6379> get hello
"world"
127.0.0.1:6379> append hello is
(integer) 7
127.0.0.1:6379> get hello
"worldis"

获取字符串长度

strlen key

举例说明:

127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> strlen hello
(integer) 5

设置并返回值(如果原来有值则返回原来的值)

getset key value

举例说明:

127.0.0.1:6379> get hello
"world"
127.0.0.1:6379> getset hello world1
"world"
127.0.0.1:6379> get hello
"world1"

设置指定位置的字符

setrange key offeset value

举例说明:

127.0.0.1:6379> set java redis
OK
127.0.0.1:6379> setrange java 0 j
(integer) 5
127.0.0.1:6379> get java
"jedis"

获取部分字符串

getrange key start end

举例说明:

127.0.0.1:6379> get java
"jedis"
127.0.0.1:6379> getrange java 1 3
"edi"

查看内部编码

127.0.0.1:6379> object encoding hello
"embstr"

字符串类型的内部编码有3种:

  • int:8个字节的长整型。
  • embstr:小于等于39个字节的字符串。
  • raw:大于39个字节的字符串。

Redis会根据当前值的类型和长度决定使用哪种内部编码实现。

典型使用场景 (三个例子)

  1. 做存储层不常改变的,但是又经常需要访问的数据的一个缓存层,减轻数据库压力
  1. 做用户session的存储器,解决分布式服务负载均衡而出现的session不同步问题

  1. 计数,例如网页的浏览量,视频播放量,如果每次都调用接口存数据库会造成大量请求的出现,极大地影响性能,可以先存在redis,之后再进行持久化
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值