Redis入门基础 | 青训营

67 阅读7分钟

一、Redis基础入门

Redis存在的意义

1、各种网站崩了的现象,由于海量用户,高并发 导致。

2、其中罪魁祸首就是关系型数据库:

  • 性能瓶颈:磁盘IO性能低下
  • 扩展瓶颈:数据关系复杂,扩展性差,不便于大规模集群

3、用Redis来解决问题的思路:

  • 用内存存储(降低磁盘IO次数,越低越好)
  • 不存储关系,只存储数据(去除数据间关系,越简单越好)

Nosql

1、Nosql(Not-Only SQL):作为关系型数据库的补充。用内存存储;不存储关系,只存数据

2、Nosql特征:

  • 可扩容 可伸缩
  • 大数据量下的高性能
  • 灵活的数据模型
  • 高可用 3、常见的Nosql数据库:Redis、memcache、HBase、MongoDB

Redis特征

1、数据间没有必然的关联关系,都是一个个key-value

2、内部采用单线程机制进行工作

3、redis所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发带来的数据影响。

4、高性能:Redis数据存储在内存中,读写速度非常快

5、支持多种数据结构:Redis不仅仅支持简单的字符串类型,还支持列表、集合、哈希、有序集合等多种数据结构。这使得Redis可以灵活地应对各种场景下的数据存储需求。

6、持久化支持:Redis支持将数据持久化到磁盘上,以防止系统故障导致数据丢失。可以通过RDB快照和AOF日志两种方式实现数据的持久化。

二、全局基本操作

set key val :添加 key-val

keys * :查看当前 redis 的 所有 key

get key ”获取 key 对应的值

select index :切换 redis 数据库

dbsize :查看当前数据库的 key-val 数量

flushdb :清空当前数据库的 key-val

flushall :清空所有数据库的 key-val

三、CRUD基本操作

Redis 支持的五大数据类型是: String(字符串) 、Hash (哈希)、List(列表)、Set(集合)和 zset(sorted set有序集合)

1、string

string 是 redis 最基本的类型,一个 key 对应一个 value。string 类型是二进制安全的。除普通的字符串外,也可以存放图片等数据。

  • set key value:添加String数据,如果存在就相当于修改,不存在则是添加

  • get key:获取key对应的value数据

  • del key:删除key对应的value数据

  • setex key time value:(set with expire)键秒值,设置限时的 key-value

  • mset key1 value1 key2 value2 ... :同时设置一个或多个 key-value

  • mget key1 key2 ... :同时获取多个 key-value

2、Hash

Redis hash 是一个键值对集合

Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对
象。

  • hset key field value :将哈希表 key 中域 field 的值设置为 value 。如果给定的哈希表并不存在, 那么一个新的哈希表将被创建并执行 HSET 操作。如果域 field 已经存在于哈希表中, 那么它的旧值将被新值 value 覆盖。

  • hget key field :返回给定域的值。如果给定域不存在于哈希表中, 又或者给定的哈希表并不存在, 那么命令返回 nil 。

  • hgetall key :返回哈希表 key 中,所有的域和值。

  • hdel key field :删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。

  • hmset key field1 value1 field2 value2 ... :同时将多个 field-value (域-值)对设置到哈希表 key 中。此命令会覆盖哈希表中已存在的域。如果 key 不存在,一个空哈希表被创建并执行 HMSET操作。

  • hmget key field1 field2 ... :返回哈希表 key 中,一个或多个给定域的值。如果给定的域不存在于哈希表,那么返回一个 nil 值。因为不存在的 key 被当作一个空哈希表来处理,所以对一个不存在的 key 进行 HMGET 操作将返回一个只带有 nil 值的表。

  • hlen key :返回哈希表 key 中域的数量。

  • hexists key field :检查给定域 field 是否存在于哈希表 key 当中。给定域存在时返回 1 , 在给定域不存在时返回 0 。

3、List

列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

List 本质是个链表,  List 的元素 是有序的,元素的值可以重复.

  • lpush key value1 value2 ... :将一个或多个值 value 插入到列表 key 的表头。如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表头: 比如说,对空列表 mylist 执行命令 LPUSH mylist a b c ,列表的值将是 c b a ,这等同于原子性地执行 LPUSH mylist a 、 LPUSH mylist b 和 LPUSH mylist c 三个命令。如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。当 key 存在但不是列表类型时,返回一个错误。

  • rpush key value1 value2 ... :将一个或多个值 value 插入到列表 key 的表尾(最右边)。如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表尾:比如对一个空列表 mylist 执行 RPUSH mylist a b c ,得出的结果列表为 a b c ,等同于执行命令 RPUSH mylist a 、 RPUSH mylist b 、 RPUSH mylist c 。如果 key 不存在,一个空列表会被创建并执行 RPUSH 操作。当 key 存在但不是列表类型时,返回一个错误。

  • lrange key start stop :返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定。下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

  • lpop key :移除并返回列表 key 的头元素。当 key 不存在时,返回 nil 。

  • rpop key :移除并返回列表 key 的尾元素。当 key 不存在时,返回 nil 。

  • del key :移除对应List内数据,使其为空。

  • llen key :返回列表 key 的长度。如果 key 不存在,则 key 被解释为一个空列表,返回 0 .如果 key 不是列表类型,返回一个错误。

4、Set操作

Redis 的 Set 是 string 类型无序集合。

底层是 HashTable 数据结构, Set 也是存放很多字符串元素,字符串元素是无序
的,而且元素的值不能重复

  • sadd key member1 member2 ... :将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。假如 key 不存在,则创建一个只包含 member 元素作成员的集合。当 key 不是集合类型时,返回一个错误。(在Redis2.4版本以前, SADD 只接受单个 member 值。)

  • smembers key :返回集合 key 中的所有成员(无序的)。不存在的 key 被视为空集合。

  • sismember key member : 判断 member 元素是否集合 key 的成员。如果 member 元素是集合的成员,返回 1 。 如果 member 元素不是集合的成员,或 key 不存在,返回 0 。

  • srem key member1 member2 … :移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略。当 key 不是集合类型,返回一个错误。(在 Redis 2.4 版本以前, SREM 只接受单个 member 值。)

5、Zset

不允许有重复值 有序集合中的value类型都是string 只能增加和查,不能更改 每个值都会有一个分数(score),根据分数将值从小到大排序 排序后有索引,从0开始

  • zadd key score member [score2 member2...] 添加数据。同样如果成员存在,可以用添加数据的命令修改成员对应的分数,覆盖。

  • zrange key start stop 通过索引查看

  • zrangebyscore key min max 通过scores值查看。如果相同分数对应多个成员,那么多个成员按ascii排序。

  • zremrangebyscore key min max通过scores值删除。

  • zrem key member [member...]删除数据。

  • zremrangebyrank key min max通过索引删除多个数据。

  •  zscore key member 查看分数。member是成员。