瑞士“军刀“——Redis的原理和基本使用

瑞士“军刀“——Redis的原理和基本使用

Scroll Down

Redis的原理和基本使用

1.nosql

1.nosql与SQL数据库的区别

SQL:关系型数据库,使用的是结构化查询语句,以关系 行列组成二维表
Nosql:非关系型数据库,解决高并发,大数据问题

2.nosql数据库分类

image.png

2.Redis

1.什么是Redis

Redis是一个高性能的、开源的、C语言的非关系型数据库,其内容保存在内存中,Redis是以key-value的形式的nosql,它不遵从SQL的事物、表结构

2.Redis的特点

1.将数据存储在内存中,存取速度快,并发能力强
2.它支持的存储的value类型比memcached更多,string(字符串)、list(链表)、set(集合)、 zset(sorted set --有序集合)和hash(哈希类型)
3.解决了memcached的key-value存储不足,可以对关系型数据库起到补充的作用
4.提供多语言的客户端
5.支持集群,主从同步
6.支持持久化
7.支持订阅与发步

3.Redis与MySQL与memcached的区别

	mysql	redis	memcached
类型	关系型	非关系型	非关系型
存储位置	磁盘	磁盘和内存	内存
存储过期	不支持	支持	支持
读写性能	低	非常高	非常高

Memcached与Redis的相同点不同点:
相同点:二者都为key-value的nosql,存放数据都是在内存中。读写数据高,都支持存储过期
不同点:redis相较于Memcached还支持持久化到磁盘,数据安全更高.redis相较于Memcached支持value类型更多.

4.Redis的常用场景

1.中央缓存
我们经常使用Redis用作查询的缓存,环境数据库访问压力,提高访问速度
2.计数器应用
3.排行榜
4.消息订阅系统
5.设定有效期的应用
短信验证,优惠券

5.redis的操作指令

1.key操作

Keys * 获取所有的key

image.png

Select 0-15  选择其他库
del key  删除key
flushAll 清空整个数据库
FlushDB 清除当前数据库
expire key time 设置过期时间

image.png

ttl key 查看key过期时间
incr key 自增1

image.png

IncrBy key num	将key对应的value增加num

image.png
decr key 自减1
decrBy key num 将key对应的value减少num

2.String操作

存取值:set key value get key
存取多值:mset key1 value1  key2 value2

image.png
image.png

3.list操作

表头存储(插入到表头位置):lpush key vlaue
表尾存储(插入到表尾):rpush key value2
Ipop 移除表头
Rpop 移除表尾
取值:lrange key start stop
移除与value相同的值:lrem key count value
Count>0 从表头第一个
Count<0 从表尾第一个
Count=0 与value所有相同
查找某一个key对应的值:lindex key index

image.png
image.png
image.png
image.png

4.set操作

存值(无序不重复):sadd key  members
取值:smembers key
删除: srem key members

image.png

5.hash操作

存值:hset mapName key value
取值;hget mapName key
批量存值:hmset mapName key1 value1  key1 value1
批量取值:hmget mapName key1,key2
拿到所有keys: 	hkeys mapName
拿到所有value:	hvals mapName
拿到所有内容:  hgetall mapName

image.png
image.png
image.png
image.png
image.png

6.redis的事务

Redis里面的事物属于弱事物,即当部分操作失败,没有失败的操作也会成功

强事务:全部成功 全部失败 -- >对数据要求很严格
弱事务:插入日志
multi  //标记一个事务块的开始。
exec   //执行所有事务块内的命令。
discard //取消事务,放弃执行事务块内的所有命令。

image.png
Redis的事务在执行exec指令时,才批量执行操作,没有回滚操作

7.订阅发布

SUBSCRIBE channel [channel ...] //订阅给定的一个或多个频道的信息。
PUBLISH channel message //将信息 message 发送到指定的频道 channel 。
新开一个客户端订阅tv频道

image.png
发布nihao!消息到tv频道
image.png
订阅tv频道的客户端可以收到nihao!消息
image.png