redis 介绍 五种类型常用命令 2020/2/15

1.1什么是Redis?

Redis是用C语言开发的一个开源的高性能键值对(key-value)内存数据库。

它提供五种数据类型来存储值:字符串类型、散列类型、列表类型、集合类型、有序集合类型

它是一种NoSQL数据库。

1.2什么是NoSQL?

NoSQL,即Not-Only SQL(不仅仅是SQL),泛指非关系型的数据库。

什么是关系型数据库?数据结构是一种有行有列的数据库

NoSQL数据库是为了解决高并发、高可用、高可扩展、大数据存储问题而产生的数据库解决方案。

NoSQL可以作为关系型数据库的良好补充,但是不能替代关系型数据库。

1.3NoSQL数据库分类

1.键值(Key-Value)存储数据库

相关产品: Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB

典型应用: 内容缓存,主要用于处理大量数据的高访问负载。

数据模型: 一系列键值对

优势: 快速查询

劣势: 存储的数据缺少结构化

2.列存储数据库

相关产品:Cassandra, HBase, Riak

典型应用:分布式的文件系统

数据模型:以列簇式存储,将同一列数据存在一起

优势:查找速度快,可扩展性强,更容易进行分布式扩展

劣势:功能相对局限

3.文档型数据库

相关产品:CouchDB、MongoDB

典型应用:Web应用(与Key-Value类似,Value是结构化的)

数据模型: 一系列键值对

优势:数据结构要求不严格

1.4Redis的应用场景

内存数据库(登录信息、购物车信息、用户浏览记录等)

缓存服务器(商品数据、广告数据等等)。(最多使用)

解决分布式集群架构中的session分离问题(session共享)。

任务队列。(秒杀、抢购、12306等等)

支持发布订阅的消息模式

应用排行榜。

网站访问统计。

数据过期处理(可以精确到毫秒)

1.5Redis数据类型

String(字符类型)

Hash(散列类型)

List(列表类型)

Set(集合类型)

SortedSet(有序集合类型,简称zset)

命令是忽略大小写的,而key是不忽略大小写的

String类型

赋值 SET key value

取值 GET key

取值并赋值 GETSET key value

数值增减

1.当value为整数数据时,才能使用以下命令操作数值的增减。

2.数值递增都是原子操作

递增 INCR key

增加指定的整数 INCRBY key increment

增减 DECR key

减少指定的整数 DECRBY key decrement

仅当不存在时赋值

使用该命令可以实现分布式锁的功能,后续讲解!!!

语法:setnx key value

向尾部追加值 APPEND key value

获取字符串长度 STRLEN key

同时设置/获取多个键值

MSET key value [key value …]

MGET key [key …]


Hash类型(散列类型)

字段值只能是字符串类型,不支持散列类型、集合类型等其它类型

赋值 插入操作时HSET命令返回1,更新操作时返回0

赋值

一次只能设置一个字段值 HSET key field value

一次可以设置多个字段值 HSET key field value

当字段不存在时赋值 HSETNX key field value

取值

一次只能获取一个字段值 HGET key field

实例 hget user username

一次可以获取多个字段值    HMGET key field [field ...]

实例 hmget user age username

获取所有字段值 HGETALL key

实例 hgetall user

删除字段

删除一个或多个字段,返回值是被删除的字段个数 HDEL key field [field ...]

实例 hdel user age

增加数字 HINCRBY key field increment 

实例 hincrby user age 2

判断字段是否存在 HEXISTS key field

实例 hexists user age

获取所有字段 hgetall key

List类型

Redis的列表类型(list)可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的某一个片段。

列表类型内部是使用双向链表(double linked list)实现的,所以向列表两端添加元素的时间复杂度为0(1),获取越接近两端的元素速度就越快。这意味着即使是一个有几千万个元素的列表,获取头部或尾部的10条记录也是极快的。

向列表两端增加元素

向列表左边增加元素        LPUSH key value [value ...]

向列表右边增加元素        RPUSH key value [value ...]

查看列表        LRANGE key start stop

从列表两端弹出元素

LPOP命令从列表左边弹出一个元素,会分两步完成:

第一步是将列表左边的元素从列表中移除

第二步是返回被移除的元素值

LPOP key  (左)

RPOP key    (右)

获取列表中元素的个数        LLEN key


Set类型

set类型即集合类型,其中的数据是不重复且没有顺序。

增加     SADD key member [member ...]

删除   SREM key member [member ...]

获得集合中的所有元素    SMEMBERS key

判断元素是否在集合中        SISMEMBER key member


集合运算命令        

集合的差集运算A-B    SDIFF key [key ...]

集合的交集运算A ∩ B    SINTER key [key ...]

集合的并集运算A∪ B    SUNION key [key ...]


从集合中弹出一个元素    SPOP key

由于集合是无序的,所有SPOP命令会从集合中随机选择一个元素弹出


SortedSet类型zset

在集合类型的基础上,有序集合类型为集合中的每个元素都关联一个分数,这使得我们不仅可以完成插入、删除和判断元素是否存在在集合中,还能够获得分数最高或最低的前N个元素、获取指定分数范围内的元素等与分数有关的操作。

在某些方面有序集合和列表类型有些相似。

1、二者都是有序的。

2、二者都可以获得某一范围的元素。

但是,二者有着很大区别:

1、列表类型是通过链表实现的,获取靠近两端的数据速度极快,而当元素增多后,访问中间数据的速度会变慢。

2、有序集合类型使用散列表实现,所有即使读取位于中间部分的数据也很快。

3、列表中不能简单的调整某个元素的位置,但是有序集合可以(通过更改分数实现)

4、有序集合要比列表类型更耗内存。

增加元素    ZADD key score member [score member ...]

向有序集合中加入一个元素和该元素的分数,如果该元素已经存在则会用新的分数替换原有的分数。返回值是新加入到集合中的元素个数,不包含之前已经存在的元素。

获得排名在某个范围的元素列表    

按照元素分数从小到大的顺序返回索引从start到stop之间的所有元素

ZRANGE key start stop [WITHSCORES]

按照元素分数从大到小的顺序返回索引从start到stop之间的所有元素

ZREVRANGE key start stop [WITHSCORES]

获取元素的分数    ZSCORE key member

删除元素        ZREM key member [member ...]

移除有序集key中的一个或多个成员,不存在的成员将被忽略。

当key存在但不是有序集类型时,返回一个错误。

获取元素的排名

从小到大    ZRANK key member

从大到小    ZREVRANK key member


通用命令

keys    keys pattern

del        DEL key

确认一个key 是否存在    exists key

expire    

Redis在实际使用过程中更多的用作缓存,然而缓存的数据一般都是需要设置生存时间的,即:到期后数据销毁。

EXPIRE key seconds 设置key的生存时间(单位:秒)key在多少秒后会自动删除

TTL key 查看key生于的生存时间

PERSIST key 清除生存时间

PEXPIRE key milliseconds 生存时间设置单位为:毫秒

显示指定key的数据类型    type key

你可能感兴趣的:(redis 介绍 五种类型常用命令 2020/2/15)