本帖最后由 hmm1313133 于 2019-4-28 23:13 编辑
目录
目录
Redis简介及安装
Redis基础命令
Redis字符串
Redis哈希
Redis列表
Redis集合
Java操作Redis
前言
首先我们先介绍些Redis的基本概念,Redis是Nosql数据库,是一个key-value存储系统。虽然Redis是key-value的存储系统,但是Redis支持的value存储类型是非常的多,比如字符串、链表、集合、有序集合和哈希。同时Redis支持将数据存入内存,这极大的提高了Redis的数据存储性能,而在一个高负载的服务器中,我们必须思考如何让速度更快,此时将常用数据缓存将不失为一个良好的解决方案,在此,希望我的这篇Redis基础教程能给各位插件/MOD开发的大佬们带来一种新的数据存储思路及解决方案。 请回复/评分一下,您的支持是我最大的支持与鼓励! |
Bone Studio
|
Redis简介及安装
Redis 简介
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
Redis 与其他 key - value 缓存产品有以下三个特点: - Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
Redis 优势
- 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
- 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
- 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
- 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
Redis 数据类型
- String(字符串)string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。
- Hash(哈希)string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。
- List(列表)Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
- Set(集合)Redis的Set是string类型的无序集合。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
Redis 安装 Window 下安装
|
|
Redis基础命令
全局命令
Redis有五种数据结构,它们是键值对的值,对于键来说有一些通用的命令
1. keys *
此命令用来查看所有键。 下面使用set key value插入3对字符串类型的键值对 - 127.0.0.1:6379> set key1 value1
- OK
- 127.0.0.1:6379> set key2 value2
- OK
- 127.0.0.1:6379> set key3 value3
- OK
复制代码keys *会将所有键输出 - 127.0.0.1:6379> keys *
- 1) "key3"
- 2) "key1"
- 3) "key2"
复制代码
2.dbsize
此命令会返回当前数据库中键的总数 - 127.0.0.1:6379> dbsize
- (integer) 3
复制代码
3.exist key
检查键是否存在,如果存在则返回1,不存在则返回0,可配合设置键的生存时间或过期时间来保存各种临时性认证数据等
4.del key [key ....]
删除一个现有建,如果建不存在则返回0,如果成功则返回删除的个数 - 127.0.0.1:6379> del key1
- (integer) 1
- 127.0.0.1:6379> del key1
- (integer) 0
- 127.0.0.1:6379> del key2 key3
- (integer) 2
复制代码 Redis支持添加键值对过期时间,当超过过期时间后,会自动删除键值对
同时可以使用ttl key查询键值对的剩余过期时间
- 127.0.0.1:6379> expire key1 10
- (integer) 1
- 127.0.0.1:6379> ttl key1
复制代码
6.type key 查询键值对的数据类型,如果键值对不存在则返回null- 127.0.0.1:6379> type key1
- string
复制代码 |
|
Redis字符串
常用命令
1.set key value [ex seconds] [px milliseconds] [nx|xx]
设置一个字符串类型的键值对
set命令有几个选项
- ex 设置秒级过期时间
- px 设置毫秒级过期时间
- nx 必须键不存在才可以设置成功
- xx 与nx相反,键必须存在才可设置成功
- 127.0.0.1:6379> set key2 111 ex 10 nx
- OK
- 127.0.0.1:6379> ttl key2
- (integer) 5
复制代码
2.get key 获取值,没啥好说的,也懒得演示
3.mset key value [key value ...]
- 127.0.0.1:6379> mset a 1 b 2 c 3 d 4
- OK
复制代码
4.mget 批量获取值,如果键值对不存在则返回nil
- 127.0.0.1:6379> mget a b c d e
- 1) "1"
- 2) "2"
- 3) "3"
- 4) "4"
复制代码 批量操作命令可以有效提高开发效率,避免多次执行同一命令
5.incr key
incr命令用于对值做自增操作,返回结果分三种情况 - 值不是整数,返回错误
- 值是整数,返回自增后的结果
- 建不存在,返回1
- 127.0.0.1:6379> exists zz
- (integer) 0
- 127.0.0.1:6379> incr zz
- (integer) 1
- 127.0.0.1:6379> incr zz
- (integer) 2
复制代码
不常用命令
- 127.0.0.1:6379> set test hello
- OK
- 127.0.0.1:6379> append test world
- (integer) 10
- 127.0.0.1:6379> get test
- "helloworld"
复制代码
2.strlen ley 返回字符串长度- 127.0.0.1:6379> strlen test
- (integer) 10
复制代码
3.getset key value 返回当前值并设置一个新值
- 127.0.0.1:6379> getset test "hw"
- "helloworld"
- 127.0.0.1:6379> get test
- "hw"
复制代码
4.getrang key start end 获取部分字符串,start为起始位置,end为结束位置,此处不做演示
使用场景
|
|
Java操作Redis
安装
开始在 Java 中使用 Redis 前, 我们需要确保已经安装了 redis 服务及 Java redis 驱动,且你的机器上能正常使用 Java 如何安装 Java redis 驱动? 在你的 classpath 中包含该驱动包 应某大佬意见附maven支持配置: - <dependency>
- <groupId>redis.clients</groupId>
- <artifactId>jedis</artifactId>
- <version>3.1.0-m1</version>
- <scope>provided</scope>
- </dependency>
复制代码
连接到Redis
- import redis.clients.jedis.Jedis;
- public class RedisJava {
- public static void main(String[] args) {
- //连接本地的 Redis 服务
- Jedis jedis = new Jedis("localhost");
- System.out.println("连接成功");
- //查看服务是否运行
- System.out.println("服务正在运行: "+jedis.ping());
- }
- }
复制代码
Redis Java String(字符串) 实例
- import redis.clients.jedis.Jedis;
- public class RedisStringJava {
- public static void main(String[] args) {
- //连接本地的 Redis 服务
- Jedis jedis = new Jedis("localhost");
- System.out.println("连接成功");
- //设置 redis 字符串数据
- jedis.set("hello", "redis");
- // 获取存储的数据并输出
- System.out.println("redis 存储的字符串为: "+ jedis.get("hello"));
- }
- }
复制代码
Redis Java List(列表) 实例
- import java.util.List;
- import redis.clients.jedis.Jedis;
- public class RedisListJava {
- public static void main(String[] args) {
- //连接本地的 Redis 服务
- Jedis jedis = new Jedis("localhost");
- System.out.println("连接成功");
- //存储数据到列表中
- jedis.lpush("site-list", "Baidu");
- jedis.lpush("site-list", "Google");
- jedis.lpush("site-list", "Taobao");
- // 获取存储的数据并输出
- List<String> list = jedis.lrange("site-list", 0 ,2);
- for(int i=0; i<list.size(); i++) {
- System.out.println("列表项为: "+list.get(i));
- }
- }
- }
复制代码
|
|
[groupid=1306]Bone Studio[/groupid]