Redis学习

Redis 数据类型及应用场景——String

2020-02-27  本文已影响0人  十年磨一剑1111

redis 是目前广泛使用的一种非结构化数据库(nosql),我们经常使用redis做缓存或者是保存一些数据例如文章的点击量等等。我们今天来讲下redis的5种数据类型及其使用场景,由于不想篇幅太长,接下来就先介绍字符串这一种数据类型。

1.字符串(string)

字符串是redis里面最简单的一种数据类型,它可以存储任何形式的字符串(二进制安全),包括二进制,允许存储的最大容量是512M。我们来看下关于字符串有哪些操作。

1. 赋值与取值

set name xiaoming;
get name;// xiaoming 
mset age 20 height 1.75 //批量设置
mget age name //批量获取

2. 过期时间设置

set name  xiaowang 200 ;// 设置key的时候同时设置过期时间
expire name 200; //单独设置key 的过期时间
ttl name ; //查看key 的过期时间

3. 递增数字(当存储的字符串是整数或者浮点形式时)

incr age ;// age 递增1,age 必须为整数,否则报错,如果没有age会创建一个
decr age; // age 减少1
incrby age 2; //指定递增的数字
decrby age 2;// 指定递减的数字
incrbyfloat score 1.1;// 增加指定浮点数

4. 字符串的一些操作

//尾部追加
set name hello;
append name 'world' ; 
get name; // hello world

// 获取字符串的长度
set name '你好';
strlen name; // 6,redis 是采用utf-8编码

5. 位操作
一个字节由8个二进制位组成,redis 提供了4个命令直接对二进制进行操作。

set foo bar; 
getbit foo 0;//  值位 0  ,获取位置位0上的值
getbit foo 6;// 值位 1,获取位置位6上的值
setbit foo 6 0;//设置某个第6个位置的值
setbit foo 7 1;
get foo; //  值为 aar

说到位操作可能有小伙伴会比较陌生,或许会疑问这个位操作实际有什么作用呢?
比如记录某个网站用户的性别,用用户的ID作为索引,二进制1和0分别表示男性和女性,那么记录100万个用户的性别只需要占用100KB多的空间,而且由于getbit和setbit 的时间复杂度为O(1) ,所以读取二进制位值得效率很高。

那么这种类型还有哪些其他的用途呢?
(1) 用做计数器
比如博客网站,我们经常需要统计文章的访问量,我们可以为每篇文章使用一个名为post:文章ID的键来存储文章的访问量,每次访问文章的时候使用incr命令使相应的键值加1,当然还有限制用户某段时间的访问量等等。
(2) 做缓存
当网站的访问量比较大的时候,为了减少数据库的压力我们可以将那些实时性要求不高的数据放到redis里面,具体的过期时间根据业务的需求来定,比如我们将文章数据缓存起来,文章一般有标题,正文,作者与发布时间等多个元素构成,为了存储这些数据我们可以使用序列化函数(比如 php serialize)把它们转换成字符串,另外,因为字符串类型是可以存储二进制的,所以还可以使用messagepack进行序列化,速度更快,占用的空间也更小。不过需要注意的是如果缓存的数据量比较大且缓存的时间比较长的时候可能会导致Redis暂满内存,我们可以修改配置文件的maxmemory参数,限制Redis最大可用的内存大小。
(3) 在分布式系统中可以做一些数据的共享
比如session共享,我们可以把用户在不同机器上操作的session都记录在同一个redis里面,当进行session判断的时候直接从redis里面获取,利用redis的高效和数据的过期时间可以完美的实现session这一功能,这是普通的数据库所不能相比的。
(4) 各类场景下的标识符
比如 incrby serialNo 1000

没想到一个字符串就写了这么多,那其他的数据类型请关注后续的文章。

上一篇下一篇

猜你喜欢

热点阅读