redis客户端有哪些 redis客户端使用教程
windows宝塔怎么安装redis
在D盘新建文件夹【redis】,右键解压Redis
redis客户端有哪些 redis客户端使用教程
redis客户端有哪些 redis客户端使用教程
>>> r.set('name','lansgg')
ZIP包,把所有文件解压到redis文件夹中。(其他盘符也可以滴^_^)
文件介绍:
redis-check-aof.exe
#aof
redischeck-dump.exe
#dump
redis-cli.exe
#客户端
redis-server.exe
#
#配置文件
运行(快捷键:windows键+R键),输入【cmd】命令,进入DOC作系统窗口。
使用命令【redis-server.exe
redis.windows.conf】,启动redis
服务【如果您没出现如下的错误,直接跳过】。如果您也像我一样出现如下的错误,不用急,总有解决办法滴!
解决办法:
根据提示,是spring.redis.port=6379
maxheap
标识有问题,打开配置文件
maxheap
,然后直接指定好内容即可.
......
##
maxheap
maxheap
.......
然后再次启动,OK,成功.
服务启动成功状态
启动redis服务的doc窗口,不用关闭,因为服务需要一直执行,关闭服务,直接关闭窗口就行。
新打开一个doc窗口,用自带的客户端工具进行测试
命令【redis-cli.exe】,详细作如下。。事例展示了一个基本的读写作,设置set
age
得到key的值。^_^
python怎么测试与redis的连接
,搜索Redis服务端:192.168.100.132;port=6379
Redis 3正式推出了集群技术,解决了多Redis实例协同服务问题。Redis Cluster可以说是服务端Sharding分片技术的体现,即将键值按照一定算法合理分配到各个实例分片上,同时各个实例协调沟通,共同对外承担一致服务。Redis客户端:192.168.100.132
客户端作:
安装python支持redis;
tar zxvf redis-2.9.1.tar.gz
cd redis-2.9.1
python setup.py install
服务端启动redis
/root/redis-2.2.12/src/redis-server
客户端测试:
[root@ ~]# python
>>> import redis
>>> r = redis.Redis(host='192.168.100.132',port=6379,db=0) //#如果设置了密码,就加上password=密码
>>> r.get('name')
>>> r.exists('name') //#看是否存在这个键值
>>> r.delete('name')
1>>> r.dbsize() //#库里有多少key,多少条数据
0L
>>> r.flushdb() // #删除当前数据库的所有数据
>>> r.get('name')
>>> r.set('wm','leo')
>>> r.keys() // # 列出所有键值。
['tt', 'wm', 'name']
>>> r.se() // #强行把数据库保存到硬盘。保存时阻塞
>>> r.dbsize()
3Lkey->age,value->21,get
>>> dir(r)
['RESPONSE_CALLBACKS', '__class__', '__contains__', '__delattr__', '__del__', '__dict__', '__doc__', '__format__', '__getattribute__', '__get__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__set__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_zaggregate', 'append', 'bgrewriteaof', 'bgse', 'bitcount', 'bitop', 'blpop', 'brpop', 'brpoplpush', 'client_getname', 'client_kill', 'client_list', 'client_setname', 'config_get', 'config_resetstat', 'config_set', 'connection_pool', 'dbsize', 'debug_object', 'decr', 'delete', 'dump', 'echo', 'eval', 'evalsha', 'execute_command', 'exists', 'expire', 'expireat', 'flushall', 'flushdb', 'from_', 'get', 'getbit', 'getrange', 'getset', 'hdel', 'hexists', 'hget', 'hgetall', 'hincrby', 'hincrbyfloat', 'hkeys', 'hlen', 'hmget', 'hmset', 'hscan', 'hset', 'hsetnx', 'hvals', 'incr', 'incrby', 'incrbyfloat', '', 'keys', 'lastse', 'lindex', 'linsert', 'llen', 'lock', 'lpop', 'lpush', 'lpushx', 'lrange', 'lrem', 'lset', 'ltrim', 'mget', 'move', 'mset', 'msetnx', 'object', 'parse_response', 'persist', 'pexpire', 'pexpireat', 'ping', 'pipeline', 'psetex', 'pttl', 'publish', 'pubsub', 'randomkey', 'register_script', 'rename', 'renamenx', 'response_callbacks', 'restore', 'rpop', 'rpoplpush', 'rpush', 'rpushx', 'sadd', 'se', 'scan', 'scard', 'script_exists', 'script_flush', 'script_kill', 'script_load', 'sdiff', 'sdiffstore', 'sentinel', 'sentinel_get__addr_by_name', 'sentinel_s', 'sentinel_sentinels', 'sentinel_sles', 'set', 'set_response_callback', 'setbit', 'setex', 'setnx', 'setrange', 'shutdown', 'sinter', 'sinterstore', 'siember', 'sleof', 'embers', 'ove', 'sort', 'spop', 'srandmember', 'srem', 'sscan', 'strlen', 'substr', 'sunion', 'sunionstore', 'time', 'transaction', 'ttl', 'type', 'unwatch', 'watch', 'zadd', 'zcard', 'zcount', 'zincrby', 'zinterstore', 'zrange', 'zrangebyscore', 'zrank', 'zrem', 'zremrangebyrank', 'zremrangebyscore', 'zrevrange', 'zrevrangebyscore', 'zrevrank', 'zscan', 'zscore', 'zunionstore']
这只是一个简单的测试,为了测试redis是否正常工作,我们安装是否正确;
redis客户端管理工具怎么用
# 连接池阻塞等待时间(使用负值表示自带的客户端工具是基于命令行的,比较不直观方便,有另一款基于web的Redis管理工具TreeNMS, 功能有:Redis系统状态查看,数据列表展示; 数据新增,修改,编辑,删除,列表查询过滤作等; Redis数据的在线备份还原。行 5没有限制)在配置文件中设置/etc/redis.conf. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 daemonize no. 参考:PHP程序员,雷雪松的个人博客--redis配置文件参数详解。
linux怎么启动redis
'lansgg'1、首先为了方便管理,将Redis文件中的conf配置文件和常用命令移动到统一文件中。
(1)创建bin和redis.conf文件,“mkdir -p/usr/local/redis/bin;mkdir -p/usr/local/redis/ect”;
2、执行Redis-server 命令,启动Redis 服务。
注意:这里直接执行Redis-server启动的Redis服务,是在前台直接运行的(效果如上图),也就是说,执行完该命令后,如果Liunx关闭当前会话,则Redis服务也随即关闭。正常情况下,启动Redis服务需要从后台启动,并且指定启动配置文件。
3、后台启动redis服务。
(1)首先编辑conf文件,将daemonize属性改为yes(表明需要在后台运行),代码为cd etc/;Vi redis.conf;
(2)再次启动redis服务,并指定启动服务配置文件,代码为redis-server /usr/local/redis/et @param argsc/redis.conf;
4、服务端启动成功后,执行redis-cli启动Redis 客户端,查看端口号。
总结Linux 、Redis 作常用命令
1、Linux:cd /usr是 从子文件夹进入上级文件夹usr;cd local是 从父到子;mv /A /B是 将文件A移动到B;vi usr/local/redis/redis.conf 是编辑redis.conf 文件;
2、Redis:Redis-server /usr..../redis.conf 是启动redis服务,并指定配置文件redis.windows.conf;Redis-cli是 启动redis 客户端;Pkill redis-server 是关闭redis服务;Redis-cli shutdown 是关闭redis客户端:Netstat -tunpl|grep 6379是 查看redis 默认端口号6379占用情况。
更多Redis相关技术文章,请访问Redis教程栏目进行学习!
阿里云数据库redis怎么配置
impo配置文件编辑完成后,我} else {们开始编写代码实现Redis数据的存储和读取。我们创建一个RedisUtil工具类,该类使用@Component注解表示交由Spring管理,StringRedisTemplate是Spring提供的,可以使用@Autowired注解直接注入,接下来便可以书写存和取的代码了。rt ja.util.Set;redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便。问题是这个项目还很新,可能还不足够稳定,
redis有哪些集群模式
System.out.println("resultMap==" + resultMap.keySet());Redis集群一般有5种:
1,主从
2,哨兵模式
3,Redis提供的Cluster集群模式(服务端)
4,Jedis sharding集群(客户端sharding)
5,利用中间件,比如豌豆荚的codis等
介绍完他们的模式,现在来分析一下他们的原理:
主从(Master-Sle Replication):
实现主从(Master-Sle Replication)的工作原理:Sle从服务启动并连接到Master之后,它将主动发送一个SYNC命令。Master服务主收到同步命令后将启动后台存盘进程,同时收集所有接收到的用于修改数据集的命令,在后台进程执行完毕后,Master将传送整个数据库文件到Sle,以完成一次完全同步。而Sle从服务在接收到数据库文件数据之后将其存盘并加载到内存中。此后,Master主继续将所有已经收集到的修改命令,和新的修改命令依次传送给Sles,Sle将在本次执行这些数据修改命令,从而达到最终的数据同步。
如果Master和Sle之间的链接出现断连现象,Sle可以自动重连Master,但是在连接成功之后,一次完全同步将被自动执行。
主从配置
修改从的配置文件:sleof ip port
如果设置了密码,就要设置:auth -password
哨兵模式:
该模式是从Redis的2.6版本开始提供的,但是当时这个版本的模式是不稳定的,直到Redis的2.8版本以后,这个哨兵模式才稳定下来,无论是主从模式,还是哨兵模式,这两个模式都有一个问题,不能水平扩容,并且这两个模式的高可用特性都会受到Master主内存的限制。
Sentinel(哨兵)进程是用于redis集群中Master主工作的状态,在Master主发生故障的时候,可以实现Master和Sle的切换,保证系统的高可用。
Sentinel(哨兵)进程的作用
(Monitoring): 哨兵(sentinel) 会不断地检查你的Master和Sle是否运作正常。
提醒(Notification):当被的某个Redis出现问题时, 哨兵(sentinel) 可以通过 API 向或者其他应用程序发送通知。
自动故障迁移(Automatic failover):当一个Master不能正常工作时,哨兵(sentinel) 会开始一次自动故障迁移作,它会将失效Master的其中一个Sle升级为新的Master, 并让失效Master的其他Sle改为新的Master;当客户端试图连接失效的Master时,集群也会向客户端返回新Master的地址,使得集群可以使用现在的Master替换失效Master。Master和Sle切换后,Master的redis.conf、Sle的redis.conf和sentinel.conf的配置文件的内容都会发生相应的改变,即,Master主的redis.conf配置文件中会多一行sleof的配置,sentinel.conf的目标会随之调换。
Sentinel(哨兵)进程的工作方式
每个Sentinel(哨兵)进程以每秒钟一次的频率向整个集群中的Master主,Sle从以及其他Sentinel(哨兵)进程发送一个 PING 命令。
如果一个实例(instance)距离一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel(哨兵)进程标记为主观下线(SDOWN)
如果一个Master主被标记为主观下线(SDOWN),则正在监视这个Master主的所有 Sentinel(哨兵)进程要以每秒一次的频率确认Master主的确进入了主观下线状态
在一般情况下, 每个 Sentinel(哨兵)进程会以每 10 秒一次的频率向集群中的所有Master主、Sle从发送 INFO 命令。
当Master主被 Sentinel(哨兵)进程标记为客观下线(ODOWN)时,Sentinel(哨兵)进程向下线的 Master主的所有 Sle从发送 INFO 命令的频率会从 10 秒一次改为每秒一次。
若没有足够数量的 Sentinel(哨兵)进程同意 Master主下线, Master主的客观下线状态就会被移除。若 Master主重新向 Sentinel(哨兵)进程发送 PING 命令返回有效回复,Master主的主观下线状态就会被移除。
Redis Cluster集群模式
Redis Cluster是一种Sharding技术,3.0版本开始正式提供。
在这个图中,每一个蓝色的圈都代表着一个redis的。它们任何两个之间都是相互连通的。客户端可以与任何一个相连接,然后就可以访问集群中的任何一个。对其进行存取和其他作。
在redis的每一个上,都有这么两个东西,一个是插槽(slot)可以理解为是一个可以存储两个数值的一个变量这个变量的取值范围是:0-16383。还有一个就是cluster我个人把这个cluster理解为是一个集群管理的插件。当我们的存取的key到达的时候,cd D:Redisredis会根据crc16的算法得出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,通过这个值,去找到对应的插槽所对应的,然后直接自动跳转到这个对应的上进行存取作。
Jedis sharding集群
Redis Sharding可以说是在Redis cluster出来之前业界普遍的采用方式,其主要思想是采用hash算法将存储数据的key进行hash散列,这样特定的key会被定为到特定的上。
庆幸的是,Ja Redis客户端驱动Jedis已支持Redis Sharding功能,即ShardedJedis以及结合缓存池的ShardedJedisPool
Jedis的Redis Sharding实现具有如下特点:
采用一致性哈希算法,将key和name同时hashing,然后进行映射匹配,采用的算法是MURMUR_HASH。采用一致性哈希而不是采用简单类似哈希求模映射的主要原因是当增加或减少时,不会产生由于重新匹配造成的rehashing。一致性哈希只影响相邻key分配,影响量小。
为了避免一致性哈希只影响相邻造成分配压力,ShardedJedis会对每个Redis根据名字(没有,Jedis会赋予缺省名字)会虚拟化出160个虚拟进行散列。根据权重weight,也可虚拟化出160倍数的虚拟。用虚拟做映射匹配,可以在增加或减少Redis时,key在各Redis移动再分配更均匀,而不是只有相邻受影响。
ShardedJedis支持keyTagPattern模式,即抽取key的一部分keyTag做sharding,这样通过合理命名key,可以将一组相关联的key放入同一个Redis,这在避免跨访问相关数据时很重要。
为了表示后面还有5个回复,然后再读取后面的5个数组元素。利用中间件
中间件的作用是将我们需要存入redis中的数据的key通过一套算法计算得出一个值。然后根据这个值找到对应的redis,将这些数据存在这个redis的中。
常用的中间件有这几种
Twemproxy
Codis
nginx
redis都支持哪些语言,ja,php以外还有吗?支持Android,C#吗?对于Android怎么用?
#活动对象数Ja连接redis的使用示例
(2)执行Linux文件移动命令,“mv /lamp/redis-3.0.7/redis.conf /usr/local/redis/etc;cd /lamp/redis-3.0.7/src;mv mkreleasdhdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server /usr/local/redis/bin”;Redis是开源的key-value存储工具,redis通常用来存储结构化的数据,因为redis的key可以包含String、hash、listset和sorted list。
Redisclient支持多种语言,包括:c、C++、C#、php、ja、python、go等语言,根据自己的开发语言,选择合适的redis client版本类型即可。我是使用ja语言开发的,针对ja语言,redis client也提供了多种客户端支持,按照类型依次是:Jedis、Redisson、JRedis、JDBC-Redis、RJC、redis-protocol、aredis、lettuce。前两种类型是比较的,我们采用了Redisson类型版本作为redisclient的使用。
Redisson版的redis可发工程搭建
1. 新建men工程
2. 在pom.xml文件的dependencies下增加如下内容:
3. 保存pom.xml后,等eclispe工程构建完成后即可进行开发了
开发示例
下面是演示连接redis、保存读取concurrentMap对象、保存读取set对象和保存读取Queue对象的示例代码,代码比较简单,这里就不再详细讲解了,代码如下:
[ja] view plaincopy
import ja.util.Queue;
import ja.util.concurrent.ConcurrentMap;
import org.redisson.Redisson;
public class RedisExample {
/# Redis地址
/
public static void main(String[] args) {
// 1.初始化
Config config = new Config();
config.setConnectionPoolSize(10);
config.addAddress("127.0.0.1:6379");
Redisson redisson = Redisson.create(config);
System.out.println("reids连接成功...");
// 2.测试concurrentMap,put方法的时候就会同步到redis中
map.put("zhangsan", "nan");
map.put("lisi", "女");
ConcurrentMap resultMap = redisson.getMap("FirstMap");
// 2.测试Set
Set mySet = redisson.getSet("MySet");
mySet.add("wuguowei");
mySet.add("lisi");
Set resultSet = redisson.getSet("MySet");
System.out.println("resultSet===" + resultSet.size());
//3.测试Queue队列
Queue myQueue = redisson.getQueue("FirstQueue");
myQueue.add("wuguowei");
myQueue.add("lili");
myQueue.peek();
myQueue.poll();
Queue resultQueue=redisson.getQueue("FirstQueue");
System.out.println("resultQueue==="+resultQueue);
// 关闭连接
redisson.shutdown();
Redis系列篇之SPEC协议
TrueRedis客户端使用被称为 RESP(Redis序列化协议) 的协议与Redis进行通讯。虽然该协议是专门为Redis设计的,但它同样可以被用于其他客户端/的软件项目。
RESP 是以下几点的折中方案:
RESP 可以序列化诸如整型、字符串和数组等不同的数据类型,还有一个特定的错误类型。请求以字符串数组的形式由客户端发送到Redis,字符串数组表示需要执行的命令。Redis用特定于命令的数据类型回复。
RESP 是二进制安全的,不需要处理从一个进程传输到另一个进程的批量数据,因为它使用长度前缀来传输批量数据。
注意: 这里描述的协议仅用于客户端/通信,Redis集群使用不同的二进制协议在之间交换信息。
客户端通过创建端口号为6379的TCP来连接Redis。
虽然 RESP 在技术上是非TCP特定的,但该协议仅用于Redis上下文的(或者等效的面向流的连接,如Unix套接字)TCP连接。
Redis接收由不同参数组成的命令。一旦命令被接收,将会被执行并且发送一个回复给客户端。
这可能是最简单的模型,然而,有两个例外:
除了这两种例外,Redis协议是一种简单的请求-应答协议。
Redis RESP 协议在v1.2版本中介绍,但是到v2.0才变为与通信的标准。
RESP 协议支持以下数据类型: Simple Strings(简单字符串),Errors(错误),Integers(整型),Bulk Strings(批量字符串)以及Arrays(数组)。
Redis通过以下方式将 RESP 用作请求-应答协议:
在 RESP 中,个字节决定了数据类型:
在 RESP 中,协议不同部分总是以
(CRLF)结尾。
RESP 使用特殊的组合表示空的Bulk Strings或者空的Arrays: $-1
表示空的Bulk Strings, -1
表示空的Arrays,需要注意的是: $0
与Bulk Strings被用来表示单个的长度512MB的二进制安全字符串。 0
分别表示有回复,但长度为0。
Simple Strings(简单字符串)的编码方式为:一个 + 号在最前面,后面跟着一个不能包含CR或者LF字符的字符串(即不允许换行符),并且以CRLF(
)结尾。
Simple Strings(简单字符串)以最小的开销传输非二进制安全的字符串。例如:很多Redis命令执行成功后的回复只是 OK , RESP 简单字符串将以5个字节编码: +OK
如果想要传输二进制安全的字符串,请使用Bulk Strings替代。
当Redis以简单字符串回复时,客户端库应该返回 + 号后面个字符后面的所有字符串(不包括CRLF字节)。
Redis有特定的错误类型,与Simple Strings相似,不同的是个字符是减号 - 而不是加号 + ,二者真正不同的是,客户端将错误视为异常,而构成Error类型的字符串就是错误消息本身。
错误类型的基本格式为:
-Error message
只有当发生错误时才会回复错误,比如你想要在错误的数据类型上执行命令,或者命令根本不存在。客户端收到Error回复时应该抛出异常。
下面是错误回复的例子:
- 号到后面个空格或者新行的个单词表示返回的错误类型,这只是Redis使用的约定,而不是 RESP 错误格式的一部分。
比如, ERR 是一般错误,但是 WRONGTYPE 是一个更具体的错误,暗示客户端尝试执行应对错误类型的作。这被称为 错误前缀 ,是一种允许客户端了解返回的错误类型而无需检查确切错误消息的方法。
客户端实现可能会针对不同的错误返回不同类型的异常,或者通过直接将错误名称作为字符串提供给调用者来提供捕获错误的通用方法。
但是不应将此类功能视为至关重要,因为它很少有用,并且有限的客户端实现可能会简单地返回通用错误条件,例如false
这种类型只是一个以CRLF结尾的字符串,表示一个整数,前缀为 : ,比如: :0
和 :1000
。有很多返回整型的Redis命令,比如: INCR 、 LLEN 以及 LASTSAVE 。返回的整型数据范围为有符号的64位整数。
其他命令比如 SADD 、 SREM 、 SETNX 如果被执行了将会返回1,否则返回0。
其他返回整型的命令: SETNX 、 DEL 、 EXISTS 、 INCR 、 INCRBY 、 DECR 、 DECRBY 、 DBSIZE 、 LASTSAVE 、 RENAMENX 、 MOVE 、 LLEN 、 SADD 、 SREM 、 SISMEMBER 、 SCARD 。
Bulk Strings编码方式为:
所以,字符串 hello 被编码为: $5
hello
一个空字符串被编码为: $0
RESP Bulk Strings也可用特殊格式表示不存在(NULL),在这种格式中,长度为-1,没有数据: $-1
,这被称作 NULL Bulk String ,当回复NULL Bulk String时,客户端库的API不应该返回空的字符串,而是返回nil对象。
客户端使用RESP Arrays发送命令到。同样,某些返回元素给客户端的命令使用RESP数组作为回复,比如: LRANGE 命令。RESP Arrays以下面的格式发送:
所以,空数组编码为: 0
包含"hello"和"world"两个元素的RESP数组被编码为: 2
$5
hello
$5
world
如你所见,
:1
:2
:3
Array可以包含不同的数据类型,比如一个有4个整型和一个批量字符串组成的Array编码为:(为了直观,以换行的形式展现)
值为NULL的数组也存在(通常使用NULL Bulk String,由于历史原因,NULL存在两种格式)。比如 BLPOP 超时时将会返回一个长度为-1的NULL Array: -1
在RESP中同样存在嵌套的数组,比如两个嵌套的数组编码结果为:
上面的编码结果包含两个元素的数组,个元素由(1,2,3)构成的子数组,第二个元素由一个Bulk Striimport org.redisson.Config;ng(+Hello)和一个Error(-World)组成的数组。
一个Array的单个元素可能为NULL。这在Redis回复中用来表示这些元素丢失而不是空字符串。当 SORT 命令使用 GET pattern 子命令并且key缺失时,将会发生这种情况。一个包含NULL元素的数组回复为:
上面的编码解析结果为:["hello", nil, "world"]
可以根据上面几部分的介绍来编写Redis客户端,同时进一步了解客户端和之间的交互是如何工作的。
所以,一种典型的交互场景可能如下:
为了获取存储在 mylist 中的列表的长度,客户端发送命令 LLEN mylist 到,然后回复客户端一个整型回复:
protocol-spec
Redis系列篇之SPEC协议
Spring Boot如何整合Redis
>>> r.set('tt','coffee')Spring Boot是目前非常流行的Ja Web开发框架,Redis是非关系型数据库的一种,以键值对的形式存储。Spring对Redis的支持是通过Spring Data Redis来实现的,给我们提供了RedisTemplate和StringRedisTemplate两种模板来作数据。Spring Boot框架也提供了对Redis的支持,下面我们来讲一下Spring Boot框架整合Redis的步骤。
工具/材料
InliJ IDEA
Spring Boot整合Redis我们需要添加依赖的jar包,spring-boot-starter-data-redis中包含spring和redis相关的jar包,jedis作为redis的客户端也需要添加到工程中,Spring Boot的版本信息在父pom中已指定,子模块中的spring相关的jar包无需另外指定。
Spring Boot会根据application.properties中的配置对Redis的属性进行自动配置,并注入到RedisProperties类中。在application.properties配置文件中这些属性都是以spring.redis为前缀的,值得注意的是在Spring Boot 1.5.x版本中默认的Redis客户端是jedis,因此在配置文件中无需指定,如下图所示。
Spring Boot 1.5.x版本的整合配置网上可以搜索大量的文章,然而Spring Boot 2.x版本的整合资料却非常少,甚至提供的配置不能正常使用,因此本文主要讲解Spring Boot 2.x整合Redis以及Redis的使用情况。spring-boot 2.x版本有jedis和lettuce两种客户端,因此我们必须要去指定使用哪一种客户端,两个客户端的配置如下图所示,本文使用的是Jedis客户端连接池,具体的配置如下。
# Redis数据库索引(默认为0)
spring.redis.database=0
spring.redis.host=127.0.0.1
# Redis连接端口
# Redis连接密码(默认为空)
spring.redis.password=xylx1.t!@#
# 配置jedis连接池
# 连接池连接数(使用负值表示没有限制)
spring.redis.jedis.pool.max-active=8
spring.redis.jedis.pool.max-wait=-1ms
# 连接池中的空闲连接
spring.redis.jedis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.jedis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=5000ms
由配置我们可以看到spring-boot 2.x版本时间设置需要加单位ms,因为参数的类型为Duration。另外spring.redis.timeout尽量不要配置0,否则可能会出现io.lettuce.core.RedisCommandTimeoutException: Command timed out超时错误。
@Com当有足够数量的 Sentinel(哨兵)进程(大于等于配置文件指定的值)在指定的时间范围内确认Master主进入了主观下线状态(SDOWN), 则Master主会被标记为客观下线(ODOWN)ponent
public class RedisUtil {
@Autowired
private StringRedisTemplate redisTemplate;
/
存package com.my.test.redis;字符串
@param key 缓存键
@param value 缓存值
@param expireTime过期时间(s)
/
public void setString(String key, String value, int expireTime){
ValueOperations
if (expireTime != 0) {
ops.set(key, value, expireTime, TimeUnit.SECONDS);
ops.set(key,value);
/
取字符串
@param key 缓存键
@return缓存值
/
public String getString(String key){
ValueOperations
return ops.get(key);
}接下来我们编写Controller层代码去调用RedisUtil工具类,实现数据的存储和读取,代码比较简单可以参考下图。若想验证Redis是否可用,还需要编写启动类,如下图所示。
由上图可看到我们编写了一个t请求用于存储字符串,get请求用于取出字符串。启动类通过main方法启动应用,接下来我们使用tman去模拟浏览器调用t和get请求,由下图可以看到Redis存储的数据成功被取出。
接下来我们介绍Jedis,这是一个封装了Redis的客户端,在Spring Boot整合Redis的基础上,可以提供更简单的API作。因此我们需要配置JedisPool的Bean,代码如下,其中@Configuration注解表明这是一个配置类,我们在该类中注入RedisProperties,并且使用@Bean注解指定JedisPool。
@Configuration
public class RedisConfiguration {
@Autowired
private RedisProperties properties;
@Bean
public JedisPool getJedisPool(){
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(properties.getJedis().getPool().getMaxIdle());
config.setMaxTotal(properties.getJedis().getPool().getMaxActive());
config.setMaxWaitMillis(properties.getJedis().getPool().getMaxWait().toMillis());
JedisPool pool = new JedisPool(config,properties.getHost(),
properties.getPort(),100,
properties.getPassword(), properties.getDatabase());
接下来我们编辑JedisUtil工具类,通过SpringBoot容器的@Component注解来自动创建,并且注入JedisPool,使用jedisPool.getResource()方法来获取Jedis,并最终实现作redis数据库,其代码如下。
@Component
public class JedisUtil {
@Autowired
JedisPool jedisPool;
//获取key的value值
public String get(String key) {
String str = "";
try {
str = jedis.get(key);
} finally {
try {
jedis.close();
} catch (Exception e) {
e.printStackTrace();
return str;
String str = "";
try {
str = jedis.set(key, value);
} finally {
try {
jedis.close();
} catch (Exception e) {
e.printStackTrace();
return str;
JedisUtil工具类编写完成后,我们修改之前的RedisController,并注入JedisUtil,代码如下图所示。然后再用tman分别调用t和get接口,我们可以看到成功取到了新的key的value值。
在Spring Boot整合Redis前本机需安装Redis,另外可以使用RedisDesktopMar这个Redis这个桌面管理工具查看Redis中的数据。
redis客户端作redis是阻塞的吗
redis-benchmark.exe上面的显然没有明白楼主的意思!
特别提示redis客户端,做各种作去连接端,都是阻塞作,等redisserver 返回结果之后,redis客户端才会继续往下走
首先,客户端 socket 会被设置为非阻塞模式,因为 Redis 在网络处理上采用的是非阻塞多路复用模型。
然后为这个socket 设置 TCP_NODELAY 属性,禁用 Nagle 算法
然后创建一个 readable 的文件用于监#基准测试听这个客户端 socket 的数据发送!
Redis模拟多个redis客户端实现功能
整型回复同样可以用来表示true或者false,比如 EXISTS 或者 SISMEMBER 将会返回1表示true,0表示false。1.
}public String set(String key, String value) {开启redisRedis集群数据分片,我的redis在D盘因此cmd重复开启多个redis客户端
D:
redis-cli.exe -h 127.0.0.1 -p 6379
2.
模拟频道
subscribe channe1 [channel ....] 某一频道
subscribe ja
3.
再开一个redis客户端模拟发布消息
d:
redis-cli.exe -h 127.0.0.1 -p 6379
publish ja woyongyuanaija
此时可以看到两个了频道的客户端均能收到消息
在jedis封装好的方法中很明显的就可以看到对应的类
点进去看JedisPubSub类的源码
可以看到是一个抽象类 方法空实现 那就根据方法名来试一下吧
新建一个类去继承JedisPubSub类 重写onMessage方法 输出两个参数
再新建一个项目 去发布消息 可以看到了的可以收到消息。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系 836084111@qq.com 删除。