安装
apt-get install redis-server```
进入cli控制台
str命令讲解
set
key value```
setnx 设置k 防止重复 .如果重复会直接返回0
setnx key value
setex 设置一个k 并且给有效期 expire
用法: setex k 生成时间(秒单位) v
setex key int(秒单位) value
ttl 以秒为单位返回 key的剩余生存时间
key 不存在 -2
key 存在没有设定时间 -1
key 存在设定过期时间 返回剩余时间
ttl key
127.0.0.1:6379> set name yinkai
OK
127.0.0.1:6379> get name
“yinkai”
127.0.0.1:6379> set yinkai
(error) ERR wrong number of arguments for ‘set’ command
127.0.0.1:6379> set name anjing
OK
127.0.0.1:6379> get name
“anjing”
127.0.0.1:6379> setnx name yinkai
(integer) 0
127.0.0.1:6379> get name
“anjing”
127.0.0.1:6379> setnx age 18
(integer) 0
127.0.0.1:6379> setnx anage 18
(integer) 1
127.0.0.1:6379> get anage
“18”
127.0.0.1:6379> setex run 10 yinkaipaoyipao
OK
127.0.0.1:6379> get run
“yinkaipaoyipao”
127.0.0.1:6379> get run
(nil)
127.0.0.1:6379> setex action 30 macbookpro_2kuai
OK
127.0.0.1:6379> get action
“macbookpro_2kuai”
127.0.0.1:6379> ttl action
(integer) -2
127.0.0.1:6379> setex action 30 macbookpro_2kuai
OK
127.0.0.1:6379> ttl action
(integer) 28
127.0.0.1:6379> ttl action
(integer) 27
127.0.0.1:6379> ttl action
(integer) 26
127.0.0.1:6379> ttl action
(integer) 25
127.0.0.1:6379> ttl action
(integer) 24
127.0.0.1:6379> ttl name
(integer) -1
127.0.0.1:6379>
------
批量设置
mset k1 v1 k2 v2 k3 v3........
批量获取
mget k1 k2 k3 k4.......
127.0.0.1:6379> mset name luo age 18 sex 110
OK
127.0.0.1:6379> get sex
“110”
127.0.0.1:6379> mget name sex age
1) “luo”
2) “110”
3) “18”
批量设置不存在的 键和值(当其中有key不存在,则直接失败.)
msetnx k1 v1 k2 v2 k3 v3........
#### 1.str命令
**浏览量**(++ --)
incr 自增+1 返回自增之后的结果
decr 自减-1 返回自减之后的结果
incrby 键名 数值 (增加指定数量)
(若该字段不存在,则会先创建默认值为0的字段)
eg:incrby age 100
decrby 键名 数值 (减去指定数量)
eg:decrby age 100
del 键名 (删除指定键)
#### 2.hash命令
**存放二维数组**
hset 键名 字段 字段值
hget 键名 字段
**批量处理**
hmset 键名 字段1 值1 字段2 值2 字段3 值3 ...
hmget 键名 字段1 字段2 字段3 ...
**批量获取**
hkeys 键名 (返回指定键名中的所有字段名)
hvals 键名 (返回指定键名中的所有字段值)
hlen 键名 (返回指定键值对中含有的段数量)
hgetall 键名 (返回指定键中所有的字段名+字段值)
**增删**
hincrby 键名 字段名 数值 (给hash键红指定的整形字段添加数值)
eg:hincrby 001 age 10
hdel 键名 字段1 字段2 字段3 ….(删除指定字段)
eg: hdel 001 age name
------
**del 和 hdel 区别**
del 删除一整个价值对
hdel 只删除某个键值对的一个字段
hash小结
hset
hmset
hdel del
hget hmget hgetall hkeys hvals
hincrby
判断:hexists
hexists 键名 字段名 (查询指定键值对中是否存在该字段, 存在返回1,不存在返回0)
<hr/>
list 是链表
特点是 : 有序 队列
先进后出
------
#### 3.链表命令
**创建插入**
lpush 从队列左边插入数据
rpush 从队列右边插入数据
**从左到右显示**
lrange 键名 起始下标 终止下标
(从队列中获取指定的值,从左边开始)
------
**下标指定**: 0 第一个 1 第二个
-1 最后一个 -2 倒数第二个
**指定位置插入**
linsert 键名 after|before 原值 新值
**删除指定元素**
lrem 键名 数量&方向 值 (删除指定数量的指定值,返回删除的数量)
n > 0 从头向尾搜索,删除 n 个元素
n < 0 从尾向头搜索,删除 n 的绝对值个元素
n = 0 删除所有指定值得元素
------
**提取链表中信息**
lindex 键名 下标 (提取列表中指定下标的元素的值)
llen 键名 (获取列表的长度)
**设置链表信息**
lset 键名 下标 内容 (设置指定下标内容,返回ok)
**删除元素(首尾)**
lpop 键名 (左边删除一个元素,返回被删除的元素)
rpop 键名 (右边删除一个元素,返回被删除的元素)
ltrim 键名 起始下标 截止下标 (截取指定首尾下标的元素)
rpoplpush 键名 源队列 目标队列 (从源队列右边移除最后一元素, 放入一个另一个队列的首部)
eg:
127.0.0.1:6379> lrange list 0 -1
7
6
5
4
3
127.0.0.1:6379> lrange rlist 0 -1
1
2
3
4
5
6
127.0.0.1:6379> rpoplpush list rlist
3
127.0.0.1:6379> lrange rlist 0 -1
3
1
2
3
4
5
6
127.0.0.1:6379> lrange list 0 -1
7
6
5
4
<hr/>
set 集合(string类型的无序集合,成员唯一)
集合中包含交集,并集,差集
(适用于推荐算法的实现)
####4.set命令
sadd 集合名 元素1 元素2 元素3 ... (将一个或多个成员元素添加入集合)
smembers 集合名 (显示集合中所有的子元素)
srem 集合名 元素1 元素2 ... (删除指定集合中一个或多个元素)
spop 集合名 (随机删除一个元素,并且返回删除的元素名)
sismember 集合名 元素 (判断指定元素是否在集合中,返回0/1)
scard 集合名 (统计集合元素的个数)
smove 来源集合 目标集合 元素 (将一个集合中的元素移动到另一个集合)
srandmember 集合名 [count] (返回一个或指定个随机元素组成的集合)
##### set 无序集合
1. **差集**
sdiff 集合1 集合2
返回 集合1 集合2 的差集 以集合1 为主
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd s85 1 2 3 4 5 6 7
(integer) 7
127.0.0.1:6379> sadd s86 6 7 8 9
(integer) 4
127.0.0.1:6379> sdiff s85 s86
1) “1”
2) “2”
3) “3”
4) “4”
5) “5”
127.0.0.1:6379> sdiff s86 s85
1) “8”
2) “9”
127.0.0.1:6379> sdiffstore diff_s s85 s86
(integer) 5
127.0.0.1:6379> smembers diff_s
1) “1”
2) “2”
3) “3”
4) “4”
5) “5”
127.0.0.1:6379>
------
2. **并集**
sunion 集合1 集合2 并集
127.0.0.1:6379> sunion s85 s86
1) “1”
2) “2”
3) “3”
4) “4”
5) “5”
6) “6”
7) “7”
8) “8”
9) “9”
127.0.0.1:6379> sunionstore uni_s s85 s86
(integer) 9
127.0.0.1:6379> smembers uni_s
1) “1”
2) “2”
3) “3”
4) “4”
5) “5”
6) “6”
7) “7”
8) “8”
9) “9”
127.0.0.1:6379>
------
3. **交集**
sinter 集合1 集合2 交集
127.0.0.1:6379> smembers s85
1) “1”
2) “2”
3) “3”
4) “4”
5) “5”
6) “6”
7) “7”
127.0.0.1:6379> smembers s86
1) “6”
2) “7”
3) “8”
4) “9”
127.0.0.1:6379> sinter s85 s86
1) “6”
2) “7”
127.0.0.1:6379> sinter s86 s85
1) “6”
2) “7”
127.0.0.1:6379> sinterstore inter_s s85 s86
(integer) 2
127.0.0.1:6379> smembers inter_s
1) “6”
2) “7”
127.0.0.1:6379>
------
4. store 存储结果集合
sdiffstore 新集合 集合1 集合2
把返回结果 写入新集合
sinterstore 新集合 集合1 集合2
把返回结果 写入新集合
sunionstore 新集合 集合1 集合2
把返回结果 写入新集合
smove 原集合 目标集合 值
把指定的值 从源集合 中 移动到目标集合
------
##### zset 有序集合
**区别**: set 无序 zset 有序
有序是如何有序的?
使用 "分数" .
有序集合 给每一个元素 设定 "分数"
zadd key 分数1 v1 分数2 v2 分数3 v3 ......
zrange 集合 起始下标 截止下标 [withscores]
0 第一个 -1 最后一个
得到所有 0 -1
返回集合中 指定下标区间内元素
如果 加了 withscores 则 连分数一起返回
按照分数排序 从小到大
127.0.0.1:6379> zadd z85 120 yinkai 160 jq 170 xin 175 kui
(integer) 4
127.0.0.1:6379> zrange z85 0 -1
1) “yinkai”
2) “jq”
3) “xin”
4) “kui”
127.0.0.1:6379> zrange z85 0 -1 withscores
1) “yinkai”
2) “120”
3) “jq”
4) “160”
5) “xin”
6) “170”
7) “kui”
8) “175”
------
zrevrange 集合 起始下标 截止下标 [withscores]
0 第一个 -1 最后一个
得到所有 0 -1
返回集合中 指定下标区间内元素
如果 加了 withscores 则 连分数一起返回
按照分数排序 从大到小
------
zrem key 值1 [值2 .....]
删除 集合中 指定的值
zincrby key 增量 值
给 集合中指定值得分数(score) 加上 增量
zrank key 值
返回集合中指定值的下标 按照 (score)从小到大排序
zrevrank key 值
返回集合中指定值的下标 按照 (score)从大到小排序
zcount key 起始分数 截至分数
统计 该集合 score 在给定分数区间内的元素个数
zcard key
返回集合元素个数
zinterstore key 取交集集合个数 集合1 集合2 [集合3....]
交集 存新集合
zunionstore 取并集集合个数 集合1 集合2 [集合3....]
并集存新集合
总结 :
1. **区别**
是否允许重复元素 是否有序 有序的实现方式 应用场景
集合 F F null 社交 好友推荐等
有序集合 F T 分数 排行榜
列表 T T 索引下标 队列 抽奖
2. **使用场景**
string
计数器
系统缓存(把对象 数组 串行化再存入string)
list
队列
最新N个数据
实时分析正在发生的情况
数据统计
防止垃圾邮件(set)
hash
用户数据
set
unique 操作 获取某段时间内所有数据的排重值
共同好友 推荐好友
统计网站访问的所有 独立IP(唯一性)
实时反垃圾系统
zset
排行榜(取 top N操作)
需要 精准设定过期的应用(时间戳 score )
------
公司想要使用reids?怎么做?
第一步: 安装配置 redis
第二步: 安装配置 phpredis
第三步: 得知道基本的语句 5种数据类型 CURD操作