Redis——Redis通用指令和服务器配置

406 阅读7分钟

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

补充

pidfile /var/run/redis_6379.pid		# 如果以后台的方式运行,我们就需要指定一个pid 文件

logfile ""	# 日志的文件位置名

always-show-logo yes	# 是否总是显示logo

快照 SNAPSHOTTING

save 3600 1		# 如果3600s内 如果至少有1个key进行了修改,我们进行持久化操作
save 300 100	# 如果300s内 如果至少有100个key进行了修改,我们进行持久化操作
save 60 10000	# 如果60s内 如果至少有10000个key进行了修改,我们进行持久化操作

stop-writes-on-bgsave-error yes # 持久化如果出错,是否还需要继续工作

rdbcompression yes	# 是否压缩rdb文件(持久化文件)	需要消耗一些cpu资源

rdbchecksum yes	# 保存rdb文件的时候,进行错误的检查校验

dir ./	# rdb 文件保存的目录


安全 SECURITY

127.0.0.1:6379> ping
PONG
127.0.0.1:6379> config set requirepass "123456"		# 设置redis的密码
OK
127.0.0.1:6379> auth 123456	# 使用密码登录
OK
127.0.0.1:6379> config get requirepass	# 获取密码
1) "requirepass"
2) "123456"

限制 CLIENTS

maxclients 10000	# 设置能连接上redis的最大客户端的数量

maxmemory <bytes>	# redis 配置最大的内存容量

maxmemory-policy noeviction	# 内存到达上限之后的处理策略

1、volatile-lru:只对设置了过期时间的key进行LRU(默认值) 

2、allkeys-lru : 删除lru算法的key   

3、volatile-random:随机删除即将过期key   

4、allkeys-random:随机删除   

5、volatile-ttl : 删除即将过期的   

6、noeviction : 永不过期,返回错误

aof配置 APPEND ONLY 模式

appendonly no	# 默认是不开启aof模式的,默认是使用rdb方式持久化,在大部分所有的情况下,rdb完全够用

appendfilename "appendonly.aof"		# 持久化的文件的名字

# appendfsync always	# 每次修改都会 sync.消耗性能
appendfsync everysec	# 每秒执行一次 sync(同步),可能会丢失这1s的数据!
# appendfsync no		# 不执行 sync同步 这个时候操作系统自己同步数据,速度最快

具体的配置,我们在Redis持久化的笔记中详细写