本帖最后由 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]