这两天又熟悉了下redis的操作,整理了一下常用语法,如有不对,欢迎拍砖
一.简单介绍及特性
redis是NoSql中的一种,开源,通过key-value存储,数据库在内存中,也可以将数据库写入磁盘,默认端口6379
数据库 | 默认端口 |
mysql | 3306 |
redis | 6379 |
memcache | 11211 |
mongodb | 27017 |
二.常用redis.conf配置
daemonize 如果需要在后台运行 改成 yes
pidfile 配置多个pid的地址
bind 绑定IP,设置后只接受来自该IP请求
port 监听端口,默认为6379
timeout 设置客户端连接时的超时时间,单位为秒
loglevel 分为4级,debug,verbose,notiee,warning
logfile 配置log文件地址
databases 设置数据库的个数,默认使用的数据库为0
save 设置redis进行数据库镜像的频率
rdbcompress 在进行镜像备份时,是否进行压缩
dbfilename 镜像备份文件的文件名
dir 数据库镜像备份的文件放置路径
slaveof 设置数据库为其他数据库的从数据库
masterauth 主数据库连接需要的密码验证
maxchents 限制同时连接的客户数量
maxmemory 设置redis能够使用的最大内存
appendonly 开启append only模式
三.数据类型
string类型
set 设置key对应的值为string类型的value
set name astar
get 获得key对应值
get name
setnx 设置key 如果key已经存在,返回0,否则插入
setnx name astar
setex 设置key指定有效期
setex ha 10 red
setrange 设置指定key的value值为指定字符串(替换)
setrange name 6 gmail.com
mset 一次设置多个key的值
mset key1 a1 key2 a2
msetnx 一次设置多个key,不会覆盖已经存在的值
mestnx key4 a4 key1 aa
getset 设置key的新值并返回key的旧值
getset key4
getrange 获得指定字符串(给范围)
getrange 0 5
mget 一次获得多个值
mget key1 key2
incr 对key的值进行递增
incr key6
incrby 加指定值
incrby key6 5
decr 对key的值进行递减
decr key6
decrby 减指定值
decrby key6 5
append 给指定key的字符串追加value
append key6 bbb
strlen 获得指定key的值指定长度
strlen key6
2.hash类型
是一个string类型的field和value
hset 设置hash field为指定指,如果key不存在,刚先创建
hset myhash field1 hello (myhash 类似于表的慨念)
hget 获得
hget myhash field1
和string类型 的命令基本相似,只在前面加个 'h'
hexists 判断某个值是否存在
hexists myhash field2
hlen 返回指定hash的健数
hlen myhash
hdel 删除指定hash的field
hdel myhash field2
hkeys 返回hash的所有fiels
hkeys myhash
hvals 返回hash的所有value
hvals myhash
hgetall 获取某个hash中全部的field 和value
hgetall myhash
3.list类型
是链表结构 主要功能是push,pop,获取一个范围的所有值
lpush 在key的list里往头部添加字符串元素
lpush mylist 'world'
lpush mylist 'hello'
lrange 取list里数据
lrange mylist 0 -1
rpush 从尾部添加元素
rpush list2 'mysql'
rpush list2 'app'
linsert 在key里的list特定的值后面添加字符串
linsert list2 before 'app' 'php'
lset 设置list中指定下标的值替换
lset list 0 'world'
lrem 从key对list中删除n个和value相同的元素
lrem list 1 'world'
ltrim 保留指定key的值范围内的数据
ltrim list 0 -1
lpop 从list头部删除元素,并返回删除元素
lpop mylist
rpop 从list尾部删除元素
rpop mylist
rpoplpush 从第一个list的尾部移除元素并添加到第二个list的头部
rpoplpush mylist1 mylist2
lindex 返回名称为key的list中index 位置的元素
lindex mylist1 1
llen 返回list的长度
llen mylist1
4.sets类型
集合,是string类型的无序集合
sadd 向名称为key的set中添加元素
sadd myset hello
smembers 查看集合成员
smembers myset
srem 删除set中的元素
srem myset hello
spop 随机返回并删除一个元素
spos myset
sdiff 返回所有给定key与第一个值的差集
sdiff myset1 myset2 myset3
sdiffstore 将返回的差集存为另一个key
sdiffstore myset4 myset1 myset2(存在myset4)
sinter 返回交集
sinter myset1 myset2
sinerstore 交集存
sinterstore myset4 myset1 myset2
sunion 返回并集
sunion myset1 myset2
sunionstore 并集存
sunionstore myset4 myset1 myset2
smove 移除第一个元素 移动到第二个元素
smove myset1 myset2 three
scard 返回set元素的个数
scard myset1
sismember 测试名称是否为set的元素
sismember myset1 one
srandmember 随机返回一个元素
srandmember myset1
5.zset类型(有序集合)
sets类型的升级
zadd 添加一个元素并指定key
zadd myzset 1 one
zrange 输出值
zrange myzset 0 -1 withscores
zrem 删除名称为key的zset中元素
zrem myzset one
zincrby 改变key的值
zincrby zset1 2 one
zrank 返回zset中的排序 小=》大
zrank myzset1 tow
zrevrank 返回zset中排序 大=》小
zrevrank myzset1 tow
zrevrange 输出排序
zrevrange myzset1 0 -1 withscores
zrangebyscore 找到key值的指定元素
zrangebyscore myzset1 2 3 withscores
zcount 返回集合中score数量
zcount myzset1 2 4
zcard 所有元素个数
zcard myzset1
zremrangebyrank 删除集合中指指定排序的类型
zremrangebyrand myzset1 1 1
四.redis常用命令
1.键值相关命令
keys 返回满足给定设置的key
keys *
exists 确认一个key是否存在
exists name
del 删除一个key
del name
expire 设置一个key的过期时间
expire name 10
ttl 查看key过期时间
ttl name
select 进入数据库
select 0
move 将当前数据库中的key转移到期他数据库中
move name 1
persist 取消过期时间
persist name
randomkey 随机返回key空间的一个key
randomkey
rename 重命名 key
rename name name1
type 返回值 的类型
type name
auth 缓权
auth password
2.服务相关命令
ping 测试连接是否成功
ping
echo 在命令行输出内容
echo aaa
select 选择数据库(0-15)
select 1
quit 退出连接
quit
dbsize 返回当前数据库中key的数目
dbsize
info 获取信息和统计
info
config get 实时传储收到的请求
config get *
flushdb 删除当前选择数据库中所有key
flushdb
flushall 删除所有数据库所有key
flushall
五.常用特殊配置
安全性:
requirepass password 设置密码
主从复制:
slave : slaveof 192.168.1.1 6379
masterauth password
事务处理:
multi 打开事务
执行命令
exec 执行事务
discard 取消事务
watch name 监视指定的key ,当exec时,watch发生变化,事务失败
持久化机制:
snapshotting(快照)默认方式 (数据写入二进制文件)
Append-only file(缩写aof)的方式 (记录执行的命令)
配置文件:
快照
save 900 1
save 300 10
save 60 100
aof
appendonly yes
appendfsync always //收到写命令就立即写入磁盘,最慢,保证完整性
appendfsync everysec // 每秒钟写入磁盘 中
appendfsync no //完全依赖os,性能好,持久化没保证
发布订阅消息:
subscribe tv1 监听信息
subscribe tv1 tv2 监听信息
publish tv1 name 发布信息
虚拟内存的使用:
vm-enabled yes #开启vm功能
vm-swap-file /tmp/redis.swap #交换出来的value保存的文件路径
vm-max-memory 100000 #redis使用的最大内存上限
vm-page-size 32 #每个页面的大小32字节
vm-pages 123454443 #最多使用多少页面
vm-max-threads 4 #用于执行value对象换入的工作线程数量
really-use-vm yes #是否确认启用vm
六.redis启动与停止
启动 Redis 服务
redis-server redis.conf
将 Redis 作为 Linux 服务随机启动
vi /etc/rc.local, 加入代码:
/root/install/redis-2.4.9/src/redis-server
redis客户端连接
redis-cli
停止redis服务:
redis-cli shutdown
看详细文档:
中文:http://www.jb51.net/books/434622.html
英文:https://github.com/phpredis/phpredis