本文参考【江南一点雨】的Redis教程!~
一、简介
NoSQL数据库 基于C开发的键值对存储数据库,Redis:Remote Dictionary Service字母缩写
缓存、分布式锁、限流
特点:
- 支持数据持久化
- 支持多种不同的数据结构类型之间的映射
- 支持主从模式的数据备份
- 自带了发布订阅系统
- 定时器、计数器
二、安装
编译安装、Docker、直接安装、在线体验
这里使用第一种:
官网下载后进行解压:
tar -zxvf redis-6.2.6.tar.gz
cd redis-6.2.6
make
make install
确认完成后,启动redis:
redis-server redis.conf
redis-cli
修改一下redis.conf使之在后台启动(以守护进程的方式启动redis)
三、通用命令
-
del
-
dump
序列化给定的key,返回序列化后的值 -
exists
测试这个key是否存在 -
TTL
查看一个给定key的有效时间,可以用EXPIRE给key设置有效期,有效期过后,key会被销毁
-1 未设置
-2 不存在或者过期
-
persist 移除一个key的过期时间,这样key永远不会过期
-
pexpire 与expire相同,但单位为毫秒
-
pttl 单位毫秒
-
keys 获取满足给定模式的所有key
四、五种基本数据类型
String
Redis中,所有的key都是字符串,但是,不同的key对应别的value具备不同的数据结构。
Redis中的字符串都是动态字符串,内部是可以修改的,像Java中的StringBuffer,它采用分配冗余空间的方式来减少内存的频繁分配。在Redis内部机构中,一般实际分配的内存会大于需要的内存,当字符串小于1M的时候,扩容都是在现有的空间基础上加倍,扩容每次扩1M空间,最大512MB
先开启redis,然后redis-cli进入
-
append
key已经存在,则直接在对应的value后追加值,否则就创建新的键值对 -
get
获取value
-
set
给key赋值 -
decr
可以实现对value的-1操作,前提是value是一个数字,如果value不是数字,会报错;如果value不存在,会给一个默认值为0,在默认值的基础上-1 -
decrby
可以指定步长
6. GETRANGE
-
getset
获取key对应的value并进行重置 -
incr 对指定的key的value进行+1
-
incrby
-
incrbyfloat 可以增长浮点数
-
mget mset 批量设置值和批量获取值
-
setex psetex 用来给key设置value,同时设置过期时间
-
strlen
-
setnx =set if not exists
set命令在执行时,如果key已经存在,则新值会覆盖掉旧值,而对于setnx命令,如果key已经存在,则不做任何操作,如果key不存在,就等同于set命令 -
msetnx
赋多个值,但如果有一个key存在,所有的都不会执行 -
setrange
用来覆盖一个已经存在的key的value
string中bit相关命令
-
getbit
-
setbit
-
bitcount 统计1的个数
bitcount对于统计数据 节省空间、运算速度快 -
bitop
执行 and or xor not 运算
-
bitpos 获取二进制位串中第一个1或者0的位置
List
简单的字符串列表,按照插入顺序进行排序,可以从list的头部(left)或者尾部(right)插入一个元素,头部或者尾部弹出一个元素
-
lpush
将一个或多个值value插入到列表key的表头 -
lrange
区间以start,stop指定(-1表示最后一个值) -
rpush 从右向左插入
-
rpop lpop 移除并返回
-
LINDEX 返回下标为index的元素
-
LTRIM 让列表值保留指定区间内的元素
7. BLPOP
BLPOP是LPOP的阻塞版本,当给定列表内没有任何元素可供弹出的时候,连接将被BLPOP命令阻塞。 当给定多个key参数时候,按参数key的先后顺序依次检查各个列表,弹出第一个非空列表的头元素。同时,在使用该命令时也需要指定阻塞的时长,单位为秒,在该时长内如果没有元素可供弹出,则阻塞结束。返回的结果是key和value的组合。
SET
不同于list,set中的元素不可以重复。
- SADD 添加元素
- SREM 在key集合中移除指定的元素,元素不存在则忽略(0)
- SISMEMBER 看元素在key中是否存在
- SCARD 返回key集合元素数量
- smembers
返回集合key中的所有元素
- srandmember/spop spop选择一个随机元素后,该元素会出栈
- smove 可以将member从source集合移动到destination集合中
- sdiff 返回一个集合与给定集合的差集的元素
- sdiffstore 与sdiff命令基本一致,不同的是sdiffstore命令会将结果保存在一个集合中
- sinter 计算交集 sinterstore
- sunion 计算并集 sunionstore
HASH
类似Map,键值对集合。散列就像微缩版的redis
- hset
- hget
- hmset 批量设置key指定的哈希集中指定字段的值 hmget
- hdel 从key指定的hash集中移除指定的域
- hsetnx 只有key指定的哈希集中不存在指定的字段时,设置字段的值;如果字段已经存在,操作无效果
- hvals 返回key指定的哈希集中所有字段的值
- hkeys 返回key指定的哈希集中所有字段的名字
- hgetall
返回key指定的hash集中的字段和值 - hexists
10. hincrby
11. hincrbyfloat
12. hlen 返回指定的哈希集包含的字段数量
13. hstrlen 返回hash指定的field的value的字符串长度
zset 有序集合
也是string类型元素的集合,不同的是ZSET中的每个元素都会关联一个double类型的分数,ZSET中的成员都是唯一的,但是所关联的分数可以重复。
类似sets,但是每个字符串元素都关联到一个叫score浮动数值,里面的元素总是通过score进行排序,因此它是可以检索的一系列元素。
成员—>score
- zadd
- zscore 获得成员的score
- zrange 根据index返回member
- zrevrange 逆序
- zcard 返回key的有序集元素个数
- zcount 返回有序集key中,score值在min和max之间的成员个数(闭区间)
- zrangebyscore 按照score范围选取元素
- zrank 返回有序集key中成员member的排名(0开始) zrevrank
9. zincrby
10. zinterstore 计算给定的numkeys个有序集合的交集(score相加),并把结果放到destination中。在给定要计算的key和其他参数之前,必须先给定key个数(numberkeys)。
10. zrem 从集合中弹出一个元素
11. zlexcount 计算有序集合中指定成员之间的成员数量
用成员名则需要加上[
-和+ 代表得分最小值和最大值
- zrangebylex
返回指定成员区间内的成员
补充
- 4种数据类型(list、set、zset、hash),在第一次使用时,如果容器不存在,就自动创建一个
- 4中数据类型,如果里边没有元素了,那么立即删除容器,释放内存