Redis通用指令和服务器配置
Redis通用指令
key通用操作
- key是一个字符串,通过key获取redis中保存的数据
key应该设计哪些操作
-
对于key自身状态的相关操作,例如:删除,判定存在,获取类型等
-
对于key有效性控制相关操作,例如:有效期设定,判定是否有效,有效状态的切换等
-
对于key快速查询操作,例如:按指定策略查询key
-
删除指定key
del key
-
获取key是否存在
exists key
-
获取key的类型
type key
127.0.0.1:6379> set str str
OK
127.0.0.1:6379> hset hash1 hash1 hash1
(integer) 1
127.0.0.1:6379> lpush list1 list1
(integer) 1
127.0.0.1:6379> sadd set1 set1
(integer) 1
127.0.0.1:6379> zadd zset1 1 zset1
(integer) 1
127.0.0.1:6379> type zset1
zset
127.0.0.1:6379> type str
string
127.0.0.1:6379> type hash1
hash
127.0.0.1:6379> exists str
(integer) 1
127.0.0.1:6379> exists strqwfqw
(integer) 0
127.0.0.1:6379> del zset1
(integer) 1
127.0.0.1:6379> del zset1
(integer) 0
127.0.0.1:6379> exists zset1
(integer) 0
key 扩展操作(时效性控制)
-
为指定key设置有效期
expire key seconds
pexpire key milliseconds
expireat key timestamp # 使用时间戳
pexpireat key milliseconds-timestamp -
获取key的有效时间
ttl key
pttl key -
切换key从时效性转换为永久性
persist key
127.0.0.1:6379> expire list1 30
(integer) 1
127.0.0.1:6379> ttl list1
(integer) 25
127.0.0.1:6379> ttl list1
(integer) 12
127.0.0.1:6379> ttl list1 # 失效的key返回-2
(integer) -2
127.0.0.1:6379> ttl list2 # 没有时效的key返回-1
(integer) -1
127.0.0.1:6379> persist list2 # 对没有设置时效性的key转换成永久性 返回0
(integer) 0
127.0.0.1:6379> expire list2 60
(integer) 1
127.0.0.1:6379> ttl list2
(integer) 57
127.0.0.1:6379> persist list2 # 设置时效性的key 返回1 成功
(integer) 1
127.0.0.1:6379> ttl list2
(integer) -1
key 扩展操作(查询模式)
- 查询key
keys pattern
查询模式规则
* 匹配任意数量的任意符号
? 配合一个任意符号
[] 匹配一个指定符号
keys * 查询所有
keys it* 查询所有以it开头
keys *heima 查询所有以heima结尾
keys ??heima 查询所有前面两个字符任意,后面以heima结尾
keys user:? 查询所有以user:开头,最后一个字符任意
keys u[st]er:1 查询所有以u开头,以er:1结尾,中间包含一个字母,s或t
127.0.0.1:6379> keys us*
1) "user:id:110:fans"
2) "user:id:120"
3) "user1"
4) "user2"
5) "user5"
6) "user:1:age"
7) "user"
8) "user:1:name"
9) "user3"
10) "user:1:gender"
11) "user4"
12) "user:id:110:views"
13) "user:id:110:likes"
127.0.0.1:6379> keys s*
1) "shop:001"
2) "s1"
3) "set1"
4) "s2"
5) "scores"
6) "sss"
7) "socres"
8) "ss"
9) "s3"
127.0.0.1:6379> keys use?
1) "user"
127.0.0.1:6379> keys s?r
1) "str"
127.0.0.1:6379> keys ????
1) "list"
2) "set1"
3) "user"
4) "logs"
5) "news"
127.0.0.1:6379> set name niu
OK
127.0.0.1:6379> set nbme zhu
OK
127.0.0.1:6379> keys n[]me
(empty array)
127.0.0.1:6379> keys n[abc]me
1) "nbme"
2) "name"
key 其他操作
-
为key改名
rename key newkey
renamenx key newkey -
对所有key排序
sort
-
其他key通用操作
help @generic
127.0.0.1:6379> rename user user100
OK
127.0.0.1:6379> get user100
"zhu"
127.0.0.1:6379> keys user*
1) "user:id:110:fans"
2) "user:id:120"
3) "user1"
4) "user2"
5) "user5"
127.0.0.1:6379> renamenx user1 user2 # 如果改的名字存在 则修改失败
(integer) 0
127.0.0.1:6379> lpush aa 123
(integer) 1
127.0.0.1:6379> lpush aa 321
(integer) 2
127.0.0.1:6379> lpush aa 222
(integer) 3
127.0.0.1:6379> lrange aa 0 -1
1) "222"
2) "321"
3) "123"
127.0.0.1:6379> sort aa # 只排序 不动原列表
1) "123"
2) "222"
3) "321"
127.0.0.1:6379> lrange aa 0 -1
1) "222"
2) "321"
3) "123"
数据库通用指令
key 的重复问题
- key是由程序员定义的
- redis在使用过程中,伴随着操作数据量的增加,会出现大量的数据以及对应的key
- 数据不区分种类、类别混杂在一起,极易出现重复或冲突
解决方案
- redis为每个服务提供有16个数据库,编号从0到15
- 每个数据库之间的数据相互独立
db 基本操作
-
切换数据库
select index
-
其他操作
quit
ping
echo message
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> select 15
OK
127.0.0.1:6379[15]> echo abcd
"abcd"
127.0.0.1:6379[15]> ping pong # 测试是否连接成功
"pong"
127.0.0.1:6379[15]> quit
db 相关操作
-
数据移动
move key db
-
数据清除
dbsize
flushdb
flushall
127.0.0.1:6379[1]> get name
(nil)
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> move name 1
(integer) 1
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> get name
"niu"
如果另一个库有相同的key 移动的话会失败
127.0.0.1:6379[2]> set name zhu
OK
127.0.0.1:6379[2]> get name
"zhu"
127.0.0.1:6379[2]> flushdb
OK
127.0.0.1:6379[2]> get name
(nil)
127.0.0.1:6379[2]> select 1
OK
127.0.0.1:6379[1]> get name
"niu"
Redis服务器配置
服务器端设定
-
设置服务器以守护进程的方式运行
daemonize yes|no
-
绑定主机地址
bind 127.0.0.1
-
设置服务器端口号
port 6379
-
设置数据库数量
databases 16
开启两个redis服务
[root@maomao redis_config]# mv redis.conf redis-6379.conf
[root@maomao redis_config]# ls
redis-6379.conf
[root@maomao redis_config]# cp redis-6379.conf redis-6380.conf
[root@maomao redis_config]# vim redis-6380.conf
修改端口号和日志名称还有dir位置
port 6380
logfile "6380.log"
dir /usr/local/redis/data
[root@maomao bin]# redis-server redis_config/redis-6379.conf
[root@maomao bin]# redis-server redis_config/redis-6380.conf
[root@maomao bin]# ps -aux |grep redis
root 1814 0.1 0.4 162456 10060 ? Ssl 09:38 0:00 redis-server 127.0.0.1:6379
root 1820 0.6 0.4 162456 10060 ? Ssl 09:38 0:00 redis-server 127.0.0.1:6380
[root@maomao bin]# redis-cli -p 6379
127.0.0.1:6379>
[root@maomao bin]# redis-cli -p 6380
127.0.0.1:6380>
查看日志
[root@maomao data]# pwd
/usr/local/redis/data
[root@maomao data]# ls
6379.log 6380.log
日志配置
-
设置服务器以指定日志记录级别
loglevel debug|verbose|notice|warning
-
日志记录文件名
logfile 端口号.log
-
设定当前服务文件保存位置,包含日志文件,持久化文件等
dir “/自定义路径/redis/data”
注意:日志级别开发期设置为verbose即可,生产环境中配置为notice,简化日志输出量,降低写日志IO的频度
客户端配置
-
设置同一时间最大客户端连接数,默认无限制。当客户端连接到达上限,Redis会关闭新的连接
maxclients 0
-
客户端闲置等待最大时长,达到最大值后关闭连接。如需关闭该功能,设置为 0
timeout 300
多服务器快捷配置
- 导入并加载指定配置文件信息,用于快速创建redis公共配置较多的redis实例配置文件,便于维护
include /path/server-端口号.conf