1.高级命令
1.keys *
获取所有key
2.exists判断key是否存在,存在返回1
exists age
3.del删除key为..的元素
del age
4.expire设置一个元素的过期时间。ttl查看元素的剩余时间,-1为永久保存,-2为不存在
set age 20
expire age 10
ttl age
-1
exists age
0
5.select,选择数据库(0-15个数据库)。move 将当前数据库的元素移动到其他数据库
select 0
set age 30
扫描二维码关注公众号,回复:
1459931 查看本文章
get age
30
move age 1
get age
nil
select 1
get age
30
6.persist移除给定key的过期时间
expire age 300
ttl age
292
persist age
ttl age
-1(已经取消过期时间)
7.randomkey随机返回一个key
8.rename 重命名key
rename age new_age
9.type 返回元素的类型
type list1
list
type set1
set
10.ping测试redis是否能连接
11.echo打印内容
echo a
a
12.quit/exit/ctrl c 退出客户端
13.dbsize 返回当前数据库的key的数目
14.info 查看redis服务器信息
15.config get dir/* 实时传储(打印)收到的dir/*的请求
16.flushdb 清空当前数据库
17.flushall清空所有redis数据库
2.高级应用
1.安全性(给redis.conf增加requirepass密码)
vi redis.conf
requirepass mima
pkill redis-server
redis-server redis.conf
两张启动方式
a1 redis-cli -a mima
a2 1 redis-cli
a2 2 auth mima
2.主从复制(master与slave数据库同步)
1.slave与master 建立连接,slave发送同步命令
2.master会启动一个进程将数据库快照保存到文件,同时master也会执行其他的存储命令并缓存
3.完成保存后,将文件发送到slave
4.slave将文件保存到磁盘
设置主从:
从机的redis.conf需要配置主机的ip、端口及密码
1.slaveof 192.168.88.89 6379
2.masterauth mima
查看主从关系:info
role:master
slave0:192.168.88.90,6379,online
默认情况下redis数据库充当slave角色时是只读的不能进行写操作。
可以在配置文件中开启非只读:slave-read-only no
3.事务处理multi
multi 打开事物
exec 开始按顺序执行事物
discard 取消事物,清空事物队列
例1:
get age
100
multi
set age 10
set age 20
exec
get age
20
例2:
get age
100
multi
set age 10
set age 20
discard
get age
100
与mysql的事物不同,redis的事物若有一条指令发生错误,实物不会回滚(redis需要改进的地方)
乐观锁:watch 若使用watch监控一个Key,这个元素从调用watch后发生过变化,整个事物会失败。断开连接或使用exec、discard、unwatch都会清除监控。
例:
session1:
get age
10
watch age
multi
session2:
set age 30
get age
30
session1:
set age 20
exec
nil(执行失败)
get age
30
4.持久化机制
redis需要经常将内存里的数据同步到磁盘实现持久化。
1.快照(默认方式)
快照是将内存中的数据写入到二进制文件,默认文件名dump.rdb。可redis.conf配置发起快照的条件:
save 900 1 (900秒内超过1个key被修改发起)
save 300 10 (300秒内超过10个key被修改发起)
900/300 秒内只会发起一次快照,这样的持久化可能导致数据丢失,所以有aop的方式持久化。
2.aof
aof有更好的持久性,redis会将每一个收到的写命令通过write追加到文件中,重启时,会重新执行文件中的写命令在内存中重建整个数据库
由于os会在内核中缓存write做的修改,所以可能不是立即写入到磁盘,可能导致数据丢失。所以需要redis.conf配置强制os写入磁盘的时机:
appendonly yes
a1 appendfsync always //收到的写命令立即写入磁盘,性能差,持久化最好
a2 appendfsnc everysec //每秒写入磁盘一次,性能与持久化折中
a3 appendfsyc no //完全依赖os,性能最好,持久化差
5.发布与订阅信息
订阅者可通过subscribe订阅自己感兴趣的消息类型,redis将消息类型称为通道。发布者可通过publish发送特定类型的消息时,订阅该消息类型的全部client会收到此信息
client1 subscribe tv1
client2 subscribe tv1 tv2
client3或主机 publish tv2 hello
client2
1) message
2)tv2
3)hello
6.虚拟内存
把不经常访问的数据交换到磁盘上,节约内存开销。
redis.conf配置
vm-enabled yes 开启vm功能
vm-swap-file /tmp/redis.swap value保存的路径
vm-max-memory 1000000 redis使用的最大内存上限
vm-page-size 32 每个页面32字节
vm-pages 134217728 最多使用多少个页面
vm-max-threads 用于value对象换入工作线程的数量
启动redis时会提示如果确认要使用vm功能需要在redis.conf里加入 really-user-vm yes