Redis基本使用总结
目录
简介
Redis是一个用C语言编写的基于内存的以键值对存储数据的NoSql数据库,可基于内存这一点就决定了这个数据库的读写效率非常高,因此Redis也被广泛运用在缓存、分布式锁等场景。
Redis安装
如果你是Arch系统的话,可以直接通过以下的命令安装还启动Redis
sudo pacman -S redis
sudo systemctl start redis.service
redis-cli
当然你也可以通过Docker来进行安装
sudo docker pull redis
sudo docker run --name test-redis -p 6379:6379 -d redis
sudo docker exec -it test-redis redis-cli
Redis默认的端口是6379
redis-cli是Redis的控制台
连接Redis
连接本地Redis
安装好Redis之后,使用以下命令链接Redis
redis-cli #Arch
sudo docker exec -it test-redis redis-cli #Docker
连接远程Redis
redis-cli -h host -p port -a password
其中host指对应的IP,Port指对应的端口号,如果有设置密码还需提供相应的password
Redis的五种基本数据类型
Redis的五种基本类型分别是:
- String:字符串,即最简单的键值对
- Hash:哈希,和Java中HashMap的数据类型类似
- List:列表
- Set:集合
- ZSet:有序集合
五种类型的基本操作
String
插入、获取、删除一个简单的键值对
redis-cli #打开控制带
set msg hello_world #插入一个键为msg,值为hello_world的记录
get msg #获取键为msg的值
del msg #删除键为msg的值
get msg #删除后则获取到空值
获取多个值
mget key1 key2 key3
设置多个值
mset key1 value1 key2 value2
其他常用命令
获取对应值的长度
strlen key
将数字类型的值加上或者减去给出的值
incrby key num# 如果key对应的值为数字,加上num
decrby key num# 如果key对应的值为数字,减去
追加字符
append key string # 在对应key的值的末尾追加一个String
Hash
插入、删除、获取一个Hash及其字段
hset user name admin age 24 email email 123@foxmail.com
# 可以这么理解:设置了一个名为user的HashMap,插入了name age email 三个键值对
# 即 hset key field1 value1 field value2
hget user name # 根据Hash的名称和字段获取value
hget user age # 同上
hdel user name # 根据Hash的名称和字段删除value
hgetall user # 获取user的所有键值对
del user # 删除user
获取Hash所有字段的键/值
hkeys user # 获取所有键
hvals user # 获取所有值
获取、设置多个字段
hmget user name age # 获取user中的name age字段
hmset user name Normal # 将user中name字段的值改为Normal
List
新建一个列表并添加、删除
lpush list name age email # 新建一个名为list的列表并且在头部依次添加name age email
lrange list 0 2 #遍历list从[0,2]的值
lpop list # 删除list头部的值
rpush list gender# 在list的尾部添加一个值gender
rpop # 删除list尾部的值
根据下标获取、设置列表的值
lindex list 1 # 获取下标1的值
lset list 1 address # 设置下标1的值为address
截取列表
ltrim list 1 3 # 截取[1,3]范围内的列表
Set
新建集合,添加元素(集合中的元素唯一且获取随机)
sadd set p1 # 新建集合set添加p1
sadd set p2 # 添加p2
sadd set p3 # 添加p3
smembers set # 查看所有元素
删除制定元素
srem set p1 p2 # 删除一个或者多个指定的元素
求不同集合的交并差
sinter set1 set2 # 交集
sunion set1 set2 # 并集
sdiff set1 set2 # set1 与 set2 之间的差异
ZSet
新建有序集合并添加元素
zadd zset 1 p1 2 p2 3 p3 , 4 p4 5 p4 6 p4
# 可见和Set相比,每一个值多了一个数字Score,这个Score就是ZSet排序的依据
zrange zset 0 3 # 遍历
删除元素
zrem zset p1 p2
返回指定Score区间的值
zrangebyscore zset 0 3
Redis事务
Redis也是支持事务的,可以一次执行多个命令
Redis事务主要依靠一下几个命令:
- multi : 开启事务
- discard :取消事务
- exec :执行事务
- watch:监视一个key,如果执行过程中key发生改动则事务被打断
- unwatch :取消watch
注意:Redis的事务是不支持回滚的,当发生错误时执行过的指令不会撤销
事务实例:
实例1:
mutlt
set name panrh.com
set email 123@qq.com
exec
get name
get email
实例2:
终端1:
终端2:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3OGWpHZp-1612174488695)(https://panrh.com/upload/2021/02/redis_guide_19-10960d9607114eec9ab5d9837413b7d0.png)]
终端1:
因为在执行事务的过程前对name进行了watch,而执行事务的过程中,通过终端2修改了name,此时返回终端1中进行事务的执行,发现无法获取name
其他
Redis更详细的使用建议去参考Redis的官方文档