redis的使用

redis介绍

REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。
Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。

Redis 与其他 key - value 缓存产品有以下三个特点:
1.Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
2.Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
3.Redis支持数据的备份,即master-slave模式的数据备份。

优势

1.性能极高 – Redis读的速度是110000次/s,写的速度是81000次/s 。
2.丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
3.原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
4.丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

命令

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

redis的常用的命令:
1.del key 该命令用于在 key 存在时删除 key。
2.dump key 序列化给定 key ,并返回被序列化的值。
3.exists key 检查给定 key 是否存在。
4.expire key seconds 为给定 key 设置过期时间,以秒计。
5.keys pattern 查找所有符合给定模式( pattern)的 key 。
6.perist key 移除 key 的过期时间,key 将持久保持。
7.ttl key 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。
8.renamenx key newkey 仅当 newkey 不存在时,将 key 改名为 newkey 。
9.set key value 设置指定 key 的值。
10.get key 获取指定 key 的值。
11. mget key1 [key2..] 获取所有(一个或多个)给定 key 的值。
12. msetnx key value [key value …] 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
13.incr key 将 key 中储存的数字值增一。
14.incrby key increment 将 key 所储存的值加上给定的增量值(increment) 。
15.decr key 将 key 中储存的数字值减一。
16.decrby key decrement key 所储存的值减去给定的减量值(decrement) 。

还有很多命令,但是不是很常用,要用的时候查一下就可以了。
还有就是使用jedis可以再java开发中使用封装好的方法,如果使用的是springboot-redis就更方便了。

使用场景

在很早以前就接触了redis了,但是不知道什么时候使用,一直就只以为存储商品信息就可以了,现在理解更深刻了。

1.保存用户的登陆信息和token令牌,在登陆的时候如果每次将登陆信息和token保存在服务器,那么服务器每次都要在jvm里面建立新的静态对象保存,如果一旦人数多了,保存的对象多了,
那么读取登录信息就会减慢,并且如果用了分布式和微服务,各个集群和服务之间的登录信息共享就会非常困难。

2.计数器,或者是商品的库存,由于库存的操作需要原子性,redis可以很简单的就实现,并且支持分布式。

3.购物车,理由同2,我们可以让key为用户id,value为map,map里面是商品id和数量。

4.数据结构可以使用list类型来实现,如栈,队列,阻塞队列。list使用在微博关注的人的最新动态消息,以及微信公众号的消息列表。

5.set类型可以用来做微信小程序抽奖,也可以是其他抽奖方式,因为抽奖涉及到随机抽选人,redis可以很轻松就实现。还有点赞,收藏,关注等功能,都可以用这种方法实现。

6.手机的附近的人,以及共同关注的人,用redis的集合操作的方法来实现很容易。