一、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 //输入密码进行认证