redis基本应用

100 阅读12分钟

「这是我参与11月更文挑战的第N天,活动详情查看:2021最后一次更文挑战

Redis 官网:redis.io/

源码地址:github.com/redis/redis

Redis 在线测试:try.redis.io/

Redis 命令参考:doc.redisfans.com/

下载安装:github.com/tporadowski…

Redis命令

下载后解压到本地磁盘中,使用cmd命令进入文件夹中运行

redis-server.exe redis.windows.conf

另开一个窗口运行(上面窗口不要关闭)

redis-cli.exe -h 127.0.0.1 -p 6379

全局命令

info //查看redis服务基本信息
 
select 1(db) //切换存储库

del key/name //删除key

flushall //删除所有数据库的所有key

flushdb //删除当前数据库的所有key

bgrewriteaof //异步执行一个 AOF(AppendOnly File) 文件重写操作

save //同步保存数据到硬盘

bgsave //在后台异步保存当前数据库的数据到磁盘

lastsave //最近一次 Redis 成功将数据保存到磁盘上的时间

shutdown //安全退出,如果持久化被打开,先保存数据在退出。还可以加save/nosave修饰符,save强制保存,即使没有设置,nosave强制不保存,即使有设置

client kill ip:port

client list //获取连接到服务器的客户端连接列表

client getname //获取连接的名称

client setname //设置当前连接的名称

client pause timeout(以毫秒计) //在指定时间内终止运行来自客户端的命令

cluter slots //获取集群节点的映射数组

command //获取 Redis 命令详情数组

command info lpush //获取给定命令的描述

time //返回当前服务器时间

config get parameter //获取 redis 服务的配置参数

config set parameter newConf //修改 redis 配置参数

config revrite //对启动Redis服务器时所指定的 redis.conf 配置文件进行改写(刷新上面修改的配置)

config get requirepass //获取redis登录密码

config set requirepass ‘XX //设置redis登录密码

obsize //返回当前数据库的 key 的数量

debug object key //获取 key 的调试信息

debug segfault //让 Redis 服务崩溃

monitor //实时打印出 Redis 服务器接收到的命令,调试用

role //返回主从实例所属的角色

slowlog get/len/reset //管理 redis 的慢日志。ge查看慢日志,可以指定看多少条,len有多少条慢日志,reset清空慢日志

slaveof host port //将当前服务器转变为指定服务器的从属服务器(slave server)

sync //同步主从服务器

键(key)操作:

del key/name //删除key

dump key //输出序列化给定key的值

restore key 0(到期时间) ‘\x00\x15value\x06\x00E\xa0Z\x82\xd8r\xc1\xde’ //将反序列化之后的值存入key中

exists key  //检查给定key值是否存在,存在返回1,不存在返回0

expire key 10(seconds) //设置key的过期时间,以秒计

expireat key 1636424400(timestamp) //设置key的过期时间的时间戳

pexpire key 10000(milliseconds) //设置key的过期时间,以毫秒计

pexpireat key 1636424400000(milliseconds-timestamp) //设置key的过期时间的时间戳,以毫秒计

ttl key //以秒为单位返回 key 的剩余的过期时间

pttl key //以毫秒为单位返回 key 的剩余的过期时间

presist key //取消key到期时间,让key永久有效

keys *(pattern) //可以通过正则的方式匹配key

move key 2(db) //将key移动到指定db

randomkey //从当前数据库随机返回一个key

rename key newKey //修改key名称

renamenx key newKey //仅当 newkey 不存在时,将 key 改名为 newkey

scan 0(游标开始位置) match *(匹配的key) count 10(迭代数量,非符合条件的key值数量) //迭代数据库中的键

type key //返回key值的类型

sort key //返回或保存给定列表、集合、有序集合 key 中经过排序的元素

migrate 127.0.0.1(目标主机) 1234(目标主机的端口) key(要发送的key) 0(目标数据库) 10(超时时间)  //将key原子性地从当前实例传送到目标实例的指定数据库上,成功后当前数据库中key会被删除

object refcount key //返回给定 key 引用所储存的值的次数
object encoding key //返回给定 key 所储存的值所使用的内部表示
object refcount key //返回给定 key 自储存以来的空转时间,单位秒

字符串(string)操作:

//一个key对应一个value。最大能存储 512MB

set key value //设置key对应value

setnx key value //只有在key不存在时设置key的值为value

mset key1 value1 key2 value2 //同时设置一个或多个key-value,key如已存在则覆盖值

msetnx key1 value1 key2 value2 //同时设置一个或多个key-value,key不可以已存在

get key //根据key获取value

mget key1 key2 //获取一个或者多个key的值

getset key newValue //将给定 key 的值设为newValue,并返回旧值

getrange key 0(start) 10(end) //截取字符串

setex key 2(seconds) value //将值value关联到key,并将key的过期时间设为2s

psetex key 2000(milliseconds) value //将值value关联到key,并将key的过期时间设为2000ms

setrang key 2 replaceValue //在给定key的值偏移量为2处替换值为replaceValue,replaceValue有几位就替换几位

append key value //将value值追加到key值末尾

strlen key //返回给定key的值的长度

bitcount key //获取给定key的bit位

getbit key 0 //获取给定key的值,对偏移量上的bit位

incr key //将key值中数字加1

incrby key 10 //将key值中数字加10

incrbyfloat key 1.5 //将key值中数字加1.5(浮点数)

decr key //将key值中数字减1

decrby key 10 //将key值中数字减10

哈希(hash)操作:

//键值(key=>value)对集合。hash 可以存储 232 -1 键值对(40多亿)

hset name key1 value1 //设置hash表name的key-value

hmset name key1 value1 key2 value2 //批量设置hash表name的key-value

hsetnx name key value //只有在字段key不存在时,设置哈希表字段的值

hget name key1 //获取hash表name给定key的值
hget name key2 //获取hash表name给定key的值

hmget name key1 key2 //获取一个或多个给定key的值

hgetall name //获取在哈希表中指定name的所有字段和值

hkeys name //获取哈希表name中所有的字段

hvals name //获取哈希表中name的所有值

hlen name //获取哈希表name中字段的数量

hdel name key1 key2 //删除一个或多个哈希表字段

hexists name key //检查name中的key是否存在

hincrby name key 1 //为哈希表name中的指定字段的整数值加1

hincrbyfloat name key 1.5 //为哈希表key中的指定字段的浮点数值加1.5

hscan name 0 match * count 10 //迭代哈希表中的键值对

列表(list)操作:

//简单的字符串列表,按照插入顺序排序,可以添加一个元素到列表的头部(左边)或者尾部(右边)。最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)

lpush name value1 //在列表左边添加元素(可添加多个)

rpush name value2 //在列表右边添加元素(可添加多个)

lpushx name value //将一个值插入到已存在的列表头部

rpushx name value //将一个值插入到已存在的列表尾部

linsert name before/after value2 value1 //before在value2前面插入value1,after在value2后面插入value1

lset name 0 value //通过索引覆盖列表元素的值

lpop name //移除并获取列表的第一个元素

rpop name //移除并获取列表最后一个元素

rpoplpush name1(源列表) name2(目标列表) //移除列表的最后一个元素,并将该元素添加到另一个列表并返回

blpop name //弹出列表的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止

brpop name //弹出列表最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止

brpoplpush name1(源列表) name2(目标列表) 10(超时时间) //移除列表的最后一个元素,并将该元素添加到另一个列表并返回, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

ltrim name 1 2 //删除下表为1-2之外的多有元素

lindex name 1 //通过索引获取列表中的元素

lrange name 0 2 //获取列表指定范围内的元素

llen name //获取列表长度

lrem name 0(count) value //移除name中与value相等的值,count=0移除所有与value相等的值,!=0 移除绝对值count个与value相等得值

集合(set)操作:

//是string 类型的无序集合,是通过哈希表实现的。集合成员是唯一的,集合对象的编码可以是 intset 或者 hashtable。最大的成员数为 232 - 1(4294967295, 每个集合可存储40多亿个成员)

sadd name value1 value2 //添加有个或者多个value到集合中

smembers name //返回集合的所有成员

srandmember name 2(默认为1) //返回集合中一个或多个随机数

spop nmae //移除并返回集合中的一个随机元素

srem name value1 value2 //移除集合中一个或多个成员

scard name //获取集合的成员数

sismember name searchValue //判断searchValue元素是否存在集合中

smove name1 name2 value //将name1集合内成员value移动到name2集合中

sdiff name1 name2 //返回给定所有集合的差集

sdiffstore new name1 name2 //返回给定所有集合的差集并存储在new中

sinter name1 name2 //返回给定所有集合的交集

sinterstore new name1 name2 //返回给定所有集合的交集并存储在new中

sunion name1 name2 //返回所有给定集合的并集

sunionstore new name1 name2 //返回给定所有集合的并集并存储在new中

sscan name 0 match * count 10 //迭代集合中的元素

有序集合(zset)操作:

// zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。

zadd name 0(score) 2(value) 0(score) 5(value) ... //向有序集合添加一个或多个成员

zscore name value //返回指定成员的分数

zcard name //获取有序集合的成员数

zcount name 0(min) 10(max) //获取有序集合指定分数区间的成员数

zlexcount name -(减号表示最小) +(加号表示最大) //计算指定字典区间内成员数量,范围可以用- + [ ( 表示
zlexcount name [a [b //开头字字母在a和b之间
zlexcount name (a (b //开头字字母不在a和b之间

zrange name 0 10 //获取有序集合指定索引区间内的成员

zrangebyscore name 0 10 //获取有序集合指定分数区间内的成员

zrangebylex name -/[a/(a +[b(b //获取有序集合指定字典区间内的成员

zrank name value //返回有序集合中指定成员的索引

zrevrange name 0 10 //返回指定索引区间内数据,按分数递减排序

zrevranggebyscore name 0 100 //返回指定分数区间内数据,按分数递减排序

zrevrank name value //返回指定成员的排名,按分数值递减排序计算

zincrby name 1/+5/-7 value //有序集合中指定成员(value)的分数加上/减去指定数字
    
zinterstore newName 3(num) name1 name2 name3 //计算一个或多个有序集合的交集,并将结果存储在newName中,num是计算key的数量

zunionstore newName 3(num) name1 name2 name3 //计算一个或多个有序集合的并集,并将结果存储在newName中,num是计算key的数量

zrem name value1 value2 //移除有序集合中一个或多个成员

zremrangebyrank name 1 10 //移除有序集合中给定的索引区间的所有成员

zremrangebyscore name 1 10 //移除有序集合中给定的分数区间的所有成员

zremrangebylex name -/[a/(a +[b(b //移除有序集合中给定的字典区间的所有成员

zscan name 0 match * count 10 //迭代有序集合中的元素(包

基数统计(HyperLogLog) 计算一个数据集({1,2,2,3})中的基数集(基数集为{1,2,3}的个数3)

pfadd name 1 2 3 //添加一个或多个元素到HyperLogLog中

pfcount name //返回给定HyperLogLog的基数估算值

pfmerge new name1 name2 //将多个HyperLogLog合并为一个HyperLogLog 

发布订阅系统

psubscribe channel/channel* //订阅一个频道

pubsub channels //查看订阅与发布系统状态

publish channel message //发布信息到指定频道

punsubscribe channel/channel* //退订指定频道

stream

xadd name * key1 value1 key2 value2 ... //新建一个stream,*是消息id,代表redis生成,也可以自己指定,需要确保自增,格式为:整数-整数

xlen name //消息队列长度

xrange name - + //获取消息队列数据,后面加上count XX 表示看指定条数的数据

xrevrange name + - //反向获取消息列表,后面加上count XX 表示看指定条数的数据

xread block 0 count 10 streams name 0-0 //消费一条数据,'block 0' 可选,加上是代表阻塞获取数据。'count 10' 代表获取条数,'0-0'消费id,0-0代表从头部第一个读取,换成'$'代表从尾读读取

xgroup create name(stream的名称) consumer-group-name(消费组的名称) 0-0(id) //创建一个消费组,并从头消费一条信息,0-0换成$就是从尾部消费一条信息

xreadgroup group consumer-group-name(消费组名称) consumer-name(组内消费者名称) block 0 count 10(消费条数) streams name(stream的名称) > //组内消费,>表示从房前消费组的last_delivered_id往后读,'block 0'可选,表示阻塞读取消息

xinfo stream name(stream的名称) //查看流和消费者组的相关信息

xinfo groups name(stream的名称) //查看消费者组的信息

xinfo consumers name(stream的名称) consumer-group-name(消费组名称) //查看消费组内消费者的信息

xtrim name maxlen 3 //修剪消息,maxlen是修剪策略,目前只实现了这一种,3表示修剪后的数量,会从id最小的开始修剪

xdel name "1636597365910-0"(id) //删除指定id的消息