Windows Redis 整理

Windows Redis

安装

链接: https://pan.baidu.com/s/1MJnzX_qRuNXJI09euzkPGA 提取码: 2c6w 复制这段内容后打开百度网盘手机App,操作更方便哦

无脑下一步即可

使用

出现错误:

creating server tcp listening socket 127.0.0.1:6379: bind No error

解决方案:

  1. redis-cli.exe
  2. shutdown
  3. exit
  4. redis-server.exe redis.windows.conf

启动:redis-server.exe redis.windows.conf

客户端启动:redis-cli.exe (不修改配置的话默认即可)

​ redis-cli.exe -h 127.0.0.1 -p 6379 -a password

基本文件说明

可执行文件 作用说明
redis-server redis服务
redis-cli redis命令行工具
redis-benchmark 基准性能测试工具
redis-check-aof AOF持久化文件检测和修复工具
redis-check-dump RDB持久化文件检测和修复工具
redis-sentinel 启动哨兵
redis-trib cluster集群构建工具

基础命令

命令 说明
keys * redis允许模糊查询key  有3个通配符 *、?、[]
del key 删除key
exists kxm 判断是否存在
expire key 20 设置过期时间 - 秒
pexpire key 20000 设置过期时间 - 毫秒
move kxm 2 移动key到指定位置库中 2号库
persist key 移除过期时间,key将会永久存在 成功设置返回1 否则返回0
pttl key 以毫秒为单位返回 key 的剩余的过期时间
ttl key 以秒为单位,返回给定 key 的剩余生存时间
randomkey 从当前数据库中随机返回一个 key
rename key newkxy 更改key的名字,如果重复了会覆盖
renamenx kxm key 仅当 newkey 不存在时,将 key 改名为 newkey
type key 返回 key 所储存的值的类型
select 0 选择第一个库
ping 返回PONG 表示连接正常
quit 关闭当前连接

字符串命令

命令 说明
set key aaa 设置指定 key 的值
get key 获取指定 key 的值
getrange key 0 1 返回 key 中字符串值的子字符 包含 0 和 1 包含关系
getset key aaaaaaaa 将给定 key 的值设为 value ,并返回 key 的旧值(old value)
mget key kxm 获取所有(一个或多个)给定 key 的值
setex test 5 "this is my test" 将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)
setnx test test 只有在 key 不存在时设置 key 的值 (用于分布式锁)
strlen test 返回 key 所储存的字符串值的长度
mset key1 "1" key2 "2" 同时设置一个或多个 key-value 对
msetnx key3 "a" key2 "b" 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在 其中一个失败则全部失败
incr key 将 key 中储存的数字值增一 -> key的值 比如为 数字类型字符串 返回增加后的结果
incrby num 1000 将 key 中储存的数字值增指定的值 -> key的值 比如为 数字类型字符串 返回增加后的结果
decr key 同 -> 减一
decrby num 500 同 -> 减指定值
append key 1123123 如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾 返回字符串长度

哈希(Hash)命令

命令 说明
hdel key field1 [field2] 删除一个或多个哈希表字段
hexistskey field 查看哈希表 key 中,指定的字段是否存在
hget key field 获取存储在哈希表中指定字段的值
hgetall key 获取在哈希表中指定 key 的所有字段和值
hincrby hash yeary 1 为哈希表 key 中的指定字段的整数值加上增量 increment
hkeys hash 获取所有哈希表中的字段
hlen hash 获取哈希表中字段的数量
hmget hash name year 获取所有给定字段的值
hmset hash name "i am kxm" year 24 同时将多个 field-value (域-值)对设置到哈希表 key 中
hset hash name kxm 将哈希表 key 中的字段 field 的值设为 value
hsetnx key field value 只有在字段 field 不存在时,设置哈希表字段的值
hvals hash 获取哈希表中所有值
hexists hash name 是否存在

编码: field value 值由 ziplist 及 hashtable 两种编码格式

字段较少的时候采用ziplist,字段较多的时候会变成hashtable编码

列表(List)命令

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)

容量 -> 集合,有序集合也是如此

命令 说明
lpush list php 将一个值插入到列表头部 返回列表长度
lindex list 0 通过索引获取列表中的元素
blpop key1 [key2 ] timeout 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
brpop key1 [key2 ] timeout 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
linsert list before 3 4 在值 3 前插入 4 前即为顶
linsert list after 4 5 在值4 后插入5
llen list 获取列表长度
lpop list 移出并获取列表的第一个元素
lpush list c++ c 将一个或多个值插入到列表头部
lrange list 0 1 获取列表指定范围内的元素 包含0和1 -1 代表所有 (lrange list 0 -1)
lrem list 1 c 移除list 集合中 值为 c 的 一个元素, 1 代表count 即移除几个
lset list 0 "this is update" 通过索引设置列表元素的值
ltrim list 1 5 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除
rpop list 移除列表的最后一个元素,返回值为移除的元素
rpush list newvalue3 从底部添加新值
rpoplpush list list2 转移列表的数据

集合(Set)命令

Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据

命令 说明
sadd set java php c c++ python 向集合添加一个或多个成员
scard set 获取集合的成员数
sdiff key1 [key2] 返回给定所有集合的差集 数学含义差集
sdiffstore curr set newset (sdiffstore destination key1 [key2]) 把set和 newset的差值存储到curr中
sinter set newset 返回给定所有集合的交集
sinterstore curr set newset (sinterstoredestination key1 [key2])
sismember set c# 判断 member 元素是否是集合 key 的成员
smembers set 返回集合中的所有成员
srandmember set 2 随机抽取两个key (抽奖实现美滋滋)
smove set newtest java (smove source destination member) 将 member 元素从 source 集合移动到 destination 集合
sunion set newset 返回所有给定集合的并集
srem set java 删除
spop set 从集合中弹出一个元素
sdiff | sinter | sunion 操作:集合间运算:差集

有序集合(sorted set)命令

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复。

命令 说明
zadd sort 1 java 2 python 向有序集合添加一个或多个成员,或者更新已存在成员的分数
zcard sort 获取有序集合的成员数
zcount sort 0 1 计算在有序集合中指定区间分数的成员数
zincrby sort 500 java 有序集合中对指定成员的分数加上增量 increment
zscore sort java 返回有序集中,成员的分数值
zrange sort 0 -1 获取指定序号的值,-1代表全部
zrangebyscore sort 0 5 分数符合范围的值
zrangebyscore sort 0 5 limit 0 1 分页 limit 0代表页码,1代表每页显示数量
zrem sort java 移除元素
zremrangebyrank sort 0 1 按照排名范围删除元素
zremrangebyscore sort 0 1 按照分数范围删除元素
zrevrank sort c# 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序

发布订阅

开启两个客户端

A客户端订阅频道: subscribe redisChat (频道名字为 redisChat)

B客户端发布内容: publish redisChat "Hello, this is my wor" (内容是 hello....)

A客户端即为自动收到内容, 原理图如下:


命令 说明
pubsub channels 查看当前redis 有多少个频道
pubsub numsub chat1 查看某个频道的订阅者数量
unsubscrible chat1 退订指定频道
psubscribe java.* 订阅一组频道

Redis 事务

Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:

  • 批量操作在发送 EXEC 命令前被放入队列缓存
  • 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行
  • 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中

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

  • 开始事务
  • 命令入队
  • 执行事务

注意:redis事务和数据库事务不同,redis事务出错后最大的特点是,一剩下的命令会继续执行,二出错的数据不会回滚

命令 说明
multi 标记一个事务开始
exec 执行事务
discard 事务开始后输入命令入队过程中,中止事务
watch key 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断
unwatch 取消 WATCH 命令对所有 key 的监视

Redis 服务器命令

命令 说明
flushall 删除所有数据库的所有key
flushdb 删除当前数据库的所有key
save 同步保存数据到硬盘

Redis 数据备份与恢复

Redis SAVE 命令用于创建当前数据库的备份

如果需要恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可。获取 redis 目录可以使用 CONFIG 命令

Redis 性能测试

redis 性能测试的基本命令如下:

redis目录执行:redis-benchmark [option] [option value]

// 会返回各种操作的性能报告(100连接,10000请求)
redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 10000

// 100个字节作为value值进行压测
redis-benchmark -h 127.0.0.1 -p 6379 -q -d 100

Java Redis

Jedis

<!-- jedis -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.8.2</version>
</dependency>

Jedis配置

############# redis Config #############
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=120.79.88.17
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=123456
# 连接池中的最大空闲连接
spring.redis.jedis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.jedis.pool.min-idle=0

JedisConfig

@Configuration
public class JedisConfig extends CachingConfigurerSupport {
<span class="hljs-meta">@Value</span>(<span class="hljs-string">"${spring.redis.host}"</span>)
<span class="hljs-keyword">private</span> String host;

<span class="hljs-meta">@Value</span>(<span class="hljs-string">"${spring.redis.port}"</span>)
<span class="hljs-keyword">private</span> <span class="hljs-keyword">int</span> port;

<span class="hljs-meta">@Value</span>(<span class="hljs-string">"${spring.redis.password}"</span>)
<span class="hljs-keyword">private</span> String password;

<span class="hljs-meta">@Value</span>(<span class="hljs-string">"${spring.redis.max-idle}"</span>)
<span class="hljs-keyword">private</span> Integer maxIdle;

<span class="hljs-meta">@Value</span>(<span class="hljs-string">"${spring.redis.min-idle}"</span>)
<span class="hljs-keyword">private</span> Integer minIdle;

<span class="hljs-meta">@Bean</span>
<span class="hljs-function"><span class="hljs-keyword">public</span> JedisPool <span class="hljs-title">redisPoolFactory</span><span class="hljs-params">()</span></span>{
    JedisPoolConfig jedisPoolConfig = <span class="hljs-keyword">new</span> JedisPoolConfig();
    jedisPoolConfig.setMaxIdle(maxIdle);
    jedisPoolConfig.setMinIdle(minIdle);
    jedisPoolConfig.setMaxWaitMillis(<span class="hljs-number">3000L</span>);
    <span class="hljs-keyword">int</span> timeOut = <span class="hljs-number">3</span>;
    <span class="hljs-keyword">return</span>  <span class="hljs-keyword">new</span> JedisPool(jedisPoolConfig, host, port, timeOut, password);
}

}

基础使用

@RunWith(SpringRunner.class)
@SpringBootTest(classes = KerwinBootsApplication.class)
public class ApplicationTests {
<span class="hljs-meta">@Resource</span>
JedisPool jedisPool;

<span class="hljs-meta">@Test</span>
<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">testJedis</span> <span class="hljs-params">()</span> </span>{
    Jedis jedis = jedisPool.getResource();
    jedis.set(<span class="hljs-string">"year"</span>, String.valueOf(<span class="hljs-number">24</span>));
}

}

SpringBoot redis staeter RedisTemplate

<!-- redis -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

<!-- redis 2.X 更换为commons-pool2 连接池 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值