RedisAPI使用

Redis API使用

通用命令

keys

一般不在生产环境中使用, redis是单线程的,keys命令是一个时间复杂度为O(n)的命令,会阻塞其他命令。

keys * ,遍历所有的key

dbsize

计算出key的总数,dbsize 的时间复杂度是O(1),redis中内置了计数器,会实时更新key的总数

exists key

检查key是否存在,如果存在返会 1 ,否则返回 0。exists 的时间复杂度是O(1)

del key [key…]

删除指定的key-value, del 的时间复杂度是O(1)

expire key seconds

设置key在seconds秒后过期, expire 的时间复杂度是O(1)

ttl key

查看key剩余的过期时间, 返回 -2 时表示这个key已经被删除了 , 返回 -1 代表key存在但没设置过期时间

persist key

去掉key的过期时间

type key

返回key的类型 ,string,hash,list,set,zset,none(key不存在)。 type 的时间复杂度是O(1)

数据结构和内部编码
在这里插入图片描述

其他

  • 为什么单线程还这么的快
  1. 纯内存
  2. 非阻塞IO
  3. 避免线程切换和竟态消耗
  • 使用注意
  1. 一次只运行一条命令

    扫描二维码关注公众号,回复: 9139887 查看本文章
  2. 拒绝长(慢)命令

    keys,flushall,flushdb,slow lua script,mutil/exec,operate big value(collection)

字符串string

使用注意:最大512MB,一般建议100K以内

场景:

​ 缓存

​ 计数器

​ 分布式锁

​ 主要是应用了redis的单线程

API 使用

incr key

key自增1,如果key不存在,自增后get(key) = 1

decr key

key自减1,如果key不存在,自减后get(key) = -1

incrby key k

key自增k,如果key不存在,自增后get(key) = k

如果key对应的value不是integer类型,则会报错

(error) ERR value is not an integer or out of range

set key value

不管key是否存在,都设置

setnx key value

key不存在,才设置

set key value xx

key 存在,才设置

mget key1 key2 key3

批量获取key对应的值

mset key1 value1 key2 value2

批量设置key-value

getset key newvalue

set key newvalue并返回旧的value

append key value

将value追加到旧的value

strlen key

返回字符串的长度,注意一个汉字是2个字节。

incrbyfloat key 3.5

增加key对应的值3.5

getrange key start end

获取字符串指定下标所有的值

setrange key index value

设置指定下表所对应的值

哈希hash

redis中的hash是一种 map-map的结构,其field不能相同,value可以相同。

hge,hset,hdel,hexists,hlen,hmget,hmset

hset key field value 给key的field设置value

hgetall key 获取key的所有值
在这里插入图片描述
hvals key

返回hash key对应所有field的value

hkeys key

返回hash key对应所有field

hsetnx key field value

设置hash key 对应field的value,如field已经存在,则失败

hincrby key field intCounter

hash key 对应的field的value自增intCounter

hincrbyfloat key field floatCounter

hincrby的浮点数版

列表list

特点, 有序,可重复,可从左右两边弹出插入

rpush key value1 value2 … valueN

从列表右端插入值(1 - N个)

lpush key value1 value2 … valueN

从列表左端插入值(1 - N个)

linset key before|after value newValue

在指定的值前|后插入newValue

lpop key

从列表的左边弹出一个value

rpop key

从列表的右边弹出一个value

lrem key count value

根据count值,从列表中删除所有value相等的项

count > 0 ,从左到右,删除最多count个value相等的项

count < 0 ,从右到左,删除最多count的绝对值个value相等的项

count > 0 ,删除所有和value相等的项

ltrim key start end

按照索引范围修剪列表,保留start 到 end 的值

lrange key start end

获取列表制定索引范围所有的iterm

lindex key index

获取列表指定索引的item

llen key

获取列表长度

lset key index newValue

设置列表指定索引为newValue

blpop key timeout

lpop的阻塞版本,timeout是阻塞超时时间,timeout = 0 表示永远不阻塞

brpop key timeout

rpop的阻塞版本,timeout是阻塞超时时间,timeout = 0 表示永远不阻塞

提示:

可以用list的性质,实现一些特殊的数据结构

LPUSH + LPOP = Stack

LPUSH + RPOP = Queue

LPUSH + LTRIM = Capped Collection

LPUSH + BRPOP = Message Queue

集合set

sadd key element

向集合key中田间element,如果element已经存在,则添加失败

srem key element

将集合中的element删除

smembers key

查看集合中的所有元素

scard key

计算集合的大小

spop key

从集合中弹出一个元素, 此时集合大小为 size - 1

sdiff key1 key2

获取key1和key2的差集

sinter key1 key2

获取key1 和 key2 的交集

sunion key1 key2

获取key1 和 key2 的并集

有序集合zset

zadd key score element

添加元素,score 和 element 是可以重复的。时间复杂度为O(logN)

zrem key element

删除元素

zscore key element

返回元素的分数

zincrby key increScore element

增加或减少元素的分数

zcard key

返回元素的总个数

zrange

zrangebyscore

zcount

的交集

sunion key1 key2

获取key1 和 key2 的并集

有序集合zset

zadd key score element

添加元素,score 和 element 是可以重复的。时间复杂度为O(logN)

zrem key element

删除元素

zscore key element

返回元素的分数

zincrby key increScore element

增加或减少元素的分数

zcard key

返回元素的总个数

zrange

zrangebyscore

zcount

发布了19 篇原创文章 · 获赞 1 · 访问量 279

猜你喜欢

转载自blog.csdn.net/XSemperFI/article/details/103444460