redis学习整理

redis启动
redis 根目录:
redis-server.exe redis.windows.conf
redis-cli.exe -h 127.0.0.1 -p 6379

key-value数据库
1.支持数据的持久化
2.不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
3.支持数据的备份,即master-slave模式的数据备份。

redis 配置:
可以通过config 命令来查看或设置配置项
config get “对象”
config set “对象名” “设置的值”

String(字符串)
set key value
get key
注意:一个键最大能存储512MB。
Hash(哈希)
hmset hashName keyName1 value1 ,keyName2 value2 …
hget hashName keyName .
每个 hash 可以存储 232 -1 键值对(40多亿)。
List(列表)
有序,按照插入顺序排列。
添加 列表名字 值
lpush ListName value1
lpush ListName value2
… … …
添加成功之后会返回现在集合里面有多少个键值对。
取值:先进后出,栈。
lrange ListName start stop

Set(集合): 不允许重复可以用来去重
Redis的Set是string类型的无序集合
sadd 命令:用于添加
添加成功之后返回 1
失败 返回 0 (失败,有可能是已经存在重复添加
set 的 java 写法:
void setAdd(){
Jedis jedis = new Jedis("localhost");
jedis.sadd("123","123");
jedis.sadd("123","456","789");//这样直接就是多个成员了取出set 集合里面的值
}

smembers key :用于查看刚刚set 添加的键值
java 写法:
void setGet() {
Jedis jedis = new Jedis("localhost");
Set<String> get = jedis.smembers("123");// 先获取集合
Iterator<String> iterator = get.iterator();//迭代器
while (iterator.hasNext())//遍历输出
{
System.out.println(iterator.next());
}
}

zset(sorted set:有序集合)

Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。

set 集合
zadd 命令
添加元素到集合,元素在集合中存在则更新对应score
添加:
zadd key score member
java 实现 zset:

// 按照分数排序,分数可以重复,成员不可以重复``
Jedis jedis = new Jedis("localhost");
jedis.zadd("456",0,"189");``
jedis.zadd("456",5,"289");``
jedis.zadd("456",3,"389");``

查询:
zrange key start stop
java 实现zset 查询:
Jedis jedis = new Jedis("localhost");
Set<String> zset = jedis.zrange("456",0,2);
//迭代遍历
Iterator<String> iterator = zset.iterator();
while (iterator.hasNext())
{
System.out.println(iterator.next());
}
** Redis HyperLogLog 基数**
用来计数,不会计数重复的数,也就是说不会保存数据本身,只是计数。

PFADD key value // 只是计数,value 不会保
java: 实现基数计数
Jedis jedis = new Jedis("localhost");
jedis.pfadd("147","123","456");
jedis.pfadd("147","124");
jedis.pfadd("147","258");

PFCOUNT key // 获取基数
java: 实现获取基数
jedis.pfcount("147")
~~PFMERGE destkey sourcekey [sourcekey …] // 合并两个 ~~

Redis 发布订阅
Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息订阅者(sub)接收消息。
创建和订阅频道

SUBSCRIBE redisChat

java : 实现创建频道

 //获取一个redis 实例
 Jedis jedis = new Jedis("localhost");
 // 创建一个频道,通过继承 jedisPubSub 类,继承之后可以选择性的重写某些方法
JedisPubSub jedisPubSub = new JedisPubSubLesenter();

// 订阅这个频道,相当于客户端给这个频道命名了,服务端只需要给个名字的频道发送消息就可以了
jedis.subscribe(jedisPubSub,"redio");

发布消息

PUBLISH redisChat

java: 实现订阅的发布消息

Jedis jedis = new Jedis("localhost");
// 发送给指定频道
// 前面客户端已经命名了一个频道叫做 redio
jedis.publish("redio","the frste message!");
jedis.publish("redio","the second message!");

Redis 事务

Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:
批量操作在发送 EXEC 命令前被放入队列缓存。
收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。

一个事务从开始到执行会经历以下三个阶段:

开始事务。
java: 实现事务的开始:
     Jedis jedis = new Jedis("localhost");
      // 开始事务
        Transaction transaction =  jedis.multi();
        //命令入队。
        transaction.set("mu","123");
                transaction.get("mu");

执行事务。
java: 实现执行事务:
              List<Object> list = transaction.exec();
               for(int i =0 ; i < list.size() ; i++)
                   {//打印执行结果
                       System.out.println(list.get(i));
                    }

实例
以 MULTI 开始一个事务,由 EXEC 命令触发事务, 一并执行事务中的所有命令:
序号 命令及描述:

序号功能
1DISCARD 取消事务,放弃执行事务块内的所有命令
2EXEC 执行所有事务块内的命令。
3MULTI 标记一个事务块的开始
4UNWATCH 取消 WATCH 命令对所有 key 的监视。
5WATCH key [key …] 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。

Redis 脚本
redis是单进程、单线程执行脚本。
Redis 脚本使用 Lua 解释器来执行脚本。 Redis 2.6 版本通过内嵌支持 Lua 环境。执行脚本的常用命令为 EVAL。
// 设置key 时间 要大写
EVAL script numkeys key [key …] arg [arg …]

java 实现 redis 脚本:
 Jedis jedis = new Jedis("localhost");
Object eval = jedis.eval("return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}", 2, "key1", "key2", "frst", "second");

// 管道,脚本,事务 的区别:
https://blog.csdn.net/KingCat666/article/details/77942830

redis Evalsha 命令基本语法如下:
redis 127.0.0.1:6379> EVALSHA sha1 numkeys key [key …] arg [arg …]
参数说明:
sha1 : 通过 SCRIPT LOAD 生成的 sha1 校验码。

例如:
   redis 127.0.0.1:6379> SCRIPT LOAD "return 'hello moto'"
  "232fd51614574cf0867b83d384a5e898cfd24e5a"
参数功能
numkeys用于指定键名参数的个数。
key [key …]: 从 EVAL 的第三个参数开始算起,表示在脚本中所用到的那些 Redis 键(key),这些键名参数可以在 Lua 中通过全局变量 KEYS 数组,用 1 为基址的形式访问( KEYS[1] , KEYS[2] ,以此类推)。
arg [arg …]:附加参数,在 Lua 中通过全局变量 ARGV 数组访问,访问的形式和 KEYS 变量类似( ARGV[1] 、 ARGV[2] ,诸如此类)。
序号功能
1EVAL script numkeys key [key …] arg [arg …] 执行 Lua 脚本
2EVALSHA sha1 numkeys key [key …] arg [arg …] 执行 Lua 脚本。
3SCRIPT EXISTS script [script …] 查看指定的脚本是否已经被保存在缓存当中。
4SCRIPT FLUSH 从脚本缓存中移除所有脚本。
5SCRIPT KILL 杀死当前正在运行的 Lua 脚本。
6SCRIPT LOAD script 将脚本 script 添加到脚本缓存中,但并不立即执行这个脚本。

Redis 连接
Redis 连接命令主要是用于连接 redis 服务。
AUTH “password” // 连接redis 服务,
查看是否 连接成功

 redis 127.0.0.1:6379> PING
  PONG  // 成功

Redis 连接命令
下表列出了 redis 连接的基本命令:
序号 命令及描述

序号功能
1AUTH password 验证密码是否正确
2ECHO message 打印字符串\
3PING 查看服务是否运行
4QUIT 关闭当前连接
5SELECT index 切换到指定的数据库

Redis 服务器

Redis 服务器命令主要是用于管理 redis 服务。
Redis 服务器命令

Redis 数据备份与恢复

Redis SAVE 命令用于创建当前数据库的备份。
Save : 该命令将在 redis 安装目录中创建dump.rdb文件。
 Bgsave :创建 redis 备份文件也可以使用命令 BGSAVE,该命令在后台执行。

恢复数据

如果需要恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可
   CONFIG GET dir  : CONFIG GET dir 输出 redis 安装目录

Redis 安全

我们可以通过 redis 的配置文件设置密码参数,这样客户端连接到 redis 服务就需要密码验证,这样可以让你的 redis 服务更安全。
通过以下命令查看是否设置了密码验证:CONFIG get requirepass
 requirepass  参数为空的话,则没有密码:

设置密码:CONFIG set requirepass password
验证密码 :  AUTH password  // 设置了密码就要先验证密码才能执行相应的请求

Redis 性能测试

Redis 性能测试是通过同时执行多个命令实现的。
      redis 性能测试的基本命令如下:
   redis-benchmark [option] [option value]
以下实例同时执行 10000 个请求来检测性能:  redis-benchmark -n 10000  -q

Redis 客户端连接

Redis 通过监听一个 TCP 端口或者 Unix socket 的方式来接收来自客户端的连接,当一个连接建立后,Redis 内部会进行以下一些操作:
首先,客户端 socket 会被设置为非阻塞模式,因为 Redis 在网络事件处理上采用的是非阻塞多路复用模型。
然后为这个 socket 设置 TCP_NODELAY 属性,禁用 Nagle 算法
然后创建一个可读的文件事件用于监听这个客户端 socket 的数据发送
最大连接数
在 Redis2.4 中,最大连接数是被直接硬编码在代码里面的,而在2.6版本中这个值变成可配置的。
maxclients 的默认值是 10000,你也可以在 redis.conf 中对这个值进行修改。   
       查看最大连接数:config get maxclients
       也可以在 redis.conf 中对这个值进行修改。
       .客户端命令
S.N. 命令 描述
1 CLIENT LIST 返回连接到 redis 服务的客户端列表
2 CLIENT SETNAME 设置当前连接的名称
3 CLIENT GETNAME 获取通过 CLIENT SETNAME 命令设置的服务名称
4 CLIENT PAUSE 挂起客户端连接,指定挂起的时间以毫秒计
5 CLIENT KILL 关闭客户端连接

Redis 管道技术

Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。这意味着通常情况下一个请求会遵循以下步骤:
客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。
服务端处理命令,并将结果返回给客户端。
Redis 管道技术可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应。
查看 redis 管道,只需要启动 redis 实例并输入以下命令:$(echo -en "PING\r\n SET runoobkey redis\r\nGET runoobkey\r\nINCR visitor\r\nINCR visitor\r\nINCR visitor\r\n"; sleep 10) | nc localhost 6379

更多相关知识参考下面链接
java 操作 redis:http://www.runoob.com/redis/redis-java.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值