首页 > 技术文章 > redis 常用命令

is-possible 2020-03-12 15:54 原文

http://www.redis.cn

一、redis查数据

1 连接服务

[root@redis1-20 ~]# telnet 127.0.0.1 6380
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
#用telnet也能登录,但是无法查看key的value

 

[root@redis1-20 src]# ./redis-cli -p 6380
#redis可能有好几个服务,要指定端口连接。

2 查询字符串

redis> GET db
(nil)
 #不存在
redis> SET db redis
OK
redis> GET db
"redis"
#查询成功

3 查询列表中的元素

127.0.0.1:12701> lrange list_name  0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
#0 -1代表区间为第一个到最一个
#可见,在列表中有5个元素

二、redis-cli 客户端操作Redis -

redis是一个key-value的Nosql,我们能操作就只有String类型key以及各种类型value.但是一定要注意我们添加的一般都是字符串,只是会组织为特定数据结构.

set(key ,map,set)  -->  set(key ,1),set(key ,"2")

注意:要先启动redis服务端

2.1、对value为string类型的常用操作

set key value       //将字符串值value关联到key
get key               //返回key关联的字符串值

127.0.0.1:6379> set name zq
OK
127.0.0.1:6379> get name
"zq"
127.0.0.1:6379> 

mset               //同时设置一个或多个 key-value 对
mget              //返回所有(一个或多个)给定 key 的值

127.0.0.1:6379> mset age 20 sex man name zq
OK
127.0.0.1:6379> mget age sex name
1) "20"
2) "man"
3) "zq"
127.0.0.1:6379> 

incr key                     //将 key 中储存的数字值增1(key不存在,则初始化为0,再加1)
decr key                  //将 key 中储存的数字值减1(key不存在,则初始化为0,再减1)
incrBy key                  //自增多少
decrBy key

127.0.0.1:6379> mget age sex name
1) "20"
2) "man"
3) "zq"
127.0.0.1:6379> incr age
(integer) 21
127.0.0.1:6379> get age
"21"
127.0.0.1:6379> decr age
(integer) 20
127.0.0.1:6379> get age
"20"
127.0.0.1:6379> incrby age 3
(integer) 23
127.0.0.1:6379> decrby age 6
(integer) 17
127.0.0.1:6379> get age
"17"
127.0.0.1:6379> 

2.2、对key的常用操作

keys *                    //获取所有key列表
del key                    //删除key
expire key xx                   //设置key的过期时间(xx秒后过期)
ttl key                  //查看key的过期时间

127.0.0.1:6379> keys *
1) "sex"
2) "name"
3) "age"
127.0.0.1:6379> del sex
(integer) 1
127.0.0.1:6379> keys *
1) "name"
2) "age"
127.0.0.1:6379> expire age 10
(integer) 1
127.0.0.1:6379> ttl age
(integer) 6
127.0.0.1:6379> ttl age
(integer) 3
127.0.0.1:6379> ttl age
(integer) 1
127.0.0.1:6379> ttl age
(integer) -2
127.0.0.1:6379> get age
(nil)
127.0.0.1:6379> 

select 0-15             //选择库
flushall                   //清空整个redis服务器数据,所有的数据库全部清空
flushdb                  //清除当前库,redis中默认有16个数据库,名称分别为0,1,2...15

127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
(empty list or set)
127.0.0.1:6379[1]> set name zq1
OK
127.0.0.1:6379[1]> get name
"zq1"
127.0.0.1:6379[1]> flushdb
OK
127.0.0.1:6379[1]> get name
(nil)
127.0.0.1:6379[1]> keys *
(empty list or set)
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> 

2.3、对list集合的常用操作

redis怎么实现栈和队列?          -->           都用list,控制一边进同一边出就是栈,一边进另一边出就是队列.

list集合可以看成是一个左右排列的队列(列表)

lpush key value                   //将一个或多个值 value 插入到列表 key 的表头(最左边)
rpush key value                   //将一个或多个值 value 插入到列表 key 的表尾(最右边)

127.0.0.1:6379> lpush users zq1 zq2
(integer) 2
127.0.0.1:6379> rpush users zq4 zq5
(integer) 4
127.0.0.1:6379> lrange users 0 -1
1) "zq2"
2) "zq1"
3) "zq4"
4) "zq5"
127.0.0.1:6379> 

lpop key                   //移除并返回列表 key 的头(最左边)元素。
rpop key                   //移除并返回列表 key 的尾(最右边)元素。

127.0.0.1:6379> lrange users 0 -1
1) "zq2"
2) "zq1"
3) "zq4"
4) "zq5"
127.0.0.1:6379> lpop users
"zq2"
127.0.0.1:6379> rpop users
"zq5"
127.0.0.1:6379> lrange users 0 -1
1) "zq1"
2) "zq4"
127.0.0.1:6379> 

lindex key index                   //返回列表 key 中,下标为 index 的元素
ltrim key start stop                   //对一个列表进行修剪

127.0.0.1:6379> lpush user zq2 zq4 zq5 zq6 zq7 zq8 zq9 zq10
(integer) 8
127.0.0.1:6379> lrange 0 -1
(error) ERR wrong number of arguments for 'lrange' command
127.0.0.1:6379> lrange user 0 -1
1) "zq10"
2) "zq9"
3) "zq8"
4) "zq7"
5) "zq6"
6) "zq5"
7) "zq4"
8) "zq2"
127.0.0.1:6379> lindex user 0
"zq10"
127.0.0.1:6379> ltrim user 0 3
OK
127.0.0.1:6379> lrange user 0 -1
1) "zq10"
2) "zq9"
3) "zq8"
4) "zq7"
127.0.0.1:6379> 

2.4、对set集合的常用操作

set集合是一个无序的不含重复值的队列

sadd  key member  //将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略
srem key member   //移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略
smembers key        //返回集合 key 中的所有成员。

127.0.0.1:6379> sadd users1 xiaoming xiaoli xiaohua
(integer) 3
127.0.0.1:6379> smembers users1
1) "xiaoli"
2) "xiaoming"
3) "xiaohua"
127.0.0.1:6379> srem users1 xiaoli
(integer) 1
127.0.0.1:6379> smembers users1
1) "xiaoming"
2) "xiaohua"
127.0.0.1:6379> 

2.5、对SortedSet(有序集合)的操作

 

 

 2.6、对hash类型的常用操作

hash类型类似于php的数组

hset key name value      //添加一个name=>value键值对到key这个hash类型
hget key name       //获取hash类型的name键对应的值
hmset key name1 key1 name2 key2       //批量添加name=>value键值对到key这个hash类型
hmget key name1 name2      //批量获取hash类型的键对应的值
hkeys       //返回哈希表 key 中的所有键
hvals      //返回哈希表 key 中的所有值
hgetall       //返回哈希表 key 中,所有的键和值

127.0.0.1:6379> hset user:1 name zhangsan
(integer) 1
127.0.0.1:6379> hmset user:1 age 18 sex nv
OK
127.0.0.1:6379> hget user:1 name
"zhangsan"
127.0.0.1:6379> hmget user:1 name age sex
1) "zhangsan"
2) "18"
3) "nv"
127.0.0.1:6379> hgetall user:1
1) "name"
2) "zhangsan"
3) "age"
4) "18"
5) "sex"
6) "nv"
127.0.0.1:6379> hkeys user:1
1) "name"
2) "age"
3) "sex"
127.0.0.1:6379> hvals user:1
1) "zhangsan"
2) "18"
3) "nv"
127.0.0.1:6379> 

2.7、事务

multi        //标记一个事务块的开始。
exec         //执行所有事务块内的命令。

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set name zhangsan
QUEUED
127.0.0.1:6379> set age 19
QUEUED
127.0.0.1:6379> keys *
QUEUED
127.0.0.1:6379> exec
1) OK
2) OK
3) 1) "user:1"
   2) "name"
   3) "age"
   4) "user"
   5) "users"
   6) "users1"
127.0.0.1:6379> 

  discard      //取消事务,放弃执行事务块内的所有命令。

       Redis的事务在执行exec指令时,才批量执行操作,没有回滚操作

2.8、订阅/发布

  SUBSCRIBE channel [channel ...]       //订阅给定的一个或多个频道的信息。
      PUBLISH channel message       //将信息 message 发送到指定的频道 channel 。

新开一个客户端订阅tv频道

127.0.0.1:6379> SUBSCRIBE tv
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "tv"
3) (integer) 1

再开一个窗口登录redis,执行命令

发布nihao!消息到tv频道

[root@iZ11b4sn7o3Z bin]# ./redis-cli -p 6379
127.0.0.1:6379> publish tv nihao!
(integer) 1
127.0.0.1:6379> 

订阅tv频道的客户端可以收到nihao!消息

127.0.0.1:6379> SUBSCRIBE tv
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "tv"
3) (integer) 1

1) "message"
2) "tv"
3) "nihao!"

2.9、设置密码

1)通过命令动态调整密码-临时设置

CONFIG SET 命令可以动态地调整 Redis 服务器的配置而无须重启,重启后失效
CONFIG SET requirepass Mrbrlm1CDK6ui1!r //将密码设置为Mrbrlm1CDK6ui1!r

CONFIG SET requirepass ""       //清除密码
AUTH 123456        //输入密码进行认证

127.0.0.1:6399> ping
(error) NOAUTH Authentication required.
127.0.0.1:6399> AUTH Mrbrlm1CDK6ui1!r
OK
127.0.0.1:6399> ping
PONG
127.0.0.1:6399> 

2).通过配置文件设置密码-长久设置

在配置文件 redis.conf 中增加一行代码
requirepass Mrbrlm1CDK6ui1!r
将密码Mrbrlm1CDK6ui1!r设置到配置文件中,redis启动时加载该文件,即可启用密码

# Warning: since Redis is pretty fast an outside user can try up to
# 150k passwords per second against a good box. This means that you should
# use a very strong password otherwise it will be very easy to break.
#
# requirepass foobared
requirepass Mrbrlm1CDK6ui1!r
# Command renaming.
#

重新启动服务端
鉴权
           AUTH Mrbrlm1CDK6ui1!r    //输入密码进行认证

 

推荐阅读