一 搭建
1 下载安装,参考官方
$ wget http://download.redis.io/releases/redis-3.2.1.tar.gz
$ tar xzf redis-3.2.1.tar.gz
$ cd redis-3.2.1
$ make
2 启动redis
$ redis-server /etc/redis/redis.conf
3 客户端
$ redis-cli (redis-cli -a password)
$ ping
4 关闭redis
pkill redis
5 修改配置
daemonize yes 后台运行
requirepass pass!! 添加密码
...
二 数据类型,常用操作命令
List是可以重复的,有序的。而Set是不能重复的,无序的。List适合经常追加数据,插入,删除数据。但随即取数效率比较低。Set适合经常地随即储存,插入,删除。但是在遍历时效率比较低。
1 string类型
set name hufeng
get name
setnx name hufeng0(如果name存在,返回0,不设置不更新。通过它代替数据库锁定),(nx = not exist)
#新版redis 可以这样使用,避免死锁
$redis->set($key, $value, array('nx', 'ex' => $ttl));
set key value EX 10 NX
setex faceColor 10 red (指定键值有效期)
setrange name 2 xiaoxin (从第2个字符替换字符串,不一定全覆盖,看哪个长度长)
mset key1 val1 key2 val2 (一次设置多个key)
msetnx key1 val1 key2 val2 (如果有一个存在,就不成功)
getset name 100 (获取旧值,设置新值)
getrange name 0 5 (获取0到5的子串)
mget key1 key2 (批量返回)
incr key1 (递增1)
incrby key1 10 (递增10,key1不存在,默认为0,+加 -减)
decr key1 (递减)
decrby key1 10 (递减10,+减,-加)
append name 100 (末尾追加字符串)
strlen name (字符串长度)
2 hash类型
hset user:1 name hufeng
hset user:1 phone 18610256505
hget user:1 name
hsetnx user:1 name zhangsan(存在的话,设置失败)
hmset user:2 name hufeng phone 18610256505
hmget user:2 name phone
hincrby user:2 phone 1(递增)
hexists user:2 phone (检测字段是否存在)
hlen user:2 (返回键数量)
hdel user:2 phone(删除hash里指定field)
hkeys user:2 (返回hash所有键名)
hvals user:2 (返回hash所有值)
hgetall user:2 (获取所有key val)
3 list链表类型
lpush mylist 1 (从头部压入一个元素,先进后出)
lpush mylist 2
lrange mylist 0 -1(代表从头取到尾)
rpush list 1 (从尾部压入一个元素,先进先出)
linsert list before 2 3 (在指定值前面插入一个元素)
lset list 0 a (设置list中,指定下标的元素替换掉)
lrem list 2 hello (从list中删除 2个与hello同值的元素,如果就1个hello就全部删除)
ltrim list 1 2 (保留下标1到2,删除其他的)
lpop list (从list头部删除元素)
rpop list (从list尾部删除元素)
rpoplpush list0 list1 (从list0尾部删除元素并压入到list1头部)
lindex list 0 (获取list中下标为0的值)
llen list (返回list中有几个元素)
4 set 无序集合类型
sadd set ab (添加元素不能添加相同元素)
smembers set (查看set里所有元素)
srem set ab (删除set中元素)
spop set (随机删除一个元素)
sdiff set1 set2 (两个集合的差集,--》set1比set2多了什么)
sdiffstore set3 set1 set2 (set1与set2的差集,存储到set3中)
sinter set1 set2(两个集合的交集)
sinterstore set3 set1 set2 (set1与set2的交集,存储到set3中)
sunion set1 set2 (并集)
sunion set3 set1 set2(set1与set2的并集,存储到set3中)
smove set1 set2 ab (将set1中ab移动到set2中)
scard set1 (查看set1中元素个数)
sismermber set1 ab (判断ab是否在set1集合当中)
srandmember set1 (从set1中随机返回一个元素,不删除)
5 zset有序集合类型
zadd set1 1 "one" (添加元素,并指定顺序)
zrange set1 0 -1 withscores(获取索引0到-1的数据-》默认从小到大排列,withscores显示顺序号)
zrevrange set1 0 -1 withscores(获取索引0到-1的数据-》默认从大到小排列,withscores显示顺序号)
zrangebyscore set1 2 4 withscores (获取score 2到4的数据)
zrem set1 one (删除set1中元素)
zscore set one (返回one元素score值)
zincrby set1 2 one (one的顺序号加2)
zrank set1 one (返回set1中one的索引值-》默认从小到大排列,不是scores)
zrevrank set1 one (返回set1中one的索引值-》默认从大到小排列,不是scores)
zcount set1 2 5 (返回score 2到5的数量)
zcard set1 (返回set1中元素个数)
zremrangebyrank set1 0 2 (删除set1中索引0到2的元素,0是最先进入集合的)
zremrangebyscore set 1 2 (删除set1中score 1到2的元素)
三 redis常用命令
1 键值相关命令
keys s* (所有s开头键,*匹配)
exists age (确认key是否存在)
del age (删除age键)
expire age 10 (设置age过期时间 秒)
ttl age (查看还剩多长时间过期)
persist age (取消age的过期时间)
randomkey (随机返回数据库一个key)
rename set1 set2 (重命名set1为set2)
type set1 (查看set1数据类型)
2 服务器相关命令
ping (返回PONG,代表LIVE)
select 1 (选择数据库redis数据库编号从0-15,默认0)
dbsize (返回当前数据库中key的数目)
info (redis服务器相关信息)
config get * (获取config信息)
flushdb (清空当前数据库)
flushall(清空所有数据库)
四 Redis高级应用
1 安全性
设置个复杂的密码,配置文件:requirepass pass2!!
重启后进入 redis-cli -a pass2!!
2 主从复制
slave配置文件加入如下配置
slaveof 192.168.1.10 6379 #指定master的ip和端口
masterauth pass2!! #master的密码
保存后重启
3 事务处理(不会回滚)
1 multi 开启事务
2 set age 10 操作
3 exec 提交事务
4 discard 取消事务
4 乐观锁
watch age (监控age如果被修改,将执行不成功)
multi
set age 10
exec
5 持久化机制
两种方式
1 快照模式 默认
save 900 1 #900秒内如果1个key被修改,就保存
#https://www.runoob.com/redis/redis-backup.html
2 aof模式,更安全
appendonly yes
appendfsync always //收到命令立即写 IO高
appendfsync everysec //每秒写一次
appendfsync no //依赖OS,性能好,持久化没保证
6 发布订阅信息
subscribe tv1 (监听频道tv1)
publish tv1 messagesssss
7 虚拟内存的使用
really-use-vm yes
vm-enabled yes #开启VM
vm-swap-file /tmp/redis.swap #保存文件路径
vm-max-memory 100000 #redis最大内存上限
vm-page-size 32 #每个页面的大小32字节
vm-page 134217728 #最多使用多少页面
vm-max-threads 4 #工作线程数
五 PHP-REDIS使用
安装php redis扩展 http://redis.io/clients#php (推荐phpredis)
六 BitMap 教程
https://blog.csdn.net/w915209092/article/details/126038873
bitcount key 0 1 (0start 1end 0:0-7位 1:8-15位) //比较特殊
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。