一.简介
1.1 redis简介
redis是开源免费的高性能key-value数据库,属于NoSQL数据库。
redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
redis支持数据的备份,即master-slave模式的数据备份。
redis与其他key-value缓存产品有如下三个特点:
(1)性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
(2)丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
(3)原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。
(4)丰富的特性 – Redis还支持 发布订阅消息, 通知, key 过期等等特性。
1.2 redis安装
下载地址(windows版本)
https://github.com/MicrosoftArchive/redis/releases
完整版本下载地址(Linux):
http://download.redis.io/releases/
Redis Desktop Manager(可视化连接工具)
下载地址:https://www.cr173.com/soft/73300.html
1.3 启动
1.先启动服务端
命令:redis-server.exe redis.windows.conf
2.启动客户端
命令:redis-cli.exe
二.redis数据结构,命令
keys * : 查询所有的键
type key : 获取键对应的value的类型
del key:删除指定的key value
2.1 String
string:字符串类型是非常常见的一种类型,Redis中的字符串类型和很多编程语言里的字符串类型差不多,但相对要灵活些。
set key value 设置key对应的值为string类型的value mset key1 value1 [key2 value2...] 一次设置多个key get key 获取指定key的value值 mget key1 [key2 ...] 一次获取多个key的value值 incr key 对key的值做自增操作,返回新的值 decr key 对key的值做自减操作,返回新的值 incrby key integer 对key的value加指定integer decrby key integer 对key的value减指定integer append key value 给指定key的字符串追加value substr key start end 截取key,从start(包含)到end(包含)。注意只是返回截取的value,源value并没改变
2.2 list
list:列表可以看作是个双端队列,可以在列表两端推入和弹出元素。
lpush key value: 将元素加入列表左表 rpush key value:将元素加入列表右边 lrange key start end :范围获取 lpop key: 删除列表最左边的元素,并将元素返回 rpop key: 删除列表最右边的元素,并将元素返回
2.3 hash
hash:Redis中的散列可以让用户将多个键值对存储到一个Redis键中
存储: hset key field value 获取: hget key field 获取所有的field和value: hgetall key 删除: hdel key field
2.4 set
set : 不允许重复元素,集合最显著的特点应该就是其中的元素互不相同。
存储:sadd key value 获取:smembers key:获取set集合中所有元素 删除:srem key value:删除set集合中的某个元素
2.5 sortedset
sortedset:有序集合类型,不允许重复元素,且元素有顺序
存储:zadd key score value 获取:zrange key start end [withscores] 删除:zrem key value
三.redis持久化
3.1 RDB
在默认情况下,Redis将内存数据库快照保存到dump.rdb的二进制文件中。
可以对Redis进行设置,让它在“N秒内数据集至少有N个改动”, 这一条件被满足时,自动保存一次数据集。比如说:让Redis满足“60秒内至少有1000个键被改动”这一个条件时,自动保存一次数据集。
3.2 AOF
开启AOF持久化
appendonly yes
appendfsync always:每次有新命令追加到aof文件时就执行一个持久化,非常慢但是安全
appendfsync everysec:每秒执行一次持久化,足够快(和使用rdb持久化差不多)并且在故障时只会丢失1秒钟的数据
appendfsync no:从不持久化,将数据交给操作系统来处理。redis处理命令速度加快但是不安全。
四.JavaWeb连接
核心代码
@ResponseBody @RequestMapping("/list") public Object listUser() { if (null != redisUtil.get("user")) { return redisUtil.get("user"); } List<User> userList = userService.list(); String userStr = JSONObject.toJSONString(userList); redisUtil.set("user", userStr, 10); return userStr; }
可以看到已经set了:
10s内,再次请求时,是从缓存中获取的数据: