Redis实战(3)数据类型一Strings51CTO博客 - 牛牛娱乐

Redis实战(3)数据类型一Strings51CTO博客

2019年04月24日09时29分30秒 | 作者: 巧蕊 | 标签: 类型,一个,操作 | 浏览: 2954

Redis 的作者 antirez(Salvatore Sanfilippo)从前宣布了一篇名为 Redis 宣言(Redis Manifesto)
的文章,文中列举了 Redis 的七个准则,以向咱们说明 Redis 的思维。


1、Redis 是一个操作数据结构的言语东西,它供给根据 TCP 的协议以操作丰厚的数据结构。
在 Redis 中,数据结构这个词的含义不只表明在某种数据结构上的操作,更包括了结构自身
及这些操作的时刻空间杂乱度。


2、Redis 定坐落一个内存数据库,正是因为内存的快速拜访特性,才使得 Redis 能够有如此
高的功用,才使得 Redis 能够轻松处理许多杂乱的数据结构,Redis 会测验其它的存储方面
的挑选,可是永久不会改动它是一个内存数据库的人物。


3、Redis 运用根底的 API 操作根底的数据结构,Redis 的 API 与数据结构相同,都是一些最基
础的元素,你简直能够将任何信息交互运用此 API 格局表明。作者戏弄说,假如有其它非人
类的智能生物存在,他们也能了解 Redis 的 API。因为它是如此的根底。


4、Redis 有着诗一般美丽的代码,常常有一些不太了解 Redis 有的人会主张 Redis 选用一些
其它人的代码,以完成一些 Redis 未完成的功用,但这对咱们来说就像对错要给《红楼梦》
接上后四十回相同。


5、Redis 一直防止杂乱化,咱们以为规划一个体系的实质,便是与杂乱化作战。咱们不会为了一个小功用而往源码里增加上千行代码,处理杂乱问题的办法便是让杂乱问题永久不要提杂乱的问题。


6、Redis 支撑两个层成的 API,第一个层面包括部分操作 API,但它支撑用于分布式环境下
的 Redis。第二个层面的 API 支撑更杂乱的 multi-key 操作。它们各有所长,可是咱们不会推
出两者都支撑的 API,但咱们期望能够供给实例间数据搬迁的指令,并履行 multi-key 操作。

7、咱们以优化代码为乐,咱们信任编码是一件辛苦的作业,仅有对得起这辛苦的便是去享
受它。假如咱们在编码中失去了趣味,那最好的处理办法便是停下来。咱们决不会挑选让Redis 不好玩的开发形式。

Redis 的作者 antirez 曾笑称 Redis 为一个数据结构服务器(data structures server)
,这是一个十分精确的表述,Redis 的一切功用便是将数据以其固有的几种结构来保存,并供给
给用户操作这几种结构的接口。本文将介绍 Redis 支撑的各种数据类型及其操作接口。

strings 类型及操作


string 是最简略的类型,你能够了解成与 Memcached 是一模相同的类型,一个 key 对应一个
value,其上支撑的操作与 Memcached 的操作相似。但它的功用更丰厚。
string 类型是二进制安全的。意思是 redis 的 string 能够包括任何数据,比方 jpg 图片或许序
列化的目标。从内部完成来看其实 string 能够看作 byte 数组,最大上限是 1G 字节,下面是
string 类型的界说:

struct sdshdr {
long len;
long free;
char buf[];
};

len 是 buf 数组的长度。
free 是数组中剩下可用字节数,由此能够了解为什么 string 类型是二进制安全的了,因为它
实质上便是个 byte 数组,当然能够包括任何数据了
buf 是个 char 数组用于存贮实践的字符串内容,其实 char 和 c#中的 byte 是等价的,都是一
个字节。
别的 string 类型能够被部分指令按 int 处理.比方 incr 等指令,假如只用 string 类型,redis 就
能够被看作加上耐久化特性的 memcached。
当然 redis 对 string 类型的操作比 memcached 仍是多许多的,详细操作办法如下:

set:

设置 key 对应的值为 string 类型的 value。
例如咱们增加一个 name= HongWan 的键值对,能够这样做:

setnx:

设置 key 对应的值为 string 类型的 value。
假如 key 现已存在,回来 0, nx是 not exist 的意思。
例如咱们增加一个 name= HongWan_new 的键值对,能够这样做:

setex:

设置 key 对应的值为 string 类型的 value,并指定此键值对应的有效期。
例如咱们增加一个 haircolor= red 的键值对,并指定它的有效期是 10 秒,能够这样做:

可见因为最终一次的调用是 10 秒今后了,所以取不到 haicolor 这个键对应的值。


setrange:

设置指定 key 的 value 值的子字符串。
例如咱们期望将 HongWan 的 126 邮箱替换为 gmail 邮箱,那么咱们能够这样做:

其间的 5 是指从下标为 5(包括 5)的字符开端替换

mset:

一次设置多个 key 的值,成功回来 ok 表明一切的值都设置了,失利回来 0 表明没有任何值被设置。

msetnx:

一次设置多个 key 的值,成功回来 ok 表明一切的值都设置了,失利回来 0 表明没有任何值
被设置,可是不会掩盖现已存在的 key。

能够看出假如这条指令回来 0,那么里边操作都会回滚,都不会被履行。
get:

获取 key 对应的 string 值,假如 key 不存在回来 nil。

getset:

设置 key 的值,并回来 key 的旧值。

可见,假如 key 不存在,设置成功,可是将回来 nil
getrange:

获取指定 key 的 value 值的子字符串。

字符串左边下标是从 0 开端的
字符串右面下标是从-1 开端的
当下标超出字符串长度时,将默以为是同方向的最大下标


mget:

一次获取多个 key 的值,假如对应 key 不存在,则对应回来 nil。

incr:

对 key 的值做加加操作,并回来新的值。留意 incr 一个不是 int 的 value 会回来过错,incr 一
个不存在的 key,则设置 key 为 1

incrby:

同 incr 相似,加指定值 ,key 不存在时分会设置 key,并以为本来的 value 是 0

decr:

对 key 的值做的是减减操作,decr 一个不存在 key,则设置 key 为-1

decrby:

减指定值

decrby 彻底是为了可读性,咱们彻底能够经过 incrby 一个负值来完成相同作用,反之相同。

append:

给指定 key 的字符串值追加 value,回来新字符串值的长度。
例如咱们向 name 的值追加一个@126.com 字符串,那么能够这样做:


strlen:

取指定 key 的 value 值的长度。










版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表牛牛娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章