redis从windows到linux

什么是redis

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应用:为热点数据进行加速查询,如微博突然出现了一个热点事件,秒杀买东西,直播,验证码控制等等。

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键

Redis数据类型

一:string类型

(当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

二:hash

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:数据可重复,且有序

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:数据不可重复,且无序

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:数据不可重复,且有序

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作用:表示数据存储的名称

删除指定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列表

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值