NoSql中的扛把子! —— Redis
Redis基础
什么是Redis
- 属于NoSql
- 开源 先进的key-value存储
- 一个基于内存的网络存储系统
redis中文网
Redis的特点
- 性能极高,适合高并发读写
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘里,重启的时候再次进行加载(持久)
- Redis支持数据结构多达5种:字符串 哈希 列表 集合 有序集合(花样多)
- Redis支持数据的备份,master-slave模式的数据备份
Redis应用场景
1、取最新 N 个数据的操作 2、排行榜应用,取 TOP N 操作 3、需要精准设定过期时间的应用 4、计数器应用 5、Uniq 操作,获取某段时间所有数据排重值 6、实时系统,反垃圾系统 7、Pub/Sub 构建实时消息系统 8、构建队列系统 9、缓存
一般情况
string类型:适合计数器 系统缓存(把对象 数组 串行化存入string) Hash类型:适合做数据缓存(用户数据) List类型:适合做数组搜索(队列系统,关注列表、粉丝列表丶数据统计) 集合类型:适合做好友推送(商品推送时) unique操作 获取某段时间内所有数据的排重值 统计网站访问的所有独立ip 有序集合类型:适合商品排序(排行榜) 需要精准设定过期的应用(时间戳为score)
ubuntu安装redis
- 注意:apt重新重装redis配置文件会丢失,记得备份(踩过的坑)
redis-cli 开启redis redis-cli shutdown 关闭redis service redis-server restart 重启redis
Redis数据结构命令
字串类型
注意:
- redis可以存和获取中文 需要通过redis-cli –raw
- redis中没有表概念,所有的数据都存入键中>string键类型:所有的值(可以是任何数据类型)都保存在一个键当中,放在一个内存块中
set 键 值 | 设置一个键和值,键存在则覆盖,返回ok | set name xuyong |
get 键 | 获取一个键,返回的是值 | get name |
setnx 键 值 | 只有当该键不存在时设置一个键的值,若键已存在则返回integer0表示失败(防止覆盖) | setnx age 18 |
setex 键 [有效时间] 值 | 设置一个指定有效期的键和值(单位秒)。不写有效时间则表示永久有效,等价于set | setex movie 30 白蛇:缘起 |
ttl 键 | 获取键的有效时间 , 当 key 不存在时,返回 -2 , 当 key 存在但没有设置剩余生存时间时,返回 -1 | ttl movie |
setrange 键 位置 子字串 | 替换子字符串 (替换长度由子子串长度决定) abcdefg 从c开始替换,bad. Abbadfg | setrange key 2 liming p |
mset 键1 值1 键2 值2 键3 值3 …. | 批量设置键和值,成功则返回ok | mset name1 lm name2 sc name3 |
msetnx 键1 值1 键2 值2 键3 值3 …. | 批量设置不存在的键和值(当键不存在时候才成功),成功则返回ok | msetnx b1 1 b2 2 b3 3 |
mget 键1 键2 键3… | 批量获取值 | mget name1 name2 name3 |
getset 键 新值 | 获取原值,并设置新值 | getset name "liming" ,原本的shenchao变成liming |
getrange 键 0 4 | 获取指定范围的值(获取指定0到4位置上的值,字符串位置从0开始计算 | getrange key1 0 4 |
incr键 | 指定键的值做加1操作,返回加后的结果(只能加数字,非数字会报错) | incr age |
decr键 | 指定键的值做减1操作,返回减后的结果 | decr age |
incrby 键 m | 加指定值,键不存在时候会设置键, 其中m可以是正整数或负整数 | incrby age 10 |
decrby 键 m | 同上,但是是减值 | decrby age 5 |
append 键 追加字串 | 给指定key的字符串追加value,返回新字符串值的长度 | append name1 " have a new computer!" |
strlen键名 | strlen求一个键长度 | strlen name1 |
del命令 | 删除一个键 | del name3 |
hashs类型
hset 哈希集(键) 字段 值 | 设置一个键,在键中保存字段和值 | hset key field value |
hsetnx 键 字段 值 | 设置一个键中,不存在的字段和值。如果字段存在则报错(成功返回1,失败返回0) | hsetnx user1 name1 lm |
hmset 键 字段1 值1 字段2 值2 … | 在一个键中,批量设置字段 $redis->hMset("user".$uid,array("uid"=>$uid,"username"=>$username) | hmset star name xuyong age 45 height 150 |
hget键字段 | 获取键中的一个指定字段的值 | hget star name |
hmget 键 字段 | 获取多个字段的值 | hmget star name age height |
hexists 键 字段 | 判断指定的字段是否存在于键中 | hexists star age |
hlen | 获取键中的字段数量 | hlen star |
hkeys | 获取键中的所有字段名 | hkeys star |
hvals | 获取键中所有字段的值 | hvals star |
hgetall | 获取键中的所有字段和值 | hgetall star |
hincrby | 将键中指定字段的值,增加指定的数字 | hincrby star age 5, |
hdel 键 字段1 字段2 | 删除键中的一个或多个字段 | ———————————————————————————————————————————————————————————————————————————————————————————–hdel star age interest大专栏 Redis基础e> |
列表
lpush 键 值1 [值2…] | 从左面增加 | 127.0.0.1:6379> lpush list1 127.0.0.1:6379> lpush list1 2 |
多个值一起增加 | lpush list2 one two three four | |
lrange 键 起始下标 终止下标 | 查 | lrange list1 0 -1 (查全部) |
lrangelist2 -4 3 | -4代表从队列右边数第四个元素, 3代表从队列左边数第四个元素 | |
rpush 键 值1 [值2…] | 同左,换个位置而已 | |
linsert 键 before|after 原值 新值 | 某个位置添加 | LINSERT list3 before 3 hello (在3的前面插一个hellow) |
lset 键 下标 新值 | 修改 | lset list3 2 “5” (给下标为2的键换上新值5) |
lrem 键 n 指定值 | 删除指定值 | lerm list4 -2 hello(删除后两个hello) |
lrem list4 0 hello (删除所有的hello) | ||
ltrim 键 起始下标 结束下标 | 修剪队列,让队列只保留指定指定范围内的元素 | ltrim list5 1 2 (只保留下标为 1 和2的值) |
lpop 键 | 从指定的队列左面移除一个值 | |
rpop 键 | 从指定队列的右边移除一个值 | |
rpoplpush 源队列 目标队列 | 移除源队列的最后一个元素,并把该元素写入目标队列 | |
lindex 键 下标 | 获取队列中指定下标元素的值 | |
llen 键 | 获得队列的长度 |
sets 类型和操作
Set是集合,它是string类型的无序集合。对集合我们可以取并集、交集、差集。通过这些操作我们可以实现社交网站中的好友推荐和blog的tag功能。集合不允许有重复值
sadd 键 值1 [值2…] | 添加 | sadd mset1 12 3 4 添加 1234 |
smembers 键 | 查询 | smembers mset1 |
srem 键 值1[值2…] | 删除 | srem mset1 3 4 删掉了3 4 后面就只剩 1 2了 |
spop 键 | 随机从集合中删除一个元素,并返回 | |
srandmember 键 | 随机返回集合中一个元素,但不删除 | |
scard 键 | 获取集合里面元素个数 | |
sismember 键 值 | 判断值是否存在 | sismember mset1 5 |
sdiff 集合1 集合2 | 返回集合1与集合2的差集。以集合1为主 | |
sdiffstore 新集合 集合1 集合2 | 返回集合1和集合2的差集,并把结果存入新集合 | |
sinter 集合1 集合2 引 | 获得两个集合的交集 | |
sinterstore 新集合 集合1 集合2 | 获得集合1和集合2的交集,并把结果存入新集合 | |
sunion 集合1 集合2 | 获得指定集合的并集 | |
sunionstore 新集合 集合1 集合2 | 获得指定集合的并集,并把结果保存如新集合 | |
smove 源集合 目标集合 值 | 将指定的值从源集合移动到目标集合 |
sorted sets类型和操作(zset)
sorted set是set的一个升级版本,它给集合中每个元素都定义一个分数,集合中的元素按照其分数排序。也不允许有重复值
zadd 键 分数1 值1 [分数2 值2…] | 该命令添加指定的成员到key对应的有序集合中,每个成员都有一个分数。你可以指定多个分数/成员组合。如果一个指定的成员已经在对应的有序集合中了,那么其分数就会被更新成最新的,并且该成员会重新调整到正确的位置,以确保集合有序。分数的值必须是一个表示数字的字符串,并且可以是double类型的浮点数 | zdd man 1 xuyong |
zrange 集合 起始下标 截止下标 [withscores] | 返回有序集合中,指定区间内的成员。其中成员按照score(分数)值从小到大排序。具有相同score值的成员按照字典顺序来排列 | zrange man 0 -1 |
zrevrange 集合 起始下标 截止下标 [withscores] | 返回有序集合中,指定区间的成员。其成员按照score从大到小来排列 | zrevrange man 0 -1 |
起始下标与截止下标和list类型一致: 0代表队列中第一个元素,1代表第二个元素,依次类推 , -1代表队列中最后一个元素,-2代表倒数第二个元素 , withscores:返回集合中元素的同时,返回其分数(score) | ||
zrangebyscore 集合 起始分数 截止分数 withscores | 返回有序集合中score(分数)在指定区间的值 | zrangebyscore man 100 1000 |
zrem 集合 值1 [值2…] e | 删除有序集合中指定的值 | |
zincrby 集合 增量 值 | 给有序集合中指定值的成员的分数(score)值加上增量(increment)。如果集合中没有这个值,则给添加一个分数是increment的值。 | zincrby man -5 huanglei |
zrank 集合 值 | 返回有序集合中指定值的下标。值按照score从小到大排序 | zrank man xuyong |
zrevrank 集合 值 | 返回有序集合中指定值的下标,值按照score从大到小排序 | |
zcount 集合 起始分数 截止分数 | 返回有序集合中,score值在起始分数与截止分数之间的个数 | |
zcard 集合 | 返回有序集合元素的个数 | |
zremrangebyrank 集合 起始下标 结束下标 | 删除有序集合中,下标在指定区间的元素 | |
zremrangebyscore 集合 起始分数 截止分数 | 删除有序集合中,分数在指定区间的元素 | |
zinterstore 新集合 取交集的集合个数 集合1 集合2 | 取集合1和集合2的交集,并把结果保存到新集合中。在计算交集之前,需要指定计算交集的集合的个数。交集中,值的分数是多个集合中分数的和 | |
zunionstore 新集合 取并集的集合个数 集合1 集合2 | 取集合1和集合2的并集,并把结果保存到新集合中。在计算并集之前,需要指定计算并集的集合的个数。并集中,值的分数是多个集合中分数的和。 | |
如何通过php使用redis
- 服务器安装redis,更改配置
- 安装php-redis扩展
- 知道一些基本语句