赞
踩
redis是一个高性能的通过C语言开发的key-value数据库,是为了解决高并发,高扩展的NOSQL(非关系)类型数据库,支持的数据类型包括,String,list,hash,set和Zset。 redis把数据都存储在内存中以提高读取效率,周期性(如 y=sinx T= 2Π)的进行数据写入磁盘。
NoSQL:是对关系型数据库做补充,且离不开关系型数据库。 是用于解决海量用户和高并发存在的问题,好处有:1.可以减少磁盘I/O的次数 2.可以只存储数据,而不存储数据之间的关系。
redis特征:
1.数据之间没有相互关系
2.内部采用单线程机制进行工作
3.高性能
4.可以支持多种数据类型。
5.持久化支持,比如断电之后虽然在内存中,但是可以进行数据恢复。
redis应用:为热点数据进行加速查询,如微博突然出现了一个热点事件,秒杀买东西,直播,验证码控制等等。
1.启动redis(采用3.2.100)
出现相关界面
port是redis的端口号,如果想要启动多个redis就需要修改端口号,pid是这个redis的名称,每次启动都会有不同的redis实例化对象
然后启动redis客户端对redis进行操作,默认主机是localhost(127.0.0.1)
2.redis的基本操作
redis操作采用命令行形式:
分为功能性,清屏性,帮助查询命令,退出指令
1.功能性
添加信息命令:set key value 如:set name liming
查询信息命令: get key 如:get name(key不存在就会返回nil)
2.清除屏幕信息指令:
clear
3.帮助查询信息指令:用于查看一个命令或者群组的具体使用方式
help 命令名称:如 help get
第一行是:使用命令的格式
第二行是:命令的具体说明
第三行是:版本号
第四行是:所属群组
help @群组 :如 help @string,help @list…
4.退出命令
quit,exit,esc键
(当value是数字时,也是字符串类型,但是可以进行加减乘除操作)
1.基本操作
***添加/修改:
单个数据:set key value
多个数据:mset key value key value .......
获取:
单个数据:get key
多个数据:mget key key key....
删除:
单个数据:del key,删成功后会返回删除记录的条数
多个数据:del key key key......,删成功后会返回删除记录的条数
获取字符串长度:
strlen key
追加信息到原始信息后部:
append key value 如果不存在这个key,就会新建
mset与set的比较
如果需要存放10条数据,set所花费的时间为 发送*10+响应*10+处理*10;
mset所花费的时间为:发送*1+响应*10+处理*1,明显快于set。
但是,当数据有1亿条或者非常大时,就需要对这1亿条数据进行合理分割,因为redis是单线程的,会在请求,处理,响应的时候发现堵塞的情况,就会影响处理的效率和时间。
当mysql表中字段数据太多时,就需要进行分表操作,但是不同表的主键ID是自增的,这就导致主键ID可能会重复,交给redis管理就可以解决这些问题
设置数值数据增加指定返回的值(只能对数值进行处理)
incr key 对key的value进行加一
incrby key increment 对key增加指定的值 如:incryby age 10
incrbyfloat key increment 对key增加指定的小数值 如:incryby age 10.5
设置数值数据减少指定返回的值
decr key 对key的value进行减一
decrby key increment 对key减少指定的值 如:decryby age 10
当需要对某种操作进行限制的时候,如给一个明星投票,只限制小时投一次,4小时以后才能继续投,需要限制投票操作就可以用redis
给数据指定生命周期
setex key seconds value 给key的数据value设置以秒为单位的生命周期
psetex key milliseconds value 给key的数据value设置以毫秒为单位的生命周期
业务场景的具体使用
如在微博中每个用户都在查看一个明星的关注数 粉丝数,如何提高查询和访问效率
解决办法,在redis中设置明星的用户信息,把id和字段属性作为key,数据作为value后台及时刷新即可。
key | value |
---|---|
user: id:111:fans | 666666 |
user: id:111:focus | 2222 |
key----------value(filed-value,
filed-value,
filed-value,
..............)
存储格式也是key-value,但是这个value我们可以把它当作存储了一个 实体类对象,如 存储一个user对象,key可以时user的主键,value里面有name password,age,sex等属性。
1.基本操作
添加/修改数据
单个操作:hset key filed value 给key中添加一个名为filed的value数据
多个操作:hmset key filed value filed value.....
根据是否有值来存入数据
hsetnx key fileld value 如果当前的filed中没有值就把value存入,如果有值就什么都不做
获取数据
单个操作:hget key filed 获取key中,名称为filed的数据
多个操作:
hmget key filed filed .....
hgetall key 获取key中全部的数据 ,如果fileld过多,此方法效率非常低。
删除数据
hdel key filed filed filed ....... 删除key中,名为field的数据
获取哈希表中字段的个数
hlen key
查找哈希表中是否存在指定的字段
hexists key filed
获取hash表中所有的字段名和字段值
hkeys key
hvals key
给指定的数值数据增加指定的值
hincrby key fileld increment 给名为key的hash表中字段名为fileld的字段属性增加一个increment
如:hincrby user age 10
hincrbyfloat key fileld increment
hash类型应用场景
淘宝网站购物车的实现
一 用于存放用户的购买信息
1.一个用户对应一个购物车,把用户id作为key
2.一个购物车里有多个物品,把物品编号作为fileld
3.一个物品可以购买多个,把物品数量作为value
二用户存放商品的具体信息
1.某一类商品对应一个hash,把商品类型id作为key
2.把商品编号作为fileld
3.把商品的具体信息用json字符串存入value中。
对应操作需要的命令
添加 hset hmset
查看 hget hmget hgetall hlen hexists hkeys hvals
修改 hset incrby incrbyfloat
删除/清空 hdel
list底层采用双向链表进行构造,可以存储多个数据,并且可以体现数据 ***进入存储空间的顺序***
1.基本操作
***添加/修改数据***
lpush key value value value..... 给名为key的list从 ***左边*** 添加一个或多个数据
rpush key value value value...给名为key的list从***右边***修改一个或多个数据
获取数据
lrange key start stop 从左边开始获取key中从start到stop的value
lindex key index
llen key
获取并且移除数据
lpop key 从左边第一个位置移除一个value并获取
rpop key 从右边第一个位置移除一个value并获取
规定时间内获取多个lisit表中的一个数据并且移除数据
blpop key key.......timeout 在timeout的时间内,若干个list表中的其中一个出现了数据就直接移除,如果同时出现,就移除排在在前面的list表,如果超时就返回空。
brpop key key......timeout
移除指定的数据
lrem key count value 从key中移除count个数据value的值
如 lrem age 3 50 从 age中移除3个数据为50的值
业务场景
有顺序又有多个数据。
如朋友圈点赞和评论
点赞队列就是一个list,里面的点赞人名称就是value。
评论队列也是一个list,里面的评论内容就是value。
set要求有1.存储大量数据
2.提供更高效的查询效率,比list双向链表查询快。
set模型
set模型采用hash的模型,但是把hash中fileld用来存储数据,value变成空。
1.基本操作
添加数据
sadd key member member.... 给名为key的set表中添加一个或者多个member数据
获取全部数据
smembers key
删除数据
srem key member member...
获取set的数据总量.
scard key 获取名为key的set表中一共有的数据条数。
判断set集合中是否存在指定的数据
sismember key member 如果有就返回1,没有就返回0
随机获取set集合中的指定数量的数据
srandmember key count
随机获取set集合中的指定数据,并且移除
spop key count
业务场景:随机推送类的信息检索,如新闻,歌曲,旅游路线
如你最开始玩某一个application的时候,会让你选择兴趣爱好,但是后期会随机推送其他的热点set集合到你的set集合中,然后一起展现给你,如果你喜欢就存入你的set,不喜欢就不存入。
求多个集合的交,并,差集
sinter key1 key2 .....
sunion key1 key2....
sduff key1 key2.....
求多个集合的交,并,差集并且存储到指定的集合当中
sinterstore destination key1 key2.... destination是值指定的集合中,
如 sinterstore u3 u1 u2,就是把u1和u2中都有的数据存入u3中
sunionstore destination key1 key2...
sduffstore destination key1 key2....
将指定数据从原来的集合中移动到另一个集合
smove source destination member
业务场景
QQ 微信需要推送你可能认识的朋友的时候就可用到这些操作。如可以从好友A出发,获取到A的好友B的好友信息列表。
sort set 是在set的基础上添加了可排序字段score。
1.基本操作
添加数据
zadd key score1 member1 score2 member2 ...... score用于指定排序顺序,member用于存放数据
获取数据
zrange key start stop {withscores} 输出start到stop的值,如果有wtihscores机会输出里面的score
如:zrange name 0 -1 输出全部的值(member)
zrange name 0 -1 输出全部的值(member)和用于指定排序的数值(score)
zrevrange key start stop {withscores} 倒序排序。
删除数据
zrem key member
按条件获取数据
查询score字段范围在srart-stop的所有memeber值
如果添加withscores,也查询出排序字段的score值,
如果添加limit,表示从min~max中查询出指定返回的数据记录。
zrangebyscore key min max {withscores} {limit}
如:zrangebyscore price 20 80 limit 0 3
zrevrangebyscore key min max {withscores} {limit}
按条件删除数据
删除索引从start~stop的所有memeber值
zremrangebyrank key start stop
删除score字段范围在min-max的所有memeber值
zremrangebyscore key min max
注意:
min、max用于限定搜索查询的条件 min<score<max
start、stop用于限定查询的范围,一般是索引
获取集合数据总量:
zcard key
zcount key min max 查看score里min到max的数据一共有几个
交集、并集操作
交集:zinterstore destination numkeys key key ... numkeys表示后面需要提供的集合个数
如 zinterstore name 3 zhangsan wangwu lisi.
并集:zunionstore destination numkeys key key....
业务场景
对资源进行排序,如选出音乐当作最受欢迎的10首歌曲,并对他们进行从小到大排序,还有QQ会员,音乐会员存在的时长。
获取数据对应的索引
zrank key member
zrevrank key member
获取数据对应的score值
zscore key member
给socre值增加指定的数据
zincrby key increment member 给一个sort set中的meber的socre值增加increment
如 zincryby name 1 zhangsan
key作用:表示数据存储的名称
删除指定key
del key
判断key是否存在
exists key
获取key的类型
ytpe key
为key设置生命周期
expire key seconds
pexpire key milliseconds
//以下两个一般在Linix中使用
expireat key timestamp
pexpireat key milliseconds-timestamp
获取key的有效时间
ttl key 不存在返回-2,永久存在返回-1,设置了有效期返回时长
pttl key
把key的生命周期变为永久性
persist key 操作成功返回1,操作失败返回0
查询key
keys pattern
keys * 查询所有的key,返回的是一个list列表
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。