string 是最简单的类型,String是最简单的类型

2020-04-03 12:20 来源:未知

Linux 版本信息:复制代码 代码如下:cat /etc/issue 或cat /etc/redhat-release



CentOS release 6.6 (Final)

Strings类型及操作

String 类型

 

string 是最简单的类型,你可以理解成与 Memcached 是一模一样的类型,一个 key 对应一个 value,其上支持的操作与 Memcached 的操作类似。但它的功能更丰富。

String是最简单的类型,一个key对应一个Value,String类型是二进制安全的。Redis的String可以包含任何数据,比如jpg图片或者序列化的对象。

string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据, 比如 jpg 图片或者序 列化的对象。 从内部实现来看其实 string 可以看作 byte 数组,最大上限是 1G 字节。

 

① set 方法

 

设置 key 对应的值为 string 类型的 value。

 

添加 name = dee 的键值对:复制代码 代码如下:127.0.0.1:6379 set name deeOK设置成功。

Set

② get 方法

 

复制代码 代码如下:127.0.0.1:6379 get name"dee"获取成功。

设置Key对应的值为string类型的value.

再次设置 name = deathmask,值会被覆盖:复制代码 代码如下:127.0.0.1:6379 set name deathmaskOK

 

127.0.0.1:6379 get name"deathmask"

例如:我们添加一个name=lijie的键值对:

③ setnx 方法

 

设置 key 对应的值为 string 类型的 value,如果 key 已经存在,返回 0,nx 表示 not exist。

127.0.0.1:6379> set name toto

复制代码 代码如下:127.0.0.1:6379 setnx name dee(integer) 0

 

127.0.0.1:6379 setnx app weibo(integer) 1

OK

127.0.0.1:6379 get name"deathmask"

 

127.0.0.1:6379 get app"weibo"

 

表示 name 已经存在而且没有更改,app 不存在则成功 set。

 

④ setex 方法

//获取name的值:

设置 key 对应的值为 string 类型的 value,并指定 此键值 对应的有效期。

 

复制代码 代码如下:127.0.0.1:6379 setex mobile 10 iphoneOK

127.0.0.1:6379> get name

127.0.0.1:6379 get mobile"iphone"

 

127.0.0.1:6379 get mobile"iphone"

"toto"

127.0.0.1:6379 get mobile(nil)

 

设置 mobile 的值为 iPhone,并且指定有效期为 10 秒。

 

⑤ setrange 方法

 

设定指定 key 的 value 值的子字符串

//再次重新设置name的值:

将 dee 的 126 邮箱 替换为 gmail 邮箱复制代码 代码如下:127.0.0.1:6379 set email dee@126.comOK

 

127.0.0.1:6379 get email"dee@126.com"

127.0.0.1:6379> set name totobrother

127.0.0.1:6379 setrange email 4 gmail.com(integer) 13

 

127.0.0.1:6379 get email"dee@gmail.com"其中 4 代表下标,(integer) 13 表示字符串的长度。

OK

复制代码 代码如下:127.0.0.1:6379 set email dee@vip.ofim.comOK

 

127.0.0.1:6379 get email"dee@vip.ofim.com"

127.0.0.1:6379> get name

127.0.0.1:6379 setrange email 4 gmail.com(integer) 16

 

127.0.0.1:6379 get email"dee@gmail.comcom"说明:如果替换的字符串没有源字符串长,则只会把源字符串中相同长度的字符替换掉,同时保留源字符串中剩余的字符。

"totobrother"

⑥ mset 方法

 

一次设置多个 key 值,成功返回 ok,表示所有的值都设置了,失败返回 0,表示没有任何值被设置。

 

复制代码 代码如下:127.0.0.1:6379 mset key1 dee1 key2 dee2OK

 

127.0.0.1:6379 get key1"dee1"

setnx

127.0.0.1:6379 get key2"dee2"

 

⑦ msetnx 方法

设置key对应的值为string类型的value,如果key已经存在,返回0,nx是not exist的意思。

一次设置多个 key 的值,成功返回 1,表示所有的值都被设置了。失败返回 0 ,表示没有任何值被设置,但是不会覆盖已经存在的 key。复制代码 代码如下:127.0.0.1:6379 msetnx key3 dee3 key4 dee4 (integer) 1

 

127.0.0.1:6379 msetnx key3 dee333 key4 dee444 key5 dee5(integer) 0

也就是说,使用setnx来设置的时候,如果已经设置过了,返回0,取到的值是原来的值,没有设置过返回1。

127.0.0.1:6379 get key3"dee3"

 

127.0.0.1:6379 get key4"dee4"

127.0.0.1:6379> get name

127.0.0.1:6379 get key5(nil)⑧ getset 方法

 

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

"totobrother"

复制代码 代码如下:127.0.0.1:6379 getset key1 emperor"dee1"

 

⑨ getrange 方法

127.0.0.1:6379> setnx name totobrother

获取 key 的 value 值的子字符串。复制代码 代码如下:127.0.0.1:6379 get email"dee@gmail.comcom"

 

127.0.0.1:6379 getrange email 0 12"dee@gmail.com"返回第 0 到第12 个字符。⑩ mget 方法

(integer) 0

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

 

复制代码 代码如下:127.0.0.1:6379 mget key1 key2 key3 key4 key5 1) "emperor"2) "dee2"3) "dee3"4) "dee4"5) (nil)

127.0.0.1:6379> get name

incr 方法对 key 的值做 加加 操作,并返回新的值。

 

每次递增1复制代码 代码如下:127.0.0.1:6379 set age 28OK

"totobrother"

127.0.0.1:6379 get age"28"

 

127.0.0.1:6379 incr age(integer) 29

127.0.0.1:6379> set age 20

127.0.0.1:6379 incr age(integer) 30

 

127.0.0.1:6379 get age"30"复制代码 代码如下:127.0.0.1:6379 get real-age(nil)

OK

127.0.0.1:6379 incr real-age(integer) 1

 

127.0.0.1:6379 get real-age"1"

127.0.0.1:6379> setnx age2 20

incrby 方法

 

同 incr 方法类似,加指定值,key 不存在时会设置 key,并认为原来的 value 为 0。

(integer) 1

复制代码 代码如下:127.0.0.1:6379 get times(nil)

 

127.0.0.1:6379 incrby times 5(integer) 5

127.0.0.1:6379> setnx age2 40

127.0.0.1:6379 get times"5"复制代码 代码如下:127.0.0.1:6379 incrby times -5(integer) 0

 

127.0.0.1:6379 get times"0"

(integer) 0

decr 方法

 

对 key 的值做 减减操作。

127.0.0.1:6379> get age2

decrby 方法

 

同 decr 方法类似,减指定值。

"20"

复制代码 代码如下:127.0.0.1:6379 get age"30"

 

127.0.0.1:6379 decr age (integer) 29

 

127.0.0.1:6379 decrby age 10(integer) 19

 

127.0.0.1:6379 decrby age -10(integer) 29

Setex

append 方法

 

给指定 key 的字符串追加 value ,返回新字符串的长度。

设置key对应的值为string类型的value,并指定此键值对应的有效期。

复制代码 代码如下:127.0.0.1:6379 get name"deathmask"

 

127.0.0.1:6379 append name @163.com(integer) 17

例如:我们添加一个haircolor=red的键值对,并指定有效期为10秒。

127.0.0.1:6379 get name"deathmask@163.com"

 

strlen 方法

[toto@localhost bin]$ ./redis-cli 启动服务端

取指定 key 的 value 值的长度。

 

复制代码 代码如下:127.0.0.1:6379 get name"deathmask@163.com"

127.0.0.1:6379> setex haircolor 10 red 通过setex设置指定时间内的key value值有效

127.0.0.1:6379 strlen name(integer) 17

 

Hash 类型

OK

Redis hash 是一个 string 类型的 field 和 value 的 映射表。它的添加、删除操作都是 0(1)。

 

hash 特别 适合用于存储对象。相较于将对象的每个字段存成单个 string 类型。

127.0.0.1:6379> get haircolor 10秒内的时候有效

将一个对象存储在 hash 类型中会占用更少的内存,并且可以更方便的存取整个对象。

 

来存储的。

"red"

这个 zipmap 其实并不是 hash table,但是 zipmap 相比正常的 hash 实现可以节省不少 hash 本身需要的一些元数据存储开销。

 

尽管 zipmap 的添加,删除,查找都是 O(n),但是由于一般对象的 field 数量都不太多,所以使用 zipmap 也是很快的,也就是说添加删除平均还是 O(1)。

127.0.0.1:6379> get haircolor 10秒后无效了,10秒钟以后这个键会消失,可以重新对其设置。

如果 field 或者 value的大小超出一定限制后, Redis 会在内部自动将 zipmap 替换成正常的 hash 实现. 这个限制可以在配置文件中指定。

 

hash-max-zipmap-entries 64 #配置字段最多 64 个,hash-max-zipmap-value 512 #配置 value 最大为 512 字节)

(nil)

① hset 方法 / hget 方法

 

设置hash field 为指定值,如果 key 不存在,则先创建。

127.0.0.1:6379> setex当不指定时间的时候,表示永久有效。

复制代码 代码如下:127.0.0.1:6379 hset myhash field1 hello(integer) 1

 

说明:myhash 是 hash 表的名称,field1 是 hash 表的一个字段,hello 是这个字段对应的值。存储用户比较方便。

Setrange

复制代码 代码如下:127.0.0.1:6379 hset user:001 name dee(integer) 1

 

127.0.0.1:6379 hget user:001 name"dee"

设置指定key的value值的字符串。

说明:设置 user 表 id 为 001 的用户,用户名为 dee。

 

可以把 user:001 看作一张表。

例如:我们希望将lijie的126邮箱替换为gmail邮箱。

② hsetnx 方法

 

设置 hash field 为指定值,如果 key 不存在,则先创建;如果存在,则返回 0。

127.0.0.1:6379> set name lijie@126.com 设置name的值

复制代码 代码如下:127.0.0.1:6379 hsetnx myhash field "hello"(integer) 1

 

127.0.0.1:6379 hsetnx myhash field "hello!"(integer) 0

OK

127.0.0.1:6379 hget myhash field"hello"

 

③ hmset 方法

127.0.0.1:6379> get name 获得name的值

同时设置 hash 的多个 field

 

复制代码 代码如下:127.0.0.1:6379 hmset user:002 name dee specialty phpOK

"lijie@126.com"

127.0.0.1:6379 hget user:002 name"dee"

 

127.0.0.1:6379 hget user:002 specialty"php"

127.0.0.1:6379> setrange name 6 gmail.com 这里的6表示字符所在的下标,表示从第几个下标开始替换。

④ hget 方法

 

获取全部指定的 hash field。

(integer) 15 返回的是字符串的长度。

复制代码 代码如下:127.0.0.1:6379 hmget user:002 name specialty1) "dee"2) "php"

 

⑤ hincrby 方法

127.0.0.1:6379> get name 获得指定key的对应的值。

指定的 hash field 加上给定值。

 

复制代码 代码如下:127.0.0.1:6379 hmset user:002 name dee specialty redis age 28OK

"lijie@gmail.com"

127.0.0.1:6379 hincrby user:002 age -6(integer) 22

 

127.0.0.1:6379 hmget user:002 name specialty age1) "dee"2) "redis"3) "22"

127.0.0.1:6379>

127.0.0.1:6379 hincrby user:002 age 5(integer) 27

 

127.0.0.1:6379 hmget user:002 name specialty age1) "dee"2) "redis"3) "27"

 

⑥ hexists 方法

 

测试指定 field 是否存在。

mset (批量设置)

复制代码 代码如下:127.0.0.1:6379 hexists user:002 name(integer) 1

 

127.0.0.1:6379 hexists user:002 sex(integer) 0⑦ hlen 方法

一次设置多个key的值成功返回OK表示所有的值都设置了,失败返回0表示没有任何值被设置。

返回指定 hash 的 field 数量。

 

复制代码 代码如下:127.0.0.1:6379 hlen user:002(integer) 3⑧ hdel 方法

127.0.0.1:6379> mset key1 lijie1 key2 lijie2 批量设置key1和key2

删除指定 hash 的 field。

 

复制代码 代码如下:127.0.0.1:6379 hdel user:002 age(integer) 1

OK

127.0.0.1:6379 hget user:002 age(nil)⑨ hkeys 方法

 

返回 hash 的所有 field。

127.0.0.1:6379> get key1

复制代码 代码如下:127.0.0.1:6379 hkeys user:0021) "name"2) "specialty"⑩ hvals 方法

 

返回 hash 的所有 value。

"lijie1"

复制代码 代码如下:127.0.0.1:6379 hvals user:0021) "dee"2) "redis" hgetall 方法

 

获取某个 hash 中全部的 field 及 value。

127.0.0.1:6379> get key2

复制代码 代码如下:127.0.0.1:6379 hgetall user:0021) "name"2) "dee"3) "specialty"4) "redis"

 

设置 hash 类型的数据,首先要设置 hash 的表,然后设置 hash 的 field,最后设置 hash field 的 value。

"lijie2"

 

127.0.0.1:6379>

 

 

 

msetnx

 

一次设置多个key的值,成功返回OK表示所有的值设置了。失败返回0表示没有任何值被设置,但是不会覆盖已经存在的key.

 

127.0.0.1:6379> get key2

 

"lijie2"

 

如果一个已经设置过,那么都设置不成功。如果有一个设置成功了,都设置不成功了

 

127.0.0.1:6379> msetnx key4 lampbrother.net key5 lijie@lampbrother key2 toto

 

(integer) 0

 

 

 

只有都没有设置过的,才可以进行设置。

 

127.0.0.1:6379> msetnx key4 lampbrother.net key5 lijie@lampbrother

 

(integer) 1

 

127.0.0.1:6379> get key4

 

"lampbrother.net"

 

127.0.0.1:6379> get key5

 

"lijie@lampbrother"

 

127.0.0.1:6379>

 

 

 

get

 

获取key对应的string值,如果key不存在返回nil

 

getset :获取旧值,并设置新值。

 

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

 

127.0.0.1:6379> getset key6 30

 

(nil)

 

127.0.0.1:6379> get key6

 

"30"

 

127.0.0.1:6379>

 

 

 

getrange

 

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

 

127.0.0.1:6379> get key5

 

"lijie@lampbrother"

www.129028.com, 

127.0.0.1:6379> getrange key5 3 10

 

"ie@lampb"

 

127.0.0.1:6379>

 

 

 

mget (批量获取)

 

一次获取多个key的值,如果对应key不存在,则对应返回nil.

 

127.0.0.1:6379> mget key1 key2 key3 key4 key5 key6

 

1) "lijie1"

 

2) "lijie2"

 

3) (nil)

 

4) "lampbrother.net"

 

5) "lijie@lampbrother"

 

6) "30"

 

127.0.0.1:6379>

 

 

 

incr

 

对key的值做加加操作,并返回新的值。

 

 

 

incrby

 

同incr类似,加指定值,key不存在时候会设置key,并认为原来的value是0.

 

127.0.0.1:6379> decr key6

 

(integer) -1

 

127.0.0.1:6379> decr key6

 

(integer) -2

 

127.0.0.1:6379> incr key6

 

(integer) -1

 

127.0.0.1:6379> incr key6

 

(integer) 0

 

127.0.0.1:6379> incrby key6 +5

 

(integer) 5

 

127.0.0.1:6379> incrby key +5

 

(integer) 5

TAG标签:
版权声明:本文由www.129028.com-澳门金沙唯一官网www129028com发布于编程新闻,转载请注明出处:string 是最简单的类型,String是最简单的类型