安装 www.redis.io
下载安装包
tar zxvf redis.tar.gz
cd redis
make
cd src && make install
移动文件,便于管理:
mkdir -p /usr/local/redis/bin
mkdir -p /usr/local/redis/etc
mv /redis/redis.conf /usr/local/redis/etc
mv /redis/src下面命令到 /usr/local/redis/bin
一.数据类型 [终端命令行下操作]
1.String类型
1).介绍:包含任何的数据,比如图片或序列化的对象.
2).set 设置key对应的值为string类型的value
例:
set name value
3).get 获取设置的值
get name
4).setnx key存在,返回0,则设置不成功
setnx name value
5).setex 指定key的有效期 单位为秒
setex name 10 red
6).setrange 设置指定key的value值的子字符串
get name 得到 aaa@126.com
从第4个字符串开始替换,替换的字符串没有原的长,将会保留原有大于长于的字符串
setrange name 4 gmail.com
get name 得到 aaa@gmail.com
7).mset 一次设置多个key的值
mset k1 v1 k2 v2 k3 v3
8).msetnx 一次设置多个key的值,一个key没有设置成功,将全部设置不成功,存在将不会设置即为0[false]
msetnx k1 v1 k2 v2 k3 v3
9).getset 设置key的值,并返回key的旧值
getset key 30 得到 20就是原来的值,并设置了现在key为30
10).getrange 获取key的值子字符串
从第0个字符到第5个字符返回
getrange key 0 5
11).mget 批量获取
mget k1 k2 k3 k4 k5
12).incr 递增 对key的值做加加操作,并返回新的值
incr key
13).incrby 同incr类似,加指定的值,key不存在的时候会设置key,并认为原来的值为0
incrby key 2 让key自增2
incrby key -3 也可以设置为负数,就是自减 些例为自减3
14).decr 自减
decr key
15).decrby 自减指定的值
decrby key 2 自减2
decrby key -2 自增2
16).append 给指定key的字符串追加value,返回新字符串的值的长度
append key @126.com
17).strlen 取得值的长度
strlen key
2.hashes类型
1).介绍
hash是一个string类型的field和value的映射表.特别适用于存储对象.
2).hset 设置hash field为指定的值,如key不存在则先创建
hset user:001 name zhangsan 可以将user:001看成一个表 name为一个表的一个字段
hget user:001 name 得到 zhangsan
3).hsetnx 存在返回0
hsetnx user:001 name zhangsan 返回 1
再设置user:001 name设置就会返回 0
4).hmset 同时设置hash的多个field
hmset user:001 name zhangsan age 20 sex 1
5).hget 获取
hget user:001 name
6).hmget 批量返回
hmget user:001 name age sex
7).hincrby 对某个key自增指定的数
hincrby user:001 age 5 自增为5
8).hexists 检查是否存在,存在为1 否则为0
hexists user:001 name
9).hlen 指定hash的field的数量
hlen user:001
10).hdel 删除指定hash的field的字段
hdel user:001 age 删除age字段
11).hkeys 返回hash中所有的字段
hkeys user:001 返回user:001表中的所有字段
12).hvals 返回hash所有的value
hvals user:001 返回表中所有对应键的对应值
13).hgetall 获取某个hash中全部的field及value
hgetall user:001
3.lists类型
1).介绍
List是一个链表结构,主要功能是push,pop获取一个范围的所有值.操作中key理解为链表的名字. list既可以作为栈,也可以作为队列. 类似于PHP的数组
栈:类似于试管,后进先出,先进后出
队列:类心于管道,先进先出
2).lpush 从头部添加字符串元素
lpush mylist world
lpush mylist hello
lrange mylist 0 -1 得 hello world 先后后出
3).rpush 从尾部添加字符串元素
rpush mylist world
rpush mylist hello
lrange mylist 0 -1 得 world hello 先进先出
4).linsert 在key对应list的特定的位置前或后添加字符串
lpush li1 "one"
lpush li1 "two"
lrange li1 0 -1
linsert li1 before one three
lrange li1 0 -1 得 two three one
5).lset 指定下标的元素替换掉
lset li1 1 four 把li1中下标为1的更改为four
6).lrem 从key对应的list中删除n个和value相同的元素(n<0从尾删除,n=0全部删除)
lrem li1 3 "one" 删除3个和one相关的元素
7).ltrim 保留指定key的值范围内的数据
lpush li1 "one"
lpush li1 "two"
lpush li1 "three"
lpush li1 "four"
ltrim li1 1 2 two three
ltrim li1 1 -1 two three four
8).lpop 从头部删除元素
lpop li1
9).rpop 从尾部删除元素
10).rpoplpush 从第一个list的尾部移除元素,并添加到第二个list的头部
rpoplpush mylist1 mylist2
11)lindex 返回名称为key的list中index位置的元素
lindex li1 0 得到 three 0代表元素的索引
12).llen 返回list的多个元素 相当于PHP中的count()
llen list1 返回个数
4.sets类型
1).介绍
set是集合,它是string类型的无序集合. set是通过hash table实现的增删改查.对集合我们可以了并集,交集,差集.通过这些操作,我们可以实现sns中的好友推荐和blog的tag功能
2).sadd 向名称为key的set中添加元素
sadd myset one 返回1
sadd myset two 返回1
sadd myset one 返回0
smembers myset 查看元素
3).srem 删除key中set中的元素
sadd myset one
sadd myset two
srem myset one 删除成功返回1
smembers myset
4).spop 随机返回并删除名称为key的set中一个元素
sadd myset one
sadd myset two
spop myset
5).sdiff 返回所有给定key与第一个key的差集
sadd myset1 one
sadd myset1 two
sadd myset2 three
sadd myset2 two
sdiff myset1 myset2 返回 one
sdiff myset2 myset1 返回 three 注:set谁在前返回前面不同的值
6).sdiffstore 返回所有给定key与第一个key的差集,并将结果存为另一个set中
sadd myset1 one
sadd myset1 two
sadd myset2 three
sadd myset2 two
sdiff myset3 myset1 myset2 将差集存储到myset3中
7).sinter 返回所用给定的key的交集
sadd myset1 one
sadd myset1 two
sadd myset2 three
sadd myset2 two
sinter myset1 myset2 得 two
8).sinterstore 返回所用给定的key的交集并存储到另一个集合中
sadd myset1 one
sadd myset1 two
sadd myset2 three
sadd myset2 two
sinterstore myset3 myset1 myset2 存到myset3集合中 two
9).sunion 并集
sadd myset1 one
sadd myset1 two
sadd myset2 three
sadd myset2 two
sunion myset1 myset2 得 one two three
10).sunionstore 并集并存储
sadd myset1 one
sadd myset1 two
sadd myset2 three
sadd myset2 two
sunion myset3 myset1 myset2 存myset3集合中 得 one two three
11).smove 从第一个key对应的set中移除并添加到第二个对应的set中
sadd myset1 one
sadd myset1 two
sadd myset2 three
sadd myset2 two
smove myset1 myset3 one 将myset1中的one移到myset8中
12).scard 返回名称为key的set的元素个数
scard myset1
13).sismember 测试某个元素是否是名称为key的集合的元素 类似php中的in_array()
sadd myset1 one
sadd myset1 two
sismember myset1 one 有返回1 无为0
14).srandmemeber 随机返回名称为key的集合的一个元素,但不删除元素
sadd myset1 one
sadd myset1 two
srandmemeber myset1
5.sorted sets类型
1).介绍
是set一个升级版本,有序集合,有顺序
2).zadd 添加
zadd zset1 1 one 数定为索引
zadd zset1 2 two
zadd zset1 3 one
zrange zset1 0 -1 withscores 后面数字索引
3).zrem 删除名为key的zset中的元素
zrem zset1 two
4).zincrby 对顺序号进行增大和减小
zincrby zset1 2 one
zrange zset1 0 -1 withscores
zincrby zset1 -2 one
zrange zset1 0 -1 withscores
5).zrank 返回名称为key的zset中元素的排名,下标从小到大排序
zrank zset1 two
6).zrevrank 降序排 在找索引 和zrank倒个
zrevrank zset1 two
7).zrangebyscore 返回集合中下标在给定区间的元素 按顺序删除
zrangebyscore myset1 2 3 withscores 2和3是下标
8).zcount 返回集合中下标在给定区间的数量
zcount zset1 2 4
9).zcard 返回集合中元素个数
zcard zset1
10).zremrangebyrank 删除集合中排名在给定区间的元素
zremrangebyrank zset 1 1 只删除索引1
二.Redis常用命令
1).keys 返回满足给定pattern的所有key
keys *
2).exists 确认一个key是否存在
exists name 存在返回1,否则0
3).del 删除一个key
del age 删除age键
3).expire 设置一个key的过期时间 单位 秒
expire age 10 给age键设置10秒过期
ttl age 来获取这个key的有效时长
4).select 选择数据库
select 0 进行0数据库
set age 30
get age
move age 1 从0数据库中把age移到1数据库中
select 1
get age
5).persist 移除给定key的过期时间
expire age 100
ttl age
persist age 取消age的过期时间
6).randomkey 随机返回key空间的一个key
randomkey
7).rename 重命名key
rename age age2 把age重命名为age2
8).type 返回值的类型
type age
---------------- 服务器相关命令
9).ping 测试连接是否存活
ping 通了就返回PONG
10).echo 在命令行打印一此内容
echo aaa
11).quit 退出连接
12).dbsize 返回当前数据库中key的数目
dbsize
13).info 获取服务器的相关信息
info
14).config get 实时传储收到的请求
config get
config get timeout
15).flushdb 删除当前选择数据库中的所有key
flushdb
dbsize
16).flushall 删除所有数据库中的所有key
flushall
dbsize
三.Redis高级应用
1).安全性
在配置文件中修改
requirepass 密码
vi /etc/redis/etc/redis.conf
requirepass test 这个test就是密码
pkill redis-server 关闭
/bin/redis-server /etc/redis/etc/redis.conf 启动
这样就生效了
在进入后授权
auth test 就可以
在登陆的时候就指定密码
redis-cli -a test
2.主从复制
配置主从服务器:
只需要在slave的配置文件中加入以下配置
slaveof 192.168.1.100 6379 #指定master的ip和端口
masterauth test #test主机的密码
四.事务处理
get age
multi
set age 10
set age 20
exec
get age
取消一个事务
get age
multi
set age 10
set age 20
discard #取消一个事务
乐观锁
watch age 监听age键
五.持久化机制
1.snapshotting(快照)也是默认方式,默认文件名为dump.rdb
2.Append-only file(缩写aof)的方式.
snapshotting方式
配置redis在n秒内如果超过m个key修改就自动做快照
save 900 1 # 900秒内如果超过1个key被修改,则发起快照保存
save 300 10 #300秒内如果超过10个key被修改,则发起快照保存
save 6000 100
aof方式
redis会将每一个收到的定命令都通过write函数追加到文件中,当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容.当然由于os会在内核中缓存write做的修改,所以可能不是立即写到磁盘上.可以通过配置文件告诉redis我们想要通过fsync函数强制os写入到磁盘的时机
appendonly yes #启用aof持久化方式
#appendfsync always # 收到写命令就立即写入磁盘,最慢,但是保证安全的持久化
appendfsync everysec # 第秒钟写入磁盘一次.在性能和持久化方面做了很好的折中
#appendfsync no # 完全依赖os,性能最好,持久化没保证
六.发布及订阅消息
发布:publish
订阅:subscribe和psubscribe
subscribe tv1 监听了tv1就这个频道 可以同事订阅多个频道 subscribe tv1 tv2
发布
publish tv1 nihao
七.虚拟内存的使用
把不经常访问的数据交换到磁盘上
配置文件中的相关配置
要加上这句: really-use-vm yes
vm-enabled yes # 开启vm功能
vm-swap-file /tmp/redis.swap #交换出来的value保存的文件路径
vm-max-memory 1000000 # redis使用的最大内存上限
vm-page-size 32 # 每个页面的大小32字节
vm-pages 1123343334 # 最多使用多少页面
vm-max-threads 4 # 用于执行value对象换入的工作线程数量
八.和PHP结合
1.打模块 打官网中下载 https://github.com/nicolasff/phpredis/archive/master.zip
tar zxvf phpredis.tar.gz
cd phpredis
/usr/lcoal/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
修改PHP配置文件加上以模块
extension=redis.so