Redis学习笔记(二)入门基础
本文最后更新于:December 3, 2021 pm
Redis 是当前互联网世界最为流行的 NoSQL(Not Only SQL)数据库。Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。Redis 具备一定持久层的功能,也可以作为一种缓存工具。对于 NoSQL 数据库而言,作为持久层,它存储的数据是半结构化的,这就意味着计算机在读入内存中有更少的规则,读入速度更快。Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。
目录
1.基础命令
1 |
|
1.1 切换数据库(select)
Redis 默认有16个数据库(可在redis.conf文件中进行查看),并且默认使用的是第0个数据库。使用 select index
进行切换数据库。
1 |
|
1.2 查看数据库大小(dbsize)
使用 dbsize
进行查看当前数据库的大小。大小指的是数据库中数据的条数。
1 |
|
1.3 插入键值对(set)
使用 set key value
进行插入数据。使用 get key
获取数据。
1 |
|
1.4 查看所有键(key)
使用 keys *
可以查看当前数据库中的所有键。
1 |
|
1.5 删除(del)
使用 del key
删除已存在
的key。
1 |
|
1.6 清除数据库
1.6.1 清空所有数据库数据(flushall)
1 |
|
1.6.2 清空当前数据库数据(flushdb)
1 |
|
1.7 判断是否存在(exists)
1 |
|
判断 key
为 name
的是否存在,如果不存在 (integer) 0
,存在 (integer) 1
。
1.8 移除数据(move)
1 |
|
移除当前数据库中的 key
为 name
的数据。其中的 1
表示当前数据库。
1.9 设置过期时间(expire)
给数据设置过期时间。过了过期时间就会被删除。
1 |
|
给指定的 key 设置过期时间(秒)。
1.9.1 查看剩余时间(ttl)
1 |
|
查看 key 的过期剩余时间。
1.9.2 创建并设置过期时间(setex、setnx)
- 创建并设置过期时间。
1 |
|
- 如果不存在key,就创建。存在就不做任何事。
1 |
|
1.10 查看类型(type)
1 |
|
2.五大数据类型
2.1 String
2.1.1 追加(append)
1 |
|
如果 key
不存在,则会自动创建。
2.1.2 获取长度(strlen)
1 |
|
2.1.3 加减值
2.1.3.1 加值1(incr)
1 |
|
2.1.3.2 减值1(decr)
1 |
|
2.1.3.3 加特定值(incrby)
1 |
|
2.1.3.4 减特定值(decrby)
1 |
|
2.1.3.5 截取子串(getrange)
注意:区间是闭区间的!!!,而不是左闭右开。下标也是从0开始的。
1 |
|
2.1.3.6 替换子串(setrange)
替换指定位置开始的子字符串。
1 |
|
2.1.4 批量操作
2.1.4.1 批量创建(mset)
1 |
|
如果不存在,就创建:
1 |
|
注意:这种属于原子性操作,要么都成功,要么都失败。即:要求key都满足不存在或存在,如果既有存在的key,又有不存在的key,则整个命令都执行失败!!!
2.1.4.2 批量获取(mget)
1 |
|
2.1.5 组合命令(getset)
getset key value
先get
操作然后再set
操作。可自行理解以下代码的结果:
1 |
|
注意:没有 setget
组合命令!!!
2.2 List
可以理解成是一个链表。其中的值可以是重复。并且所有的 list
命令 一般
都是以 l
开头的。
2.2.1 添加数据
2.2.1.1 头部进行添加(lpush)
是在 list
的 头部
进行添加。
1 |
|
示例:
1 |
|
也可以理解成是在左边进行添加。因为是从左到右读数据。
2.2.1.1 尾部进行添加(rpush)
1 |
|
也可以理解成是在右边进行添加。因为是从左到右读数据。
2.2.2 获取数据
2.2.2.1 范围数据(lrange)
1 |
|
示例:
1 |
|
2.2.2.2 获取指定数据(lindex)
注意:没有rindex命令。
1 |
|
2.2.3 获取列表的长度(llen)
1 |
|
2.2.4 移除特定值(lrem)
lrem key count value
移除指定的value,其中的count指定的是移除的个数。
1 |
|
2.2.5 截取数据(ltrim)
用来截取保留一部分数据。
ltrim key start end
只保留[start,end]中的数据。
1 |
|
2.2.6 移动数据(rpoplpush)
将一个list中的最后一个数据删除,并将该删除数据移到另外一个list中。
rpoplpush source destination
将 source 中的数据删除,并将其添加至 destionation 中。
1 |
|
2.2.7 删除数据
2.2.7.1 头部删除(lpop)
同样,也可以理解成是在左边进行删除。
2.2.7.1 尾部删除(rpop)
同样,也可以理解成是在右边进行删除。
示例:
1 |
|
2.2.8 更新数据(lset)
没有 rset!!!
用此命令前需要判断key是否存在,如果不存在就进行此命令,则会报错。
判断key是否存在:
1 |
|
当key存在时,就可以进行更新操作。
lset key index value
index 表示被更新位置的下标,value 为新值。
1 |
|
2.2.9 插入数据(linsert)
将一个新值插入到已有的值的前面或后面。
linsert key before|after pivot value
在pivot之前或之后插入value。
1 |
|
注意:没有 rinsert
命令。
2.4 Set
set中的值是无序无重复值的。并且所有的 set
命令 一般
都是以 s
开头的。
2.4.1 插入数据(sadd)
sadd key member1 [member2 ….]
1 |
|
2.4.2 查询数据(smembers)
smembers key
查询key下的所有数据。
1 |
|
2.4.3 判断是否包含特点数据(sismember)
sismember key member
查询key中是否包含member。
1 |
|
2.4.4 查询个数(scard)
scard key
查询key中的总数据个数。
1 |
|
2.4.5 移除指定数据(srem)
srem key member1 [member2 ….]
在key中移除数据member1。
1 |
|
2.4.6 随机移除数据(spop)
spop key [count]
在key中随机移除1个(默认)或count个数据。
1 |
|
2.4.7 随机取值(srandmember)
srandmember key [count]
从key中随机取出1个(默认)或count个数据。
1 |
|
2.4.8 移动数据(smove)
将一个set中指定的值移到另外一个set中。
smove source destination member
将source集合中的member数据移动到destination中。
1 |
|
2.4.9 数学中集合操作
2.4.9.1 差集(sdiff)
sdiff key [key1 ….]
1 |
|
2.4.9.2 交集(sinter)
sinter key [key1 ….]
1 |
|
2.4.9.3 并集(sunion)
sunion key [key1 ….]
1 |
|
2.5 Hash
可以理解成一个Map集合。即存储形式是 key-map
,而其中的map又是 key-value 形式的,所以存储的数据是map形式的。和之前的key-value形式一样,这里只不过是将value变成了key-value。并且所有的 hash
命令 一般
都是以 h
开头的。
2.5.1 存储数据(hset)
hset key field value
其中的field为字段名。
1 |
|
2.5.2 提取数据(hget)
hget key field
1 |
|
2.5.3 批量存储数据(hmset)
hmset key field value [field value ….]
1 |
|
注意:如果key和field已经存在了,则将会用新value替换旧value。
2.5.4 批量提取数据(hmget)
hmget key field [field ….]
1 |
|
2.5.5 获取全部键值对(hgetall)
hgetall key
获取的是所有的键值对数据,是所有的键和所有的值,即map<key,value>。所以,显示的数据是一行field,一行value。
1 |
|
2.5.6 删除数据(hdel)
hdel key field [field ….]
1 |
|
2.5.7 获取总键值对数(hlen)
hlen key
获取的是键值对形式的总数量,即字段总数。
1 |
|
2.5.8 判断字段是否存在(hexists)
hexists key field
1 |
|
2.5.9 获取所有的key(hkeys)
hkeys key
获取的只是所有的字段中的key,也就是map中的key。
1 |
|
2.5.10 获取所有的value(hvals)
hvals key
获取所有的value。
1 |
|
2.5.11 增减值(hincrby)
hincrby key field increment
1 |
|
2.5.12 不存在则创建(hsetnx)
hsetnx key field value
如果key不存在,则创建。存在则创建失败。
1 |
|
2.6 有序集合(sorted set)
有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个 double 类型的分数。正是通过分数来为集合中的成员进行的排序。有序集合的成员是唯一的,但分数(score)却可以重复。(理解上也可以把set中的map中的key,当成这里的score。只是理解上!)
2.6.1 插入数据(zadd)
zadd key [nx|xx] [ch] [incr] score member [score member ….]
1 |
|
2.6.2 获取数据(zrange)
1 |
|
2.6.3 排序
2.6.3.1 升序排序(zrangebuscore、zrange)
返回有序集合中指定分数区间的成员列表。
- zrangebyscore key min max [withscores] [limit offset count]
其中,min和max表示范围。withscores 表示显示 score (默认情况下是不显示的)。具有相同分数值的成员按字典序来排列(该属性是有序集提供的,不需要额外的计算)。
默认情况下,区间的取值使用闭区间 (小于等于或大于等于),也可以通过给参数前增加 (
符号来使用可选的开区间 (小于或大于)。如下:
1 |
|
可查看以下代码运行的结果的差别。
1 |
|
- zrange key start end [withscore]
1 |
|
2.6.3.2 降序排序(zrevrange)
zrevrange key start stop [withscore]
成员的位置按分数值递减(从大到小)来排列。具有相同分数值的成员按字典序的逆序(reverse lexicographical order)排列。此命令的使用同 arange
一样。
对比示例:可查看效果进行对比。
1 |
|
2.6.4 移除指定数据(zrem)
zrem key member [member ….]
1 |
|
2.6.5 获取数据个数(zcard)
zcard key
1 |
|
2.6.6 获取指定区间分数的成员数(zcount)
zcount key min max
1 |
|
本文作者: 墨水记忆
本文链接: https://tothefor.com/DragonOne/2527281855.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!