`
足至迹留
  • 浏览: 494766 次
  • 性别: Icon_minigender_1
  • 来自: OnePiece
社区版块
存档分类
最新评论

<redis-3> 3.1 redis数据类型之字符串

阅读更多
3.1 redis基本命令
1.获得符合规则的键名列表
keys pattern

keys(redis命令都是)不区分大小写,pattern支持glob风格通配符格式(注意不是正则),具体规则如下表所示。


为了演示KEYS命令,首先我们得给Redis加点数据。使用SET命令(会在后面介绍)建立一个名为bar的键:
redis>SET bar 1
OK

然后使用KEYS *就能获得Redis中所有的键了。
redis> KEYS *
1)	"bar"

注意
(1)KEYS命令需要遍历Redis中的所有键,当键的数量较多时会影响性能,不建议在生产环境中使用。
(2)Redis命令不区分大小写。
(3)pattern本身是字符串,带不带””都一样,建议不带,除非value包含空格则一定要带。

2.判断一个键是否存在
EXISTS key

如果键存在则返回整数类型1,否则返回0(前面讲到过返回值有5种,状态回复,错误回复,整数回复,字符串回复,多行字符串回复)。如:
redis>EXISTS bar
(integer) 1
redis>EXISTS noexists
(integer)0


3.删除键
DEL key [key …]

可以删除一个或多个键,返回值是删除的键的个数。如:
redis>DEL bar
(integer) 1
redis>DEL bar
(integer) 0


技巧:
DEL 命令的参数不支持通配符,但我们可以结合Linux 的管道和xargs 命令自己实现删除所有符合规则的键。比如要删除所有以“user:”开头的键,就可以执行redis-cli KEYS "user:*" | xargs redis-cli DEL。另外由于DEL 命令支持多个键作为参数, 所以还可以执行redis-cli DEL 'redis-cli KEYS"user:*"'来达到同样的效果,但是性能更好。

4.获得键值的数据类型
TYPE key

TYPE命令用来获得键值的数据类型,返回值可能是string(字符串类型)、hash(散列类型)、list(列表类型)、set(集合类型)、zset(有序集合类型)。例如:
redis>SET foo 1
OK
redis>TYPE foo
string
redis>LPUSH bar 1
(integer) 1
redis>TYPE bar
list

LPUSH命令的作用是向指定的列表类型键中增加一个元素,如果键不存在则创建它。

3.2 字符串类型
3.2.1 介绍
字符串类型是Redis中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据。你可以用其存储用户的邮箱、JSON化的对象甚至是一张图片。一个字符串类型键允许存储的数据的最大容量是512MB①。
注释:①在Redis 3.0版本中可能会放宽这一限制,但无论如何,考虑到Redis的数据是使用内存存储的,512MB的限制已经非常宽松了。

字符串类型是其他4种数据类型的基础,其他数据类型和字符串类型的差别从某种角度来说只是组织字符串的形式不同。例如,列表类型是以列表的形式组织字符串,而集合类型是以集合的形式组织字符串。

3.2.2 命令
1.1 赋值与取值
SET key value
GET key

SET和GET是Redis中最简单的两个命令,它们实现的功能和编程语言中的读写变量相似,如welcome="hello"在Redis中是这样表示的:
redis>SET welcome hello
OK

想要读取键值则更简单:
redis>GET welcome
"hello"

当键不存在时会返回空结果(nil)。

1.2 同时获得/设置多个键值
MGET key [key …]
MSET key value [key value …]

MGET/MSET与GET/SET相似,不过MGET/MSET可以同时获得/设置多个键的键值。例如:
redis>MSET key1 v1 key2 v2 key3 v3
OK
redis>GET key2
"v2"
redis>MGET key1 key3
1) "v1"
2) "v3"


2.递增数字
2.1 INCR key
前面说过字符串类型可以存储任何形式的字符串,当存储的字符串是整数形式时,Redis提供了一个实用的命令INCR,其作用是让当前键值递增,并返回递增后的值,用法为:
redis>INCR num
(integer) 1
redis>INCR num
(integer) 2

当要操作的键不存在时会默认键值为0,所以第一次递增后的结果是1。当键值不是整数时Redis会提示错误:
redis>SET foo lorem
OK
redis>INCR foo
(error) ERR value is not an integer or out of range


2.2 增加指定的整数
INCRBY key increment

INCRBY命令与INCR命令基本一样,只不过前者可以通过increment参数指定一次增加的数值,如:
redis>INCRBY bar 2
(integer) 2
redis>INCRBY bar 3
(integer) 5


3 减少指定的整数
DECR key
DECRBY key decrement

DECR命令与INCR命令用法相同,只不过是让键值递减,例如:
redis>DECR bar
(integer)4
DECRBY key 5 相当于INCRBY key -5。


4 增加指定浮点数
INCRBYFLOAT key increment

INCRBYFLOAT 命令类似INCRBY命令,差别是前者可以递增一个双精度浮点数,如:
redis>INCRBYFLOAT bar 2.7
"6.7"
redis>INCRBYFLOAT bar 5E+4
"50006.69999999999999929"

包括INCR在内的所有Redis命令都是原子操作(atomic operation) ,无论多少个客户端同时连接,都不会出现线程问题。

5.向尾部追加值
APPEND key value

APPEND作用是向键值的末尾追加value。如果键不存在则将该键的值设置为value,即相
当于SET key value。返回值是追加后字符串的总长度。例如:
redis>SET key hello
OK
redis>APPEND key " world!"
(integer) 12

APPEND命令的第二个参数加了双引号,原因是该参数包含空格。

6. 获取字符串长度
STRLEN key

STRLEN命令返回键值的长度(单位:字节),如果键不存在则返回0。例如:
redis>STRLEN key
(integer)12
redis>SET key 你好
OK
redis>STRLEN key
(integer)6


提示:
Redis对于键的命名并没有强制的要求,但比较好的实践是用“对象类型:对象ID:对象属性”来命名一个键,如使用键user:1:friends来存储ID为1的用户的好友列表。对于多个单词则推荐使用“.”分隔,一方面是沿用以前的习惯(Redis以前版本的键名不能包含空格等特殊字符),另一方面是在redis-cli中容易输入,无需使用双引号包裹。

7.位操作
GETBIT key offset
SETBIT key offset value
BITCOUNT key [start] [end]
BITOP operation destkey key [key …]

一个字节由8个二进制位组成,Redis提供了4个命令可以直接对二进制位进行操作。为了演示,我们首先将foo键赋值为bar:
redis>SET foo bar
OK

bar的3个字母对应的ASCII码分别为98、97和114,转换成二进制后分别为1100010、1100001和1110010,所以foo键中的二进制位结构如下图所示。


7.1 getbit
GETBIT命令可以获得一个字符串类型键指定位置的二进制位的值(0或1),索引从0开始:
redis>GETBIT foo 0
(integer) 0
redis>GETBIT foo 6
(integer) 1

如果需要获取的二进制位的索引超出了键值的二进制位的实际长度则默认位值是0:
redis>GETBIT foo 100000
(integer) 0

7.2 setbit
SETBIT 命令可以设置字符串类型键指定位置的二进制位的值,返回值是该位置的旧值
如我们要将foo键值设置为aar,可以通过位操作将foo键的二进制位的索引第6位设为0,第7位设为1:
redis>SETBIT foo 6 0
(integer) 1
redis>SETBIT foo 7 1
(integer) 0
redis>GET foo
"aar"

如果要设置的位置超过了键值的二进制位的长度,SETBIT命令会自动将中间的二进制位设置为0,同理设置一个不存在的键的指定二进制位的值会自动将其前面的位赋值为0:
redis>SETBIT nofoo 10 1
(integer) 0
redis>GETBIT nofoo 5
(integer) 0


7.3 bitcount
BITCOUNT命令可以获得字符串类型键中值是1的二进制位个数,例如:
redis>BITCOUNT foo
(integer)10


可以通过参数来限制统计的字节范围,如我们只希望统计前两个字节(即"aa"):
redis>BITCOUNT foo 0 1
(integer)6


7.4 bitop
BITOP命令可以对多个字符串类型键进行位运算,并将结果存储在destkey参数指定的键
中。BITOP命令支持的运算操作有AND、OR、XOR 和NOT。如我们可以对bar和aar进行OR运
算:
redis>SET foo1 bar
OK
redis>SET foo2 aar
OK
redis>BITOP OR res foo1 foo2
(integer) 3
redis>GET res
"car"

利用位操作命令可以非常紧凑地存储布尔值。比如某网站的每个用户都有一个递增的整数ID,如果使用一个字符串类型键配合位操作来记录每个用户的性别(用户ID作为索引,二进制位值1和0表示男性和女性),那么记录100万个用户的性别只需占用100 KB多的空间,而且由于GETBIT和SETBIT的时间复杂度都是0(1),所以读取二进制位值性能很高。
  • 大小: 138 KB
  • 大小: 41.5 KB
0
0
分享到:
评论

相关推荐

    08次课 Redis-04 在SpringBoot中使用.doc

    StringRedisTemplate 是 SpringBoot 提供的一个 Redis 模板,用于操作 Redis 的字符串类型数据。下面是一个基本的使用示例: ```java @Autowired private StringRedisTemplate stringRedisTemplate; ...

    安装redis(主备)

    4. **丰富的数据类型**:Redis支持多种数据类型,包括字符串(string)、列表(list)、哈希(hash)、集合(set)、有序集合(sorted set)等。 5. **多功能实用工具**:Redis可以用于多种应用场景,如缓存、消息队列、计数器...

    Windows 64位下安装Redis详细教程1

    它支持多种数据结构,例如字符串(strings)、散列(hashes)、列表(lists)、集合(sets)以及有序集合(sorted sets)。由于其高性能特性,Redis被广泛应用于各种应用场景。 在Windows 64位环境下安装Redis的...

    redis3分布式集群部署

    - **多数据结构支持**:除了简单的键值对之外,Redis 还提供了字符串、哈希表、列表、集合、有序集合等多种数据结构,适用于各种复杂的业务场景。 - **持久化机制**:支持两种持久化方式,RDB 快照和 AOF(Append ...

    技术文档笔记Redis

    Redis支持五种基本数据类型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Sorted Set(有序集合)。 ##### 3.5 Redis常用数据操作命令 - **String类型**:`SET key value`、`GET key` - **Hash...

    redis包括客户端软件下载

    除了基本的键值对存储功能外,Redis还支持字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)、有序集合(Sorted Sets)等多种数据类型,并可以通过持久化机制将内存中的数据异步写入磁盘中,确保数据安全。...

    Windows安装Redis及使用教程

    通过本文档的学习,我们可以了解到在Windows环境下如何安装和配置Redis,以及如何使用Redis提供的不同数据类型和开发工具。Redis作为一款高性能的键值存储系统,在处理小而热的数据时表现尤其出色。此外,通过使用...

    redis学习笔记

    Redis支持五种主要的数据类型:字符串(String)、列表(List)、集合(Set)、有序集合(Sorted Set)和哈希(Hash)。 - **字符串**:最基础的数据类型,用于存储纯文本数据。 - **列表**:链表结构,适用于队列...

    spring+springmvc+Interceptor+jwt+redis实现sso单点登录

    它是由三个部分组成的字符串:Header(头部)、Payload(负载)和Signature(签名)。JWT的主要优点包括: - **无状态**:由于所有必要的信息都包含在令牌中,因此无需查询数据库。 - **轻量级**:JWT是自包含的,...

    python3开发django项目安装和使用redis教程

    Redis(Remote Dictionary Server)是一种开源的键值存储系统,它提供了多种数据结构的存储,如字符串(strings)、散列(hashes)、列表(lists)、集合(sets)以及有序集合(sorted sets)。Redis 的高性能特性使...

    redis(简介、数据结构、常用命令).docx

    字符串是最常用的数据类型之一,它可以存储任何形式的二进制数据,如文本或图片等。 ##### 4.2 列表(Lists) 列表是一种链表结构,支持在两端插入和删除元素的操作。这种数据类型非常适合实现队列或栈等结构。 ###...

    tomcat8 用redis共享session用于jdk8以上版本

    7. **序列化与反序列化**:因为Session是Java对象,而Redis只支持基本类型和字符串,所以需要实现一个序列化策略,将Session对象转换为字符串存储,取回时再反序列化。 8. **安全性与性能优化**:为了安全,可以...

    redis实战 红豆出品 兄弟连redis

    Redis支持的数据类型有字符串、哈希、列表、集合、有序集合等。它具备多种持久化策略,包括RDB和AOF两种方式。Redis还支持主从复制机制,可以通过复制功能实现数据的备份和读写分离。此外,Redis还支持事务,可以在...

    Redis安装和使用教程

    同时,它支持多种数据类型,如字符串、哈希、列表、集合等,并且可以通过主从复制机制来确保数据的高可用性和冗余性。 ##### 1.2 关系型数据库与非关系型数据库(Nosql) - **关系型数据库**:这类数据库基于关系...

    Redis配置及使用资料整理

    - 基础数据类型,可以存储任何字符串数据。 - 支持多种原子操作,如`SET`、`GET`、`INCR`等。 **2.2 列表(Lists)** - 双向链表结构,可以从头部或尾部添加元素。 - 常用命令有`LPUSH`、`RPUSH`、`LPOP`、`RPOP`等...

    redis学习笔记Redis.md

    通过以上内容的学习,我们不仅了解了 Redis 的基本概念及其与传统关系型数据库的区别,还掌握了 Redis 的主要数据类型和基本操作。这些知识对于理解 Redis 的应用场景和如何高效地使用 Redis 至关重要。无论是作为...

    Redis缓存中间件技术实践指南

    - **String(字符串)**:最基础的数据类型,可用于存储简单的键值对。 - **List(列表)**:适合用于实现队列和栈等数据结构。 - **Set(集合)**:存储不重复元素的集合。 - **Sorted Set(有序集合)**:除了能够...

    redis安装配置.docx

    它支持多种数据结构,如字符串(strings)、散列(hashes)、列表(lists)、集合(sets)以及有序集合(sorted sets)。此外,Redis还提供了丰富的命令集和客户端支持多种编程语言,使其成为开发者喜爱的数据存储...

    Redis的使用

    每种数据类型都有其特定的应用场景,例如字符串适合存储简单的键值对,哈希则适用于存储对象等复杂数据结构。 ##### 3.2 操作命令 Redis提供了丰富的命令集来操作这些数据类型。例如: - `SET key value`:设置键的...

Global site tag (gtag.js) - Google Analytics