key操作命令
keys *
exists key
type key
del key
unlink key
ttl key
expire key seconds
move key dbindex[ 0 - 15 ]
select dbindex
dbsize
flushdb
flushall
官网命令大全网址:
https://redis .io/commands/ http://www.redis .cn/commands.html 命令不区分大小写,而 key
是区分大小写的。 永远的帮助命令:help @类型
redis String_48">redis 字符串(String)
官网地址:https://redis .io/docs/data-types/strings/ 单 key
单 value
string
是 redis
最基本的类型,一个 key
对应一个 value
。string
类型是二进制安全 的,意思是 redis
的 string
可以包含任何数据,比如 jpg
图片或者序列化的对象。【如何理解二进制安全?二进制安全表示数据在存储和传输时不会被修改或解释,redis
将 string
类型的数据视为字节序列,不关心其内容。因此,string
类型可以存储任何数据,包括文本、图片、序列化对象等。】string
类型是 redis
最基本的数据类型 ,一个 redis
中字符串 value
最多可以是 512M
。
set key value [ NX| XX [ GET] [ EX seconds| PX milliseconds| EXAT unix- time- seconds| PXAT unix- time- milisecondS| KEEPTTL]
SET
命令有 EX
、PX
、NX
、XX
以及 KEEPTTL
五个可选参数,其中 KEEPTTL
为 6.0
版本添加的可选参数EX seconds
:以秒为单位设置过期时间。PX milliseconds
:以毫秒为单位设置过期时间。EXAT timestamp
:设置以秒为单位的 UNIX
时间戳所对应的时间为过期时间。PXAT milliseconds-timestamp
:设置以毫秒为单位的UNIX时间戳所对应的时间为过期时间。NX
:键不存在的时候设置键值。EX
:键存在的时候设置键值。KEEPTTL
:保留设置前指定键的生存时间。GET
:返回指定键原本的值,若键不存在时返回 nil
。SET
命令使用 EX
、PX
、NX
参数,其效果等同于 SETEX
、PSETEX
、SETNX
命令。根据官方文档的描述,未来版本中 SETEX
、PSETEX
、SETNX
命令可能会被淘汰。EXAT
、PXAT
以及 GET
为 Redis 6.2
新增的可选参数。
set k1 v1xx
get k1
set k1 v2 nx
set k1 v1x xx
set k1 v1 get
set k1 v1 ex 10
ttl k1
set k1 v1 px 8000
set k1 v1 exat 1697049600
Unix
时间戳是从 1970 年 1 月 1 日 00:00:00 UTC
(称为 Unix
纪元)开始计算的秒数或毫秒数,秒级时间戳是毫秒级时间戳除以 1000
的结果。Golang
如何获得设置指定的 key
过期的 unix
时间戳,单位为秒:
package main
import (
"fmt"
"time"
)
func main ( ) {
timestamp := time. Now ( ) . Unix ( )
fmt. Println ( fmt. Sprintf ( "%d" , timestamp) )
}
set k1 v1 ex 30
ttl k1
set k1 v11
ttl k1
这里的问题是,同一个 key
,之前设置了过期时间,但是做了修改,如果没有继续追加时间,它就会默认为永不超时,把以前的过期时间给覆盖了。
set k1 v1 ex 30
ttl k1
set k1 v11 keepttl
ttl k1
如果要同时设置 / 获取多个键值呢?MSET key value [key value ....]
、MGET key [key ....]
、mset/mget/msetnx
mset k1 v1 k2 v2 k3 v3
mget k1 k2 k3
msetnx k1 v1 k4 v4
get k4
mset k5 v5 k6 v6
mget k1 k2 k3 k5 k6
获取指定区间范围内的值:getrange/setrange
set k1 abcd1234
getrange k1 0 - 1
getrange k1 0 3
getrange k1 0 4
setrange k1 1 xxyy
get k1
set k1 100
get k1
incr k1
incr k1
incr k1
incr k1
incrby k1 3
incrby k1 3
incrby k1 3
incrby k1 3
incrby k1 3
decr k1
decr k1
decr k1
decr k1
decrby k1 5
decrby k1 5
decrby k1 5
decrby k1 5
set k1 abcd
strlen k1
append k1 xxxx
get k1
分布式锁:setnx key value
、setex(set with expire)键秒值/setnx(set if not exist)
getset
(先 get
再 set
):将给定 key
的值设为 value
,并返回 key
的旧值( old value
)
set k1 v11
getset k1 haha
get k1
set k1 v1 get
get k1
单 key
多 value
redis
中 list
是简单的字符串列表,按照插入顺序排序,可以添加一个元素到列表的头部(左边)或者尾部(右边)它的底层实际是个双端链表,最多可以包含
2
32
−
1
2^{32}-1
2 32 − 1 个元素(4294967295
,每个列表超过 40亿
个元素)
lpush list1 1 2 3 4 5
rpush list2 11 22 33 44 55
type list1
lrange list1 0 - 1
lrange list1 0 - 1
lpush list1 1 2 3 4 5
lpop list1
lrange list1 0 - 1
rpop list1
lrange list1 0 - 1
lpush list1 1 2 3 4 5
lindex list1 0
lindex list1 2
lpush list1 1 2 3 4 5
llen list1
lpush list3 v1 v1 v1 v2 v3 v3 v4 v5
lrange list3 0 - 1
lrem list3 2 v1
lrange list3 0 - 1
lpush list1 0 1 2 3 4 5 6 7 8 9
lrange list1 0 - 1
ltrim list1 3 5
lrange list1 0 - 1
lpush list1 1 2 2 2
lpush list2 11 22 33 44 55
rpoplpush list1 list2
lrange list1 0 - 1
lrange list2 0 - 1
lpush list1 1 2 2 2
lrange list1 0 - 1
lset list1 1 redis
lrange list1 0 - 1
lpush list1 1 2 2 2
lrange list1 0 - 1
lset list1 1 redis
lrange list1 0 - 1
linsert list1 before redis golang
lrange list1 0 - 1
KV
模式不变,但 V
是一个键值对 map[string]map[interface{}]interface{}
redis hash
是一个 string
类型的 field
(字段)和 value
(值)的映射表,hash
特别适合用于存储对象redis
中每个 hash
可以存储
2
32
−
1
2^{32}-1
2 32 − 1 键值对(40
多亿)
hset user: 001 id 11 name z3 age 21
hget user: 001 id
hget user: 001 name
hmset user: 001 id 12 name li4 age 26
hmget user: 001 id name age
hgetall user: 001
hdel user: 001 age
hgetall user: 001
hgetall user: 001
hlen user: 001
hgetall user: 001
hexists user: 001 name
hexists user: 001 score
hgetall user: 001
hkeys user: 001
hvals user: 001
hgetall user: 001
hset user: 001 age 26 score 99.5
hgetall user: 001
hincrby user: 001 age 1
hincrby user: 001 age 1
hincrby user: 001 age 2
hgetall user: 001
hincrbyfloat user: 001 score 0.5
hincrbyfloat user: 001 score 0.5
hincrbyfloat user: 001 score 0.5
hsetnx user: 001 email redis @163 . com
hsetnx user: 001 email redis @163 . com
单值多 value
,且 无重复 【和 list
的区别】 redis
的 set
是 string
类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据,集合对象的编码可以是 intset
或者 hashtable
redis
中 set
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)
。集合中最大的成员数为
2
32
−
1
2^{32}-1
2 32 − 1 (4294967295
,每个集合可存储 40多亿
个成员)
sadd set1 1 1 1 2 2 2 2 3 3 4 4 4 4 4 4 4 4 5
smembers set1
sismember set1 6
sismember set1 1
sismember set1 5
srem set1 7
srem set1 1
smembers set1
scard set1
sadd set1 1 1 1 2 2 2 2 3 3 4 4 4 4 4 4 4 4 5 6 6 7 8 8 8
smembers set1
srandmember set1 1
srandmember set1 3
smembers set1
spop set1 1
spop set1 1
spop set1 2
smembers set1
smembers set1
sadd set2 a b c
smove set1 set2 7
smembers set1
smembers set2
sadd set1 a b c 1 2
sadd set2 1 2 3 a x
sdiff set1 set2
sdiff set2 set1
sunion set1 set2
sinter set1 set2
redis ZSet__SortedSet_389">redis 有序集合(ZSet / SortedSet)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数,redis 正是通过分数来为集合中的成员进行从小到大的排序, zset的成员是唯一的,但分数(score)却可以重复。 zset集合是通过哈希表实现的,所以添加,删除,査找的复杂度都是 O(1)。 集合中最大的成员数为 2^32-1
Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作,包括:
添加地理位置的坐标。 获取地理位置的坐标 计算两个位置之间的距离。 根据用户给定的经纬度坐标来获取指定范围内的地理位置集合
redis HyperLogLog_399">redis 基数统计(HyperLogLog)
HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定且是很小的。 可以类比电商网站首页,每天访问量是很大的,统计基数(不重复ip对首页的访问数量) 在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。 但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。
redis bitmap_404">redis 位图(bitmap)
由0和1状态表现的二进制位的bit数组 每日签到 / 打卡
redis bitfield_408">redis 位域(bitfield)
通过bitfield命令可以一次性操作多个比特位域(指的是连续的多个比特位),它会执行一系列操作并返回一个响应数组,这个数组中的元素对应参数列表中的相应操作的执行结果。 说白了就是通过bitfield命令我们可以一次性对多个比特位域进行操作。
redis Stream_411">redis 流(Stream)
Redis Stream 是 Redis 5.0 版本新增加的数据结构。 Redis Stream 主要用于消息队列(MQ, Message Queue. Redis 本身是有一个 Redis 发布订阅(pub/sub)来实现消息队列的功能,但它有个缺点就是消息无法持久化,如果出现网络断开、Redis宕机等消息就会被丢弃 简单来说发布订阅(pub/sub)可以分发消息,但无法记录历 而 Redis Stream 提供了消息的持久化和主备复制功能,可!让任何客户端访问任何时刻的数据,并且能记住每一个客户端的访问位置,还能保证消息不丢失