• 欢迎访问IT乐园(o゚▽゚)o
  • 推荐使用最新版火狐浏览器和Chrome浏览器访问本网站。

Redis 常用命令

编程开发 fhy 6年前 (2018-01-21) 4172次浏览 0个评论
文章目录[隐藏]

Redis 提供了丰富的命令(command)对数据库和各种数据类型进行操作,这些 command 可以在 Linux 终端使用。在编程时,比如使用 Redis 的 Java 语言包,这些命令都有对应的方法。下面将 Redis 提供的命令做一总结。

官网命令列表:http://redis.io/commands (英文)

1、连接操作相关的命令

quit:关闭连接(connection)
auth:简单密码认证

2、对 value 操作的命令

exists(key):确认一个 key 是否存在
del(key):删除一个 key
type(key):返回值的类型
keys(pattern):返回满足给定 pattern 的所有 key
randomkey:随机返回 key 空间的一个 key
rename(oldname, newname):将 key 由 oldname 重命名为 newname,若 newname 存在则删除 newname 表示的 key
dbsize:返回当前数据库中 key 的数目
expire:设定一个 key 的活动时间(s)
ttl:获得一个 key 的活动时间
select(index):按索引查询
move(key, dbindex):将当前数据库中的 key 转移到有 dbindex 索引的数据库
flushdb:删除当前选择数据库中的所有 key
flushall:删除所有数据库中的所有 key

3、对 String 操作的命令

set(key, value):给数据库中名称为 key 的 string 赋予值 value
get(key):返回数据库中名称为 key 的 string 的 value
getset(key, value):给名称为 key 的 string 赋予上一次的 value
mget(key1, key2,…, key N):返回库中多个 string(它们的名称为 key1,key2…)的 value
setnx(key, value):如果不存在名称为 key 的 string,则向库中添加 string,名称为 key,值为 value
setex(key, time, value):向库中添加 string(名称为 key,值为 value)同时,设定过期时间 time
mset(key1, value1, key2, value2,…key N, value N):同时给多个 string 赋值,名称为 key i 的 string 赋值 value i
msetnx(key1, value1, key2, value2,…key N, value N):如果所有名称为 key i 的 string 都不存在,则向库中添加 string,名称 key i 赋值为 value i
incr(key):名称为 key 的 string 增 1 操作
incrby(key, integer):名称为 key 的 string 增加 integer
decr(key):名称为 key 的 string 减 1 操作
decrby(key, integer):名称为 key 的 string 减少 integer
append(key, value):名称为 key 的 string 的值附加 value
substr(key, start, end):返回名称为 key 的 string 的 value 的子串

4、对 List 操作的命令

rpush(key, value):在名称为 key 的 list 尾添加一个值为 value 的元素
lpush(key, value):在名称为 key 的 list 头添加一个值为 value 的 元素
llen(key):返回名称为 key 的 list 的长度
lrange(key, start, end):返回名称为 key 的 list 中 start 至 end 之间的元素(下标从 0 开始,下同)
ltrim(key, start, end):截取名称为 key 的 list,保留 start 至 end 之间的元素
lindex(key, index):返回名称为 key 的 list 中 index 位置的元素
lset(key, index, value):给名称为 key 的 list 中 index 位置的元素赋值为 value
lrem(key, count, value):删除 count 个名称为 key 的 list 中值为 value 的元素。count 为 0,删除所有值为 value 的元素,count>0 从头至尾删除 count 个值为 value 的元素,count<0 从尾到头删除|count|个值为 value 的元素。 lpop(key):返回并删除名称为 key 的 list 中的首元素 rpop(key):返回并删除名称为 key 的 list 中的尾元素 blpop(key1, key2,… key N, timeout):lpop 命令的 block 版本。即当 timeout 为 0 时,若遇到名称为 key i 的 list 不存在或该 list 为空,则命令结束。如果 timeout>0,则遇到上述情况时,等待 timeout 秒,如果问题没有解决,则对 keyi+1 开始的 list 执行 pop 操作。
brpop(key1, key2,… key N, timeout):rpop 的 block 版本。参考上一命令。
rpoplpush(srckey, dstkey):返回并删除名称为 srckey 的 list 的尾元素,并将该元素添加到名称为 dstkey 的 list 的头部

5、对 Set 操作的命令

sadd(key, member):向名称为 key 的 set 中添加元素 member
srem(key, member) :删除名称为 key 的 set 中的元素 member
spop(key) :随机返回并删除名称为 key 的 set 中一个元素
smove(srckey, dstkey, member) :将 member 元素从名称为 srckey 的集合移到名称为 dstkey 的集合
scard(key) :返回名称为 key 的 set 的基数
sismember(key, member) :测试 member 是否是名称为 key 的 set 的元素
sinter(key1, key2,…key N) :求交集
sinterstore(dstkey, key1, key2,…key N) :求交集并将交集保存到 dstkey 的集合
sunion(key1, key2,…key N) :求并集
sunionstore(dstkey, key1, key2,…key N) :求并集并将并集保存到 dstkey 的集合
sdiff(key1, key2,…key N) :求差集
sdiffstore(dstkey, key1, key2,…key N) :求差集并将差集保存到 dstkey 的集合
smembers(key) :返回名称为 key 的 set 的所有元素
srandmember(key) :随机返回名称为 key 的 set 的一个元素

6、对 zset(sorted set)操作的命令

zadd(key, score, member):向名称为 key 的 zset 中添加元素 member,score 用于排序。如果该元素已经存在,则根据 score 更新该元素的顺序。
zrem(key, member) :删除名称为 key 的 zset 中的元素 member
zincrby(key, increment, member) :如果在名称为 key 的 zset 中已经存在元素 member,则该元素的 score 增加 increment;否则向集合中添加该元素,其 score 的值为 increment
zrank(key, member) :返回名称为 key 的 zset(元素已按 score 从小到大排序)中 member 元素的 rank(即 index,从 0 开始),若没有 member 元素,返回“nil”
zrevrank(key, member) :返回名称为 key 的 zset(元素已按 score 从大到小排序)中 member 元素的 rank(即 index,从 0 开始),若没有 member 元素,返回“nil”
zrange(key, start, end):返回名称为 key 的 zset(元素已按 score 从小到大排序)中的 index 从 start 到 end 的所有元素
zrevrange(key, start, end):返回名称为 key 的 zset(元素已按 score 从大到小排序)中的 index 从 start 到 end 的所有元素
zrangebyscore(key, min, max):返回名称为 key 的 zset 中 score >= min 且 score <= max 的所有元素 zcard(key):返回名称为 key 的 zset 的基数 zscore(key, element):返回名称为 key 的 zset 中元素 element 的 score zremrangebyrank(key, min, max):删除名称为 key 的 zset 中 rank >= min 且 rank <= max 的所有元素 zremrangebyscore(key, min, max) :删除名称为 key 的 zset 中 score >= min 且 score <= max 的所有元素
zunionstore / zinterstore(dstkeyN, key1,…,keyN, WEIGHTS w1,…wN, AGGREGATE SUM|MIN|MAX):对 N 个 zset 求并集和交集,并将最后的集合保存在 dstkeyN 中。对于集合中每一个元素的 score,在进行 AGGREGATE 运算前,都要乘以对于的 WEIGHT 参数。如果没有提供 WEIGHT,默认为 1。默认的 AGGREGATE 是 SUM,即结果集合中元素的 score 是所有集合对应元素进行 SUM 运算的值,而 MIN 和 MAX 是指,结果集合中元素的 score 是所有集合对应元素中最小值和最大值。

7、对 Hash 操作的命令

hset(key, field, value):向名称为 key 的 hash 中添加元素 field<—>value
hget(key, field):返回名称为 key 的 hash 中 field 对应的 value
hmget(key, field1, …,field N):返回名称为 key 的 hash 中 field i 对应的 value
hmset(key, field1, value1,…,field N, value N):向名称为 key 的 hash 中添加元素 field i<—>value i
hincrby(key, field, integer):将名称为 key 的 hash 中 field 的 value 增加 integer
hexists(key, field):名称为 key 的 hash 中是否存在键为 field 的域
hdel(key, field):删除名称为 key 的 hash 中键为 field 的域
hlen(key):返回名称为 key 的 hash 中元素个数
hkeys(key):返回名称为 key 的 hash 中所有键
hvals(key):返回名称为 key 的 hash 中所有键对应的 value
hgetall(key):返回名称为 key 的 hash 中所有的键(field)及其对应的 value

8、持久化

save:将数据同步保存到磁盘
bgsave:将数据异步保存到磁盘
lastsave:返回上次成功将数据保存到磁盘的 Unix 时戳
shundown:将数据同步保存到磁盘,然后关闭服务

9、远程服务控制

info:提供服务器的信息和统计
monitor:实时转储收到的请求
slaveof:改变复制策略设置
config:在运行时配置 Redis 服务器

Redis 高级应用

1、安全性
设置客户端连接后进行任何操作指定前需要密码,一个外部用户可以再一秒钟进行 150W 次访问,具体操作密码修改设置 redis.conf 里面的 requirepass 属性给予密码,当然我这里给的是 primos
之后如果想操作可以采用登陆的时候就授权使用:
sudo /opt/java/redis/bin/redis-cli -a primos
或者是进入以后 auth primos 然后就可以随意操作了

2、主从复制
做这个操作的时候我准备了两个虚拟机,ip 分别是 192.168.15.128 和 192.168.15.133
通过主从复制可以允许多个 slave server 拥有和 master server 相同的数据库副本
具体配置是在 slave 上面配置 slave
slaveof 192.168.15.128 6379
masterauth primos
如果没有主从同步那么就检查一下是不是防火墙的问题,我用的是 ufw,设置一下 sudo ufw allow 6379 就可以了
这个时候可以通过 info 查看具体的情况

3、事务处理
redis 对事务的支持还比较简单,redis 只能保证一个 client 发起的事务中的命令可以连续执行,而中间不会插入其他 client 的命令。当一个 client 在一个连接中发出 multi 命令时,这个连接会进入一个事务的上下文,连接后续命令不会立即执行,而是先放到一个队列中,当执行 exec 命令时,redis 会顺序的执行队列中的所有命令。
比如我下面的一个例子
set age 100
multi
set age 10
set age 20
exec
get age –这个内容就应该是 20
multi
set age 20
set age 10
exec
get age –这个时候的内容就成了 10,充分体现了一下按照队列顺序执行的方式
discard 取消所有事务,也就是事务回滚
不过在 redis 事务执行有个别错误的时候,事务不会回滚,会把不错误的内容执行,错误的内容直接放弃,目前最新的是 2.6.7 也有这个问题的
乐观锁
watch key 如果没 watch 的 key 有改动那么 outdate 的事务是不能执行的

4、持久化机制
redis 是一个支持持久化的内存数据库
snapshotting 快照方式,默认的存储方式,默认写入 dump.rdb 的二进制文件中,可以配置 redis 在 n 秒内如果超过 m 个 key 被修改过就自动做快照
append-only file aof 方式,使用 aof 时候 redis 会将每一次的函 数都追加到文件中,当 redis 重启时会重新执行文件中的保存的写命
令在内存中。
5、发布订阅消息 sbusribe publish 操作,其实就类似 linux 下面的消息发布
6、虚拟内存的使用
可以配置 vm 功能,保存路径,最大内存上线,页面多少,页面大小,最大工作线程
临时修改 ip 地址 ifconfig eth0 192.168.15.129

redis-cli 命令抄袭点击打开链接

redis-cli 参数

Usage: redis-cli [OPTIONS] [cmd [arg [arg …]]]
-h Server hostname (default: 127.0.0.1)
-p Server port (default: 6379)
-s Server socket (overrides hostname and port)
-a Password to use when connecting to the server
-r 选项重复执行一个命令指定的次数。
-i 设置命令执行的间隔。
It is possible to specify sub-second times like -i 0.1
-n Database number
-x 选项从标准输入(stdin)读取最后一个参数
-d Multi-bulk delimiter in for raw formatting (default: \n)
-c 开启 reidis cluster 模式,连接 redis cluster 节点时候使用
–raw Use raw formatting for replies (default when STDOUT is not a tty)
–latency Enter a special mode continuously sampling latency
–slave 模拟 slave 从 master 上接收到的 commands。slave 上接收到的 commands 都是 update 操作,记录数据的更新行为。
–pipe 这个一个非常有用的参数。发送原始的 redis protocl 格式数据到服务器端执行。
–bigkeys Sample Redis keys looking for big keys
–eval Send an EVAL command using the Lua script at
–help Output this help and exit
–version Output version and exit

Examples:

cat /etc/passwd | redis-cli -x set mypasswd
redis-cli get mypasswd
redis-cli -r 100 lpush mylist x
redis-cli -r 100 -i 1 info | grep used_memory_human:
redis-cli –eval myscript.lua key1 key2 , arg1 arg2 arg3
(Note: when using –eval the comma separates KEYS[] from ARGV[] items)

常用命令:
1) 查看 keys 个数
keys * // 查看所有 keys
keys prefix_* // 查看前缀为”prefix_”的所有 keys

2) 清空数据库
flushdb // 清除当前数据库的所有 keys
flushall // 清除所有数据库的所有 keys


IT 乐园 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Redis 常用命令
喜欢 (0)
关于作者:
九零后挨踢男
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址