Redis是一个Nosql数据库,但主要角色是作为分布式缓存使用的,redis存在与内存中,性能极高,读取速度极快,看过很多博客,写的都很专业,但是对于初学者都不易看懂,我就简单分析下redis.
既然redis是一个缓存,那么什么是缓存,因为我们的数据库的并发量都很小,所以当高并发的时间就会导致数据库瘫痪,
如下图为了解决这个问题我们就在服务层和数据库之间加入redis,当我们的查询请求过来时,首先①先去redis缓存中去查询,②如果有我们需要的数据就直接返回,如果没有我们需要的数据,③那么就去数据库查询,④返回给Servcie层,⑤查询到数据后会在缓存中也存一份,当下次在查询这个数据是就不会再去访问数据库,这样我们的数据库压力就减少了。
Redis的数据结构也很丰富,支持 字符串(String),散列(hasher),列表(sets),集合(sets),有序集合(sortedsets),下面我们就介绍一些常用的方法
[root@adminbin]# ./redis-server redis.conf 开启Redis服务
[root@adminbin]# ./redis-cli 开启Redis客户端
127.0.0.1:6379>ping 测试Redis是否正常
PONG
字符串操作
127.0.0.1:6379>set str1 abc 存入一个字符串str1 值为abc
OK 存入成功
127.0.0.1:6379>get str1 获取字符串str1
"abc"
127.0.0.1:6379> keys * 查询所有的key值
1)"str1"
127.0.0.1:6379>incr key1 设置一个key1并加1
(integer)1
127.0.0.1:6379>incr key1 在加1
(integer)2
127.0.0.1:6379>decr key1 减1
(integer)1
127.0.0.1:6379>decr key1 在减1
(integer)0
127.0.0.1:6379>decr key1 在减1
(integer)-1
127.0.0.1:6379>get key1 获取当前key1
"-1"
127.0.0.1:6379>del str1 删除key为str1的返回1为成功
(integer)1
散列操作
127.0.0.1:6379>hset hash1 field 1 存入一个hash1 { [field,1]…… }列表
(integer)1 返回值为1表示成功
127.0.0.1:6379>hset hash1 field1 2
(integer)1
127.0.0.1:6379>hset hash1 field 2 修改hash1的元素field的值为2
(integer)0 返回0表示修改成功
127.0.0.1:6379>hget hash1 field 获取hash1的元素field的值返回2
"2"
127.0.0.1:6379>hkeys hash1 获取hash1的所有key
1)"field"
2)"field1"
127.0.0.1:6379>hvals hash2 获取hash1的所有value
1)"1"
2)"2"
127.0.0.1:6379>hgetall hash1 获取hash1的所有 key value
1)"field"
2)"1"
3)"field1"
4)"2"
列表操作
127.0.0.1:6379>lpush list 1 2 3 4 5 6 从左边添加,顺序为6,5,4,3,2,1
(integer)6
127.0.0.1:6379>rpush list a b c d e 从右边添加,顺序为a,b,c,d,e
(integer)11
127.0.0.1:6379>lrange list 0 -1 获取key为list的所有元素
1) "6"
2) "5"
3) "4"
4) "3"
5) "2"
6) "1"
7) "a"
8) "b"
9) "c"
10)"d"
11)"e"
127.0.0.1:6379>lpop list 从左边取元素,取出来后集合中就没有了
"6" 返回取出的元素
127.0.0.1:6379>lrange list 0 -1 遍历集合
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
6) "a"
7) "b"
8) "c"
9) "d"
10)"e"
Set集合操作 set无序 自动去重
127.0.0.1:6379>sadd set a b c d a a a 存入key为set 值为a b c d a a a 的集合
(integer)4
127.0.0.1:6379>smembers set 查询set集合中的所有元素,无序不重复的
1)"c"
2)"d"
3)"a"
4)"b"
127.0.0.1:6379>sadd seta a b c d e 存入集合seta值为a b c d e
(integer)5
127.0.0.1:6379>sadd setb d e f g h 存入集合seta值为d e f g h
(integer)5
127.0.0.1:6379>sdiff seta setb 取seta与setb的差集即seta特有的
1)"a"
2)"b"
3)"c"
127.0.0.1:6379>sinter seta setb 取seta与setb的交集,即重复的
1)"d"
2)"e"
127.0.0.1:6379>sunion seta setb 取seta与setb的并集,即合并两个所有元素
1)"g"
2)"d"
3)"c"
4)"a"
5)"b"
6)"e"
7)"h"
8)"f"
127.0.0.1:6379>smembers seta 查询seta的所有元素
1)"a"
2)"d"
3)"c"
4)"b"
5)"e"
127.0.0.1:6379>srem seta a 删除key为seta的元素a成功返回1
(integer)1
127.0.0.1:6379>smembers seta 查询seta的所有元素a已经被删除
1)"d"
2)"c"
3)"b"
4)"e"
有序集合的操作
存入key为zet的集合 每个元素都设置自己的分数取出时会按照分数由小到大排序
127.0.0.1:6379>zadd zset 1 a 2 b 5 c 3 d 1 g
(integer)5
127.0.0.1:6379>zrange zset 0 -1 取出zset的所有元素
1)"a"
2)"g"
3)"b"
4)"d"
5)"c"
127.0.0.1:6379>srem zset a 删除指定元素a
(integer)1 返回1表示成功
127.0.0.1:6379>zrange zset 0 -1
1)"g"
2)"b"
3)"d"
4)"c"
127.0.0.1:6379>zrevrange zset 0 -1 从大到小取值
1)"c"
2)"d"
3)"b"
4)"g"
给定义的缓存设置过期时间
127.0.0.1:6379>expire list 100 定义过期时间为100秒
(integer)1
127.0.0.1:6379>ttl list 查询还有多长时间过期
(integer)91
127.0.0.1:6379>ttl list
(integer)90
127.0.0.1:6379>ttl list
(integer)89
127.0.0.1:6379>ttl seta 返回-1代表已经持久化
(integer)-1
127.0.0.1:6379>ttl list5 查询不存在的返回-2
(integer)-2
上面这些事最基本的一些并且常用的操作,由于篇幅过长,先到此为止,下次会提下redis的驱逐机制,集群,持久化方案以及劣势等等,欢迎私信交流,这些东西多练练就很简单。