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 键 值设置一个键和值,键存在则覆盖,返回okset name xuyong
get 键获取一个键,返回的是值get name
setnx 键 值只有当该键不存在时设置一个键的值,若键已存在则返回integer0表示失败(防止覆盖)setnx age 18
setex 键 [有效时间] 值设置一个指定有效期的键和值(单位秒)。不写有效时间则表示永久有效,等价于setsetex movie 30 白蛇:缘起
ttl 键获取键的有效时间 , 当 key 不存在时,返回 -2 , 当 key 存在但没有设置剩余生存时间时,返回 -1ttl movie
setrange 键 位置 子字串替换子字符串 (替换长度由子子串长度决定) abcdefg 从c开始替换,bad. Abbadfgsetrange key 2 liming p
mset 键1 值1 键2 值2 键3 值3 ….批量设置键和值,成功则返回okmset name1 lm name2 sc name3
msetnx 键1 值1 键2 值2 键3 值3 ….批量设置不存在的键和值(当键不存在时候才成功),成功则返回okmsetnx 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扩展
  • 知道一些基本语句
02-12 03:39