redis入门篇

[TOC]

基本操作

  • redis 命令不缺分大小写,但是 key名称区分大小写。比如 del mykey 等同于 DEL mykey,但是 del mykey 不等于 del MYKEY

登入与登出

#.登陆测试-直接使用密码
/usr/local/bin/redis-cli -a RbY9k2_NBf1QWy8I -c -h 127.0.0.1 -p 6379

#.查看版本
/usr/local/bin/redis-server -v

#.登陆测试-先登录,再输入密码
/usr/local/bin/redis-cli -h 127.0.0.1 -p 6379
> auth "RbY9k2_NBf1QWy8I"

#.查看版本
> info Server

#.退出交互式界面
> exit

数据库的管理

#.redis默认存在16个库,分别按照0-15来排列,默认操作在0号库,示例 选择1号库
select 1

#.dbsize用于查看当前库有多少个key,示例 返回 (integer) 3 则代表 db1有3个key
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> dbsize
(integer) 3

#.通过info keyspace可以查看每个库有多少个key,示例 db0有2个key,db1有3个key
127.0.0.1:6379> info keyspace
# Keyspace
db0:keys=2,expires=0,avg_ttl=0
db1:keys=3,expires=0,avg_ttl=0

#.flushdb只会清除当前数据库中的key,清理之前建议先select切换上下文
select 1
flushdb

#.flushall会清除redis实例所有数据库(0-15)中的key
flushall

账号的管理

#.查看acl所有命令/集合指令
acl cat
acl cat string

#.创建用户-先创建再设置密码再启用
acl setuser tuser
acl setuser tuser >Admin_147
acl setuser tuser on

#.创建用户-一步到位
acl setuser tuser on >Admin_147

#.查看用户清单
acl list
acl users

#.查看当前登录的用户
acl whoami

#.限制tuser用户对所有key仅有读写权限
acl setuser tuser on >Admin_147 ~* -@all +@read +@write

#.限制tbusr用户只对tb:开头的key有权限
acl setuser tbusr on >Admin_147 ~tb:*

#.取消权限
acl setuser tuser on allkeys -set

#.获取指定用户的详细权限信息
acl getuser tuser

#.启用/禁用/删除用户
acl setuser tuser on
acl setuser tuser off
acl deluser tuser

实例的管理

#.info用于查看实例信息
info
info server
info keyspace

#.config get用于查看实例配置项
config get *
config get dir
config get maxmemory maxclients

#.config set用于设置实例配置项
config set maxclients 3000
config get maxclients

#.save用于将所有数据同步保存到磁盘上的持久化文件中(即dump.rdb),在执行SAVE命令期间,将暂停处理客户端的其他请求,直到持久化完成
save

#.bgsave与save类似,但它是异步执行的,不会阻塞Redis服务器处理其他请求。因此,在生产环境中更推荐使用 BGSAVE
bgsave

#.关闭redis服务
shutdown

对不同数据类型的操作

key 键值

命令 描述 示例
DEL 删除指定的 key del mykey
DUMP 序列化给定 key,并返回被序列化的值 dump mykey
EXISTS 检查给定 key 是否存在 exists mykey
EXPIRE 为 key 设置过期时间(秒) expire mykey 60
EXPIREAT 以 UNIX 时间戳为单位设置 key 的过期时间 expireat mykey 1672531199
KEYS 查找匹配给定模式的所有 key keys user*
MOVE 将 key 移动到另一个数据库 move mykey 1
PERSIST 移除 key 的过期时间,令其持久存在 persist mykey
PEXPIRE 设置 key 的过期时间(毫秒) pexpire mykey 60000
PEXPIREAT 设置毫秒级的 UNIX 时间戳作为 key 的过期时间 pexpireat mykey 1672531199123
PTTL 以毫秒为单位返回 key 的剩余存活时间 pttl mykey
RENAME 将 key 重命名为 newkey rename mykey newkey
RENAMENX 当且仅当 newkey 不存在时,将 key 重命名为 newkey renamenx mykey newkey
SORT 对 key 进行排序,返回或存储排序后的结果 sort mylist
TTL 以秒为单位返回 key 的剩余存活时间 ttl mykey
TYPE 返回 key 所存储的值的类型 type mykey
UNLINK 异步删除 key,避免阻塞 Redis unlink mykey
SCAN 增量迭代数据库中的 key scan 0 MATCH user* COUNT 100
#.del用于删除指定的key,示例 成功删除2个已存在的key则返回 (integer) 2,若删除不存在的key则返回 (integer) 0
set key1 "hello"
set key2 "world"
del key1 key2
del key3

#.keys用于返回符合条件的所有key,示例 依次返回以pay开头的key、以pay开头且后面只有2个字符的key、所有包含pay的key、所有key
keys pay*
keys pay??
keys *pay*
keys *

#.exists用于判断keys是否存在,示例 存在2个key则返回 (integer) 2,若key不存在则返回 (integer) 0
set key1 "hello"
set key2 "world"
exists key1 key2
exists key3

#.expire用于设置有效期(若不设置则永不过期),到期后该key会被自动删除,单位为秒
set key1 "hello"
expire key1 60

#.ttl用于返回剩余的有效期
set key1 "hello"
expire key1 60
ttl key1

#.persist用于移除有效期,若设置为永不过期(即没有设置过期时间)则返回0
set key1 "hello"
expire key1 60
persist key1
ttl key1

#.touch用于更新指定key的最后访问时间,如果指定的key不存在则会忽略并不报错
set key1 "hello"
touch key1 key2

#.move用于将某个key移动到另外一个数据库中
set key1 "hello"
move key1 1

#.rename用于修改一个key的名称,如果源key不存在则会返回错误,若目标key已存在则被覆盖
del key1 key2 key3 key4
set key1 "hello"
rename key3 key4
rename key1 key2
get key2

#.renamenx用于修改一个key的名称,若源key不存在则会返回错误,若目标key已存在则不执行任何操作并返回0
#.与rename的区别:若目标key已存在,则rename会覆盖,而renamenx不会覆盖;若目标key不存在,那两者的效果则一样
del key1 key2 key3 key4
set key1 "hello"
set key2 "world"
renamenx key3 key4
renamenx key1 key2
get key2

#.copy用于复制数据到新的key中,使用replace会强制覆盖,也可以指定目标数据库索引号为1
set key1 "hello"
copy key1 key2
copy key1 key2 replace
copy key1 key2 DB 2

#.type用于返回键所存储的值的类型
set key1 "value"
lpush key2 "value"
sadd key3 "value"
type key1
type key2
type key3

list 列表

命令 描述 示例
LPUSH 将一个或多个值插入到列表头部 lpush mylist "a" "b"
RPUSH 将一个或多个值插入到列表尾部 rpush mylist "a" "b"
LPOP 移除并返回列表的第一个元素 lpop mylist
RPOP 移除并返回列表的最后一个元素 rpop mylist
LLEN 获取列表的长度 llen mylist
LRANGE 获取列表中指定范围的元素 lrange mylist 0 -1
LINDEX 获取列表中指定索引的元素 lindex mylist 0
LSET 将列表中指定索引的元素设置为新的值 lset mylist 0 "newvalue"
LREM 从列表中移除指定的元素,count 表示移除的数量 lrem mylist 2 "a"
LTRIM 修剪列表,只保留指定范围内的元素 ltrim mylist 1 3
RPOPLPUSH 移除列表的最后一个元素并将其插入到另一个列表的头部 rpoplpush mylist myotherlist
BLPOP 阻塞弹出列表的第一个元素,若列表为空则等待直到超时或有新元素 blpop mylist 0
BRPOP 阻塞弹出列表的最后一个元素,若列表为空则等待直到超时或有新元素 brpop mylist 0
BRPOPLPUSH 阻塞移除列表的最后一个元素,并将其插入到另一个列表头部 brpoplpush mylist myotherlist 0

string 字符串

命令 描述 示例
SET 设置指定 key 的值 set mykey "Hello"
GET 获取指定 key 的值 get mykey
GETSET 设置指定 key 的新值并返回旧值 getset mykey "NewValue"
MSET 一次设置多个 key-value mset key1 "a" key2 "b"
MGET 一次获取多个 key 的值 mget key1 key2
SETEX 设置 key 的值及其过期时间(秒) setex mykey 10 "Hello"
SETNX 只有在 key 不存在时,才设置 key 的值 setnx mykey "Hello"
INCR 将 key 的整数值加 1 incr mycounter
INCRBY 将 key 的整数值加指定的增量 incrby mycounter 5
DECR 将 key 的整数值减 1 decr mycounter
DECRBY 将 key 的整数值减指定的减量 decrby mycounter 5
APPEND 将 value 追加到原 key 值的末尾 append mykey " World"
STRLEN 返回 key 所存储的字符串值的长度 strlen mykey
SETRANGE 用指定的字符串覆盖 key 从偏移量开始的值 setrange mykey 6 "Redis"
GETRANGE 返回 key 中字符串值的子字符串,范围由 start 和 end 指定 getrange mykey 0 4
MSETNX 当所有给定 key 都不存在时,同时设置多个 key-value msetnx key1 "a" key2 "b"
#.set用于设置一个key/value
set key1 "hello"

#.get用于返回指定key所存储的键值
get key1

hash 哈希

命令 描述 示例
hset key field value 给key集合中的filed键赋值value -
hget key1 field 集合field取出value -
hmset key1 field1 value1 field2 value2 批量设置hash的值 -
hexists key1 field 查看哈希表key中,给定域field是否存在 -
hkeys key 列出该hash集合的所有field -
hvals key 列出该hash集合的所有value -
hincrby key field increment 为哈希表key中的域field的值加上增量1 -1 -
hsetnx key field value 将哈希表key中的域field的值设置为value -

set 集合

  • set集合类型也是保存多个字符串类型的元素,但是和列表类型不同的是,set集合中的元素是无序的,并且不允许重复
命令 描述 示例
SADD 向集合中添加一个或多个成员 sadd myset "apple" "banana"
SCARD 获取集合中成员的数量 scard myset
SDIFF 返回一个集合与其他集合的差集 sdiff myset1 myset2
SDIFFSTORE 将差集结果存储在指定的集合中 sdiffstore resultset myset1 myset2
SINTER 返回集合的交集 sinter myset1 myset2
SINTERSTORE 将交集结果存储在指定的集合中 sinterstore resultset myset1 myset2
SISMEMBER 判断成员是否在集合中 sismember myset "apple"
SMEMBERS 返回集合中的所有成员 smembers myset
SMOVE 将指定成员从一个集合移动到另一个集合 smove myset1 myset2 "apple"
SPOP 随机移除并返回集合中的一个或多个成员 spop myset 1
SRANDMEMBER 随机返回集合中的一个或多个成员,但不移除 srandmember myset 2
SREM 移除集合中的一个或多个成员 srem myset "apple" "banana"
SUNION 返回所有集合的并集 sunion myset1 myset2
SUNIONSTORE 将并集结果存储在指定的集合中 sunionstore resultset myset1 myset2

zset 有序集合

  • zset有序集合与普通集合set非常相似,是一个可以存在重复元素的字符串集合。与set集合不同的是,有序集合中的每个元素都有一个唯一的浮点类型的分数(score)与之关联,使得有序集合中的元素是可以维护有序性的,在进行排序的时候就是根据分数(score)的大小来说进行升序/降序排序
命令 描述 示例
zadd key score1 value1 score2 value2 将一个或多个member元素及其score值加入到有序key中 -
zrange key start stop (withscores) 返回有序集key,下标在start与stop之间的元素 -
zrangebyscore key min max(withscores) 返回有序集key,所有score值介于min和max之间的成员 -
zrevrangebyscore key max min (withscores) 同上,改为从大到小排列 -
zincrby key increment value 为元素的score加上增量 -
zrem key value 删除该集合下,指定值的元素 -
zcount key min max 统计该集合,分数区间内的元素个数 -
zrank key value 返回该值在集合中的排名,从0开始 -
  • 有序集合 与 列表、集合的异同点:
数据结构 是否允许重复元素 是否有序 有序依据 应用场景
列表 索引下标 时间轴、消息队列等
set 集合 - 标签、社交等
zset 有序集合 分数 排行榜系统、社交等
Copyright © www.sqlfans.cn 2024 All Right Reserved更新时间: 2024-12-25 17:12:43

results matching ""

    No results matching ""