一、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是成员。