Redis笔记(一):基础命令
设置远程redis
demo工具网站:https://app.redislabs.com
远程登录
redis-cli -u redis://<username>:<password>@redis-16985.c14.us-east-1-2.ec2.cloud.redislabs.com:16985
性能测试
在macOs上查看Redis配置文件
cat /usr/local/etc/redis.conf
默认16个数据库,可以使用SELECT <index>
切换数据库
DBSIZE # 查看数据库当前使用的大小
KEYS * # 查看所有的key
FLUSHDB # 清空当前库
FLUSHALL # 清空全部库
MOVE <key> <db> # 移动到指定数据库
EXPIRE <key> <seconds>
TTL <key> # 查看剩余时间 -1表示不会过期 -2表示已过期
TYPE <key> # 查看key类型
Redis 使用单线程的原因主要有以下几点:
- 减少锁竞争:Redis 的核心操作是基于内存的,使用单线程可以避免多线程环境下的锁竞争问题,提高性能。由于单线程模型避免了线程切换和上下文切换的开销,可以更高效地利用 CPU。
- 避免复杂性:多线程编程涉及到线程同步、数据一致性等复杂问题。使用单线程可以避免这些复杂性,使代码更加简单、可靠,减少潜在的错误。
- 避免资源竞争:Redis 的主要瓶颈是 CPU 和内存带宽,而不是计算能力。使用单线程可以充分利用 CPU 的计算能力,避免了多线程之间因为资源竞争而导致的性能下降。
- 高效的网络模型:Redis 使用非阻塞的 I/O 多路复用模型,单线程可以处理大量的并发连接。这种模型在处理高并发读写请求时非常高效,避免了线程间切换的开销。
需要注意的是,尽管 Redis 主线程是单线程的,但它通过使用异步 I/O 和多路复用技术实现了非阻塞的网络通信和高并发处理能力。此外,Redis 也提供了一些并发操作的指令,如使用多个 Redis 实例进行数据分片来提高整体性能。
String
Store plain string or number
- SET
- GET
- APPEND # 如果不存在,相当于
SET <key>
- EXISTS
- INCR
- DECR
- INCRBY
- DECRBY
- GETRANGE
# 包含start和end,end为-1在倒数第1的位置 - SETRANGE
# 从offset开始替换成value,替换的范围为value的长度 - SETEX
# 设置key-value和过期时间,不存在则创建 - SETNX # 成功返回1,否则0(在分布式锁中常常会使用)
- MSET
- MGET
- MSETNX # 有一个存在则全部失败,原子性操作
- GETSET # 先get再set,不存在返回nil,同样会设置新值
List
List of strings,实际上是个链表
- LLEN
- LINSERT
- LPUSH # 不存在则创建
- RPUSH # 在尾部添加值
- LPOP
- RPOP
- LINDEX
# 找到第index个key的位置,从0开始,末尾从-1开始,越界报错 - LRANGE
- LREM
# 最多移除count个数的value,精确匹配 - LTRIM
# 截取list部分元素 - RPOPLPUSH
- LSET
# 没有key或者超出原有key的index范围都报错 - LINSERT
BEFORE|AFTER
Hash
Collection of key-value pairs
- HGET
- HSET
[field value ...] - HMGET
- HGETALL
- HMSET
- HDEL
- HLEN
- HEXISTS
- HKEYS
- HVALS
Set
Set of strings (each string is unique)
- SADD
- SREM
- SCARD # 获取元素总个数 cardinality 基数
- SDIFF [key ...] # 差集
- SINTER [key ...] # 交集
- SUNION [key ...] # 合集
- SISMEMBER
- SMEMBERS # 显示所有元素
- SPOP # 随机移除元素
- SRANDMEMBER
# 随机count个数的获取元素 - SMOVE
Sorted Set
Set of strings in a particular order
- ZADD key [NX | XX] [GT | LT] [CH] [INCR] score member [score member...]
- ZDIFF
- ZCOUNT
- ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] # -inf +inf ZREVRANGEBYSCORE 逆序
Bitmap
Kind of like a collection of booleans
- BITOP
- BITCOUNT
- BITPOS
Hyperloglog
Kind of like a collection of booleans
- PFADD
- PFCOUNT
- PFMERGE
JSON
Nested JSON structure
- JSON.SET
- JSON.GET
- JSON.DEL
Index
Internal data used for searching
- FT.SEARCH
- FT.CREATE
- FT.PROFILE
Documentation for commands: https://redis.io/commands