📑前言
本文主要是【Redis】——Redis基本操作及使用的文章,如果有什么需要改进的地方还请大佬指出⛺️
🎬作者简介:大家好,我是听风与他🥇
☁️博客首页:CSDN主页听风与他
🌄每日一句:狠狠沉淀,顶峰相见
目录
- 📑前言
- Redis基本操作及使用
- 什么是Redis
- 关系型数据库和非关系数据库的区别
- 全局key操作
- 查看所有的key
- 删除
- 查看key是否存在,存在返回1,不存在返回0
- 查看key类型
- 运算
- Redis五种数据类型及操作
- value :都是字符串类型的(可加引号也可不加)
- string
- 设置
- 获取
- 查看过期时间
- 设置过期时间
- 追加
- redis里面所有的value,都是字符串类型的
- 设置/获取 多个
- list
- 添加
- 查看
- 获得list的元素个数
- 设置,修改数据
- 删除
- hash
- 设置
- 获取
- 删除
- 获取全部field value
- 获取所有的field
- 获取所有的value
- 获取field的个数
- set集合
- 设置
- 获取
- 删除
- 移动一个集合的值到另一个集合
- 判断集合存在某个值
- 交集
- 并集
- 差集
- zset
- 设置
- 获取
- 删除
- 索引
- zcard 查看有序集合元素数
- zrangebyscore 返回集合中 score 在给定区间的元素
- zcount 返回集合中 score 在给定区间的数量
- zscore : 查看score值
- zremrangebyrank : 删除集合中排名在给定区间的元素(正向)
- zremrangebyscore : 删除集合中 score 在给定区间的元素
- Redis发布和订阅
- 📑文章末尾
Redis基本操作及使用
什么是Redis
Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库。Redis全称为:Remote Dictionary Server,该软件使用C语言编写,Redis是一个key-value存储系统,它支持丰富的数据类型,如:string、list、set、zset(sorted set)、hash。
redis是一种nosql数据库,他的数据是保存在内存中,同时redis可以定时把内存数据同步到磁盘,即可以将数据持久化,还提供了多个语言的API,操作比较方便
- Redis特点:
Redis以内存作为数据存储介质,所以读写数据的效率极高,远远超过数据库。 - Redis应用场景:
因为Redis交换数据快,所以在服务器中常用来存储一些需要频繁调取的数据,这样可以大大节省系统直接读取磁盘来获得数据的I/O开销,更重要的是可以极大提升速度。
将这种热点数据存到Redis(内存)中,要用的时候,直接从内存取,极大的提高了速度和节约了服务器的开销。
关系型数据库和非关系数据库的区别
- 关系型数据库
表和表之间存在的关系 - 非关系型数据库
不存在表的这种概念,redis是键值对数据库,通过key查找value 所以key是唯一的。
全局key操作
- 对redis五个数据类型都适用的命令
查看所有的key
keys *
keys n*
删除
del key 例: (del name)
查看key是否存在,存在返回1,不存在返回0
exists key
查看key类型
type key
运算
set num 1 # 自动识别,字符串里面的 整数
# +1
incr key 例 (incr num)
# -1
decr key 例 (decr num)
# +整数
incrby key increment 例 (incrby num 50)
# -整数
decrby key increment 例 (decrby num 50)
Redis五种数据类型及操作
- string 字符串
- list 列表
- hash 哈希
- set 集合
- sorted sets 有序集合
key 有5种数据类型:string、list、set、zset(sorted set)、hash。
value :都是字符串类型的(可加引号也可不加)
string
string是redis最基本的类型,一个key对应一个value
设置
set key value 例:(set name 'ppx')
获取
get key 例:(get name)
# key是唯一的,不能用同一个key 不然就会覆盖
查看过期时间
# -1表示永久 -2表示 不存在
ttl key 例: (ttl name)
设置过期时间
# 给已经存在的key ,设置过期时间
expire key seconds 例: (expire name 20)
#设置key的同时,设置过期时间
set key value ex seconds 例: (set age 18 ex 20)
或
setex key seconds value 例:(setex sex 20 '男')
追加
# 给已有的value,再添加新的值
# append key value
例
append name love
#get name
redis里面所有的value,都是字符串类型的
设置/获取 多个
# 设置多个 string
mset key value key value ...
#获取多个
mget key key key ...
例
mget username password name
list
- List类型是一个字符串列表,可以在列头或列尾添加/删除数据,在插入数据时,如果该键不存在,redis将为该键创建一个。
添加
#lpush 左添加 (栈) 先进后出
lpush key value #例: lpush mylist a b c d
#rpush 右添加 (队列)
rpush key value #例: rpush mylist a b c d
查看
# lrange key start stop ,查看索引范围内元素的值
例 查看所有
lrange mylist 0 -1
#查看位与lindex位置上的元素, 返回列表中元素的值。index从0开始,当index超出索引时返回null
lindex key index #例: lindex mylist 3
获得list的元素个数
llen key #例 llen mylist
设置,修改数据
#指定索引号进行修改
lset key index value
删除
- lpop 删除左边第一个
lpop key #例 lpop my_rlist
- rpop 删除右边第一个
rpop key #例 rpop my_list
- lrem 删除指定
rpush test_list a a b b c d e a d f m c
#lrem key count value
#count > 0 从左往右 删除数量为count的value
例 : lrem test_list 2 a
#count = 0 删除所有的 value
例 : lrem test_list 0 a
#count < 0 从右往左 删除数量为count的value
例 : lrem test_list -1 b
hash
- 是一个键值(key=>value)对集合。是string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象, field 域, value 值
设置
# hset key field value
#将field-value设置到hash表中,若key不存在会新建hash表再赋值,已存在则会覆盖;
例 user { name:jianeng}
hset user name jianeng
#设置多个
#hmset key field value [field value]
例 user{name:jianeng , age:18, sex:male }
hmset user name jianeng age 18 sex male
获取
# hget key field
例
hget user name
#获取多个
# hmget key field field
例
hmget user name age
删除
# hdel key field
例
hdel user name
获取全部field value
# hgetall key
例 itmes
hgetall user
获取所有的field
# hkeys key
例 keys
hkeys user
获取所有的value
# hvals key
例 values
hvals user
获取field的个数
# hlen key
例
hlen user
set集合
- 元素为string类型
- 无序集合
- 元素具有唯一性,不重复
设置
# sadd key value [value] (唯一,无序)
#将一个或多个member元素加入到集合key中,若member已存在那么会忽略此元素,
例
sadd my_set m n b v c x z b
获取
# smembers key
例
smembers my_set
删除
- srem指定删除
# srem key member
例
srem my_set c
- spop随机删除
# spop key
例
spop my_set
移动一个集合的值到另一个集合
# smove oldkey newkey member
例
smove my_set my_set2 z
判断集合存在某个值
# sismember key value
例
sismember my_set2 b
交集
# sinter key1 key2 ..
例
sinter my_set my_set2
把 key1 key2的交集合并到newkey
# sinterstore newkey key1 key2
例
sinterstore new_set my_set my_set2
并集
# sunion key1 key2 ...
例
sunion my_set my_set2
把 key1 key2的并集合并到newkey
# sunionstore newkey key1 key2
例
sunionstore new_set2 my_set my_set2
差集
# sdiff key1 key2
sdiff my_set my_set2
把 key1 key2的差集合并到newkey
# sdiffstore newkey key1 key2
例
sdiffstore new_set3 my_set my_set2
- 获取集合个数
# scard key
例
scard my_set
- 随机返回一个
# srandmember key
例
srandmember my_set
zset
类似于Set,不同的是Sorted中的每个成员都分配了一个分数(Score)用于对其中的成员进行排序(升序)。
zset的成员是唯一的,但分数(score)却可以重复。
设置
# zadd key score member
例
zadd my_zset 1 'one'
zadd my_zset 2 'two'
zadd my_zset 3 'three'
zadd my_zset 4 'four'
zadd my_zset 5 'five'
获取
- zrange正序
#zrange key start stop (withscores)
zrange my_zset 0 -1 withscores
- zrevrange倒序
#zrevrange key start stop
zrevrange my_zset 0 -1 withscores
删除
#zrem key member
zrem my_zset two
索引
- zrank正序
# zrank key member
例
zrank my_zset three
- zrevrank反序
# zrevrank key member
例
zrevrank my_zset three
zcard 查看有序集合元素数
# zcard key
例
zcard my_zset
zrangebyscore 返回集合中 score 在给定区间的元素
# zrange my_zset 0 -1 withscores
zrangebyscore my_zset 2 3 withscores
#返回了 score 在 2~3 区间的元素
zcount 返回集合中 score 在给定区间的数量
# zcount key min max
例
zcount my_zset 2 3
zscore : 查看score值
# zscore key member
例
zscore my_zset two
zremrangebyrank : 删除集合中排名在给定区间的元素(正向)
# zrange my_zset 0 -1 withscores
zremrangebyrank my_zset 1 3
zremrangebyscore : 删除集合中 score 在给定区间的元素
# zrange my_zset 0 -1 withscores
zremrangebyscore my_zset 3 5
Redis发布和订阅
#发布
publish 频道 消息
# 订阅
subscribe 频道