设为首页 收藏本站
查看: 774|回复: 0

[经验分享] redis介绍:安装配置,客户端指令,客户端API

[复制链接]

尚未签到

发表于 2016-12-20 10:53:38 | 显示全部楼层 |阅读模式
当make编译后的Redis会产生如下二进制可执行文件,并在make install之后把所有可执行二进制文件安装到/usr/local/bin下。

redis-server:Redis服务器的daemon启动程序。此命令只有一个参数,就是Redis的配置文件:redis.conf文件。

    也可通过如:redis-server --appendonly true来设置配置文件中的配置

redis-cli:Redis命令行操作工具。当然,你也可以用telnet根据其纯文本协议来操作。


redis-benchmark:Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能。具体用法如下:


redis-benchmark [-h <host>] [-p <port>] [-c <clients>] [-n <requests]> [-k <boolean>]
            -h(hostname)   服务器主机名或ip(默认为127.0.0.1)
            -p(port)             服务器端口(默认是6379)
            -c(clients)         并发连接数(默认50)
            -n(requests)     请求数(默认为10000)
            -d(size)            set/get数据的大小(默认为2字节,单位字节)
            -k(boolean)    1=keep alive长连接;0=reconnect重连接,每次短连接(默认为1)
            -q                         只显示平均数据
            -l                           loop循环,永远执行
            -I                           打开n个空闲连接,并且等待





redis-check-dump: 检查file.rdb 文件。

redis-check-aof:检查file.aof 文件。

redis-stat:Redis状态检测工具,可以检测Redis当前状态参数及延迟状况,现已失效。

 

redis有两种数据持久化方式:RDB和AOF。

RDB:异步的把数据保存到文件中,save, shutdown, slave 命令会触发这个操作。颗粒度大,未触发操作之前的数据将无法保存。

AOF:把写操作指令,持续的写到一个类似日志文件里。通过appendfsync选项配置同步的时间频率。




redis.conf配置:

#基本配置

daemonize:是否以后台daemon方式运行,默认为no。当redis被设置为守护进程后,会写一个pid在pidfile中

pidfile:pid文件位置。当daemonize是yes时,会把pid写入此时配置的文件中。

port:监听的端口号。默认为6379。

bind:指定redis只接收来自于该IP地址的请求,如果不进行设置,那么将处理所有请求,在生产环境中最好设置该项,为了两个Redis Server可以互访,需要注释掉bind。


timeout:请求超时时间。当客户端在这段时间内没有发出任何指令,那么关闭该连接。默认为0即取消(disable)此配置,也就是时间无限延长。


databases:开启可用的数据库数量,默认为16。第一个数据库的dbid是0,可以使用 SELECT <dbid>,dbid是从0到databases-1。


#日志配置

loglevel:log信息级别。log等级分为4级,生产环境下一般开启notice。debug, verbose, notice和warning。


logfile:log文件位置。默认为标准输出,stdout。但是如果是守护线程并此值依然设置为stdout的话日志将输到/dev/null中。

#RDB配置

save * *:保存快照的频率,第一个*表示多长时间,第二个*表示执行多少次写操作。在一定时间内执行一定数量的写操作时,自动保存快照。可设置多个条件。


             save 900 1                     在900秒内有一次更新,保存快照

             save 300 10                   在300秒内有10次更新,保存快照


             save 60 10000                在60秒内有10000次更新,保存快照


            你可以注释掉每行save来禁用rdb快照,也可以这样save ""来禁用。

stop-writes-on-bgsave-error:当持久化出现错误后,是否依然进行停止进行工作。默认为yes。

rdbcompression:进行rdb时,是否使用压缩。默认是yes。

rdbchecksum:进行rdb时,是否检查,默认为yes。

dbfilename:rdb文件名(只是文件名,不包括目录)。

dir:rdb文件的保存目录(这个是目录)。

#AOF配置

appendonly:是否开启appendonlylog,开启的话每次写操作会记一条log,这会提高数据抗风险能力,但影响效率。redis默认采用RDB快照异步转存到硬盘中,它是根据save指令来触发持久化的,当Redis异常中断或停电时,可能会导致最后一些写操作丢失。AOF(Append Only File,只追加文件)可以提供更好的持久性,结合apendfsync指令可以把几分钟的数据丢失降至一秒钟的数据丢失,它通过日志把所有的操作记录下来,AOF和RDB持久化可以同时启动。


appendfilename:指定aof的文件名。

appendfsync:appendonlylog如何同步到磁盘(三个选项,分别是always是每一次写操作就马上同步到日志中、everysec每秒启用一次fsync、no不调用fsync等待系统自己同步)。fsync 系列命令强制操作系统将数据从内核区写到磁盘控制器上。


no-appendfsync-on-rewrite:如果为yes,当BGSAVE或BGREWRITEAOF指令运行时,即把AOF文件转写到RDB文件中时,会阻止调用fsync()。

auto-aof-rewrite-percentage:默认100,rewrite的百分比。

auto-aof-rewrite-min-size:默认64mb,Redis会将AOF文件最初的大小记录下来,如果当前的AOF文件的大小增加100%并且超过64mb时,就会自动触发Redis改写AOF文件到RDB文件中,如果auto-aof-rewrite-percentage  为0表示取消自动rewrite功能。




#master-slave相关配置

slaveof <masterip> <masterport>:当本机是slave(从服务)时,设置master(主服务)的ip和端口。

masterauth <master-password>:如果master设置了密码,slave需要进行认证。

slave-serve-stale-data:当slave失去与master的连接后是否还会提供服务,如果为yes,slave会响应客户端的请求,数据可能不同步甚至没有数据,如果为no,slave会返回错误"SYNC with master in progress"。

slave-read-only:如果为yes,slave实例只读,如果为no,slave实例可读可写。

repl-ping-slave-period :slave发送ping给master的时间间隔,单位是秒。

repl-timeout: I/O超时或ping响应超时,单位是秒,值必须要比repl-ping-slave-period大。

slave-priority:如果master不能再正常工作,那么会在多个slave中,选择优先值最小的一个slave提升为master,优先值为0表示不能提升为master。



#SECURITY配置

requirepass <password>:设置访问密码,密码要足够强。

rename-command <dangerous-command> <strange-command>:给一些危险的指令进行重命名,如果重命名为“”,取消该命令

#LIMITS限制配置

maxclients:客户端并发连接数的上限,到达上限,服务器会关闭所有新连接并返回错误"max number of clients reached"。

maxmemory <bytes>:设置最大内存,到达上限,服务器会根据驱逐政策(eviction policy)删除某些键值,如果政策被设置为noeviction,那么redis只读,对于增加内存的操作请求返回错误。

maxmemory-policy:设置驱逐政策(eviction policy)。最大内存达到时,移除策略  volatile-lru | allkeys-lru | volatile-random | allkeys-random | volatile-ttl |     noeviction 

maxmemory-samples:LRU和minimal TTL是近似算法(为了节省内存),移除策略的抽样计算。



hash-max-ziplist-entries 512

hash-max-ziplist-value 64    #较小的hash可以通过某种特殊的方式进行编码,以节省大量的内存空间,我们指定最大的条目数为512,每个条目的最大长度为64。

list-max-ziplist-entries 512

list-max-ziplist-value 64    #同上。

zset-max-ziplist-entries 128

zset-max-ziplist-value 64    #同上。



#SLOW LOG配置

       slowlog是redis提供的进行query分析的工具,是用来记录查询执行时间的日志系统。它将执行时间长的命令统一以list形式保存在内存之中,使用者可以通过slowlog命令查看这些慢query,从而分析系统瓶颈。slow log 保存在内存里面,读写速度非常快,因此你可以放心地使用它,不必担心因为开启 slow log 而损害 Redis 的速度。


      要查看slow log,可以使用 SLOWLOG GET 或者 SLOWLOG GET number 命令,前者打印所有 slow log ,最大长度取决于slowlog-max-len 选项的值,而 SLOWLOG GET number 则只打印指定数量的日志。

slowlog-log-slower-than:它决定要对执行时间大于多少微秒(microsecond,1秒 = 1,000,000 微秒)的查询进行记录。

slowlog-max-len:它决定 slow log 最多能保存多少条日志, slow log 本身是一个 LIFO 队列,当队列大小超过 slowlog-max-len 时,最旧的一条日志将被删除,而最新的一条日志加入到 slow log ,以此类推。


#高级配置

activerehashing yes    #重新哈希the main Redis hash table(the one mapping top-level keys to values),这样会节省更多的空间。

client-output-buffer-limit normal 0 0 0    #对客户端输出缓冲进行限制可以强迫那些就不从服务器读取数据的客户端断开连接。对于normal client,第一个0表示取消hard limit,第二个0和第三个0表示取消soft limit,normal client默认取消限制,因为如果没有寻问,他们是不会接收数据的。

client-output-buffer-limit slave 256mb 64mb 60    #对于slave client和MONITER client,如果client-output-buffer一旦超过256mb,又或者超过64mb持续60秒,那么服务器就会立即断开客户端连接。

client-output-buffer-limit pubsub 32mb 8mb 60    #对于pubsub client,如果client-output-buffer一旦超过32mb,又或者超过8mb持续60秒,那么服务器就会立即断开客户端连接。







redis的数据结构:

string是最简单的类型,你可以理解成与Memcached一模一个的类型,一个key对应一个value,其上支持的操作与Memcached的操作类似。但它的功能更丰富。

      常用命令:set,get,decr,incr,mget


list是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等。操作中key理解为链表的名字。

      常用命令:lpush,rpush,lpop,rpop,lrange


set无顺序集合,其中成员必须唯一,和我们数学中的集合概念相似,对集合的操作有添加删除元素,有对多个集合求交并差等操作。操作中key理解为集合的名字。


      常用命令:sadd,spop,smembers,sunion


Sorted set是set的一个升级版本,他在set的基础上增加了一个顺序属性score,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序,score可以重复。可以理解了有两列的mysql表,一列存value,一列存顺序。操作中key理解为zset的名字。

      常用命令:zadd,zrange,zrem,zcard


Hash数据类型允许用户用Redis存储对象类型,Hash数据类型的一个重要优点是,当你存储的数据对象只有很少几个key值时,数据存储的内存消耗会很小。

      常用命令:hget,hset,hgetall


 

Redis内部使用一个redisObject对象来表示所有的key和value。type代表一个value对象具体是何种数据类型,encoding是不同数据类型在redis内部的存储方式。

 

用redis存储传统关系型数据库时可以按key的建议设置方式为object:id:field,redis的key不能包含空格换行等字符。


如传统表user结构如下:


id
username
password
name
surname


1
user1
pass1
Bob
Smith


2
user2
pass2
Mario
Rossi

按redis存储则如下:



Key
Value


user:1:username
user1


user:1:password
pass1


user:1:name
Bob


user:1:surname
Smith


user:2:username
user2


user:2:password
pass2


user:2:name
Mario


user:2:surname
Rossi


redis客户端代码支持

1.  java连接redis客户端jedis:https://github.com/xetorthio/jedis

    可以使用基于common-pool的对象池JedisPool进行Jedis对象管理(其中使用JedisPoolConfig进行对象池的配置),对于主-从关系的多台redis服务器提供了ShardedJedisPool这个对象池进行管理(其中JedisShardInfo用户设置单个redis服务器的信息,按一致性hash来划分客户端对服务器的访问)。JedisPipeline可以对一系列的操作进行同时处理。


提供一个配置文件:redis_zh_CN.properites

#最大分配的对象数
redis.pool.maxActive=1024
#最大能够保持idel状态的对象数
redis.pool.maxIdle=200
#当池内没有返回对象时,最大等待时间 ,单位毫秒
redis.pool.maxWait=1000
#当调用borrow Object方法时,是否进行有效性检查
redis.pool.testOnBorrow=true
#当调用return Object方法时,是否进行有效性检查
redis.pool.testOnReturn=true
#IP
redis.ip=192.168.18. 66
#Port
redis.port=6379
 利用配置信息创建RedisPool:


import java.util.ResourceBundle;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public class JedisPoolDemoMain {
/**
* @param args
*/
public static void main(String[] args) {
ResourceBundle resourceBundle = ResourceBundle.getBundle("redis");
JedisPoolConfig config = new JedisPoolConfig();
//对象池内最大的对象数
config.setMaxActive(Integer.valueOf(resourceBundle.getString("redis.pool.maxActive")));
//最大限制对象数
config.setMaxIdle(Integer.valueOf(resourceBundle.getString("redis.pool.maxIdle")));
//当池内没有返回对象时,最大等待时间
config.setMaxWait(Long.valueOf(resourceBundle.getString("redis.pool.maxWait")));
config.setTestOnBorrow(Boolean.valueOf(resourceBundle.getString("redis.pool.testOnBorrow")));
config.setTestOnReturn(Boolean.valueOf(resourceBundle.getString("redis.pool.testOnReturn")));
//通过apache common-pool中的PoolableObjectFactory来管理对象的生成和销户等操作,而ObjectPool来管理对象borrow和return
JedisPool pool = new JedisPool(config, resourceBundle.getString("redis.ip"), Integer.valueOf(resourceBundle.getString("redis.port")));
Jedis jedis = pool.getResource();
System.out.println(jedis.get("a"));
pool.returnResource(jedis);
}
}
 对多台redis服务器的客户端处理代码:


import java.util.List;
import java.util.ResourceBundle;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;
public class ShardedJedisPoolDemoMain {
/**
* @param args
*/
public static void main(String[] args) {
ResourceBundle resourceBundle = ResourceBundle.getBundle("redis");
JedisPoolConfig config = new JedisPoolConfig();
//对象池内最大的对象数
config.setMaxActive(Integer.valueOf(resourceBundle.getString("redis.pool.maxActive")));
//最大限制对象数
config.setMaxIdle(Integer.valueOf(resourceBundle.getString("redis.pool.maxIdle")));
//当池内没有返回对象时,最大等待时间
config.setMaxWait(Long.valueOf(resourceBundle.getString("redis.pool.maxWait")));
config.setTestOnBorrow(Boolean.valueOf(resourceBundle.getString("redis.pool.testOnBorrow")));
config.setTestOnReturn(Boolean.valueOf(resourceBundle.getString("redis.pool.testOnReturn")));
JedisShardInfo info1 = new JedisShardInfo("192.168.18.66", 6379);
info1.setPassword("password");
JedisShardInfo info2 = new JedisShardInfo("192.168.18.82", 6379);
List<JedisShardInfo> infoList = new ArrayList<JedisShardInfo>();
infoList.add(info1);
infoList.add(info2);
ShardedJedisPool shardedJedisPool = new ShardedJedisPool(config, infoList);
ShardedJedis jedis = shardedJedisPool.getResource();
System.out.println(jedis.get("a"));
shardedJedisPool.returnResource(jedis);        
}
}
 2.  spring针对redis专门提供了spring-data-redis。


 

3.  对于python而言redis具有redis-py作为客户端工具(easy_install redis)。

Parser控制如何解析redis响应的内容。redis-py包含两个Parser类,PythonParser和HiredisParser。

  如果安装了hiredis模块,redis-py会使用HiredisParser。HiredisParser是C编写的,由redis核心团队维护,性能要比PythonParser提高10倍以上,所以推荐使用(
easy_install hiredis
)。如果没有安装hiredis模块,则使用PythonParser。




    redis-py提供connection pool来管理对一个redis server的所有连接,并提供pipeline机制可以在一次请求执行多个命令。




redis-cli客户端命令

1.quit,退出断开连接

2.auth <password>,如果服务端设置了requirepass密码,则通过此命令来认证

90.ping,测试连接是否成功,成功返回PONG

91.select <index>,选择数据库,index从0开始

92.client list,列出服务器连接

对key的操作

3.exists <key>,查看某个key是否存在,返回1是存在,0是不存在


4.del <key>,删除某个key,key存在并删除返回1,key不存在删除失败返回0


5.type <key>,查看某个key的类型


6.keys,返回满足给定模式的key的集合,如keys *会列出所有的key值

7.randomkey,从redis里随机返回一个已存在的key

8.rename <oldkey>  <newkey>,把一个key改成新名字

9.expire,设置一个key活动时间(单位秒)

10.ttl <key>,查看key的活动时间

11.select <dbindex>,选择redis数据库,从0开始,对应配置文件的databases配置,默认配置是16,则dbindex从0~15

12.move <key> <dbindex>,将当前数据库的key转移到dbindex数据库中

13.flushdb,删除当前redis服务器上所有的key数据

14.flushall,删除所有redis服务器上的所有key数据

对string类型的操作

15.set <key> <value>,向redis服务器设置值,如果key已经存在,覆盖旧值无视value类型

16.get <key>,取数据

17.getset <key> <value>,设置新值并返回旧的值,当key存在但不是string类型值时返回error


18.mget <key1> <key2> ...,一次取多个值


19.setnx <key> <value>,当key不存在时设置value值并返回1,当存在时不能覆盖返回0


20.setex <key> <time> <value>,设置值并同时设置超时时间(秒)


21.mset <key1> <value1> <key2> <value2> ...,一次设置多个值


22.msetnx <key1> <value1> <key2> <value2> ...,參考19setnx


23. incr<key>,如果string值是数字就会对其加1操作

24.incrby <key> <int>,如果string值是数字就会对其加int操作


25.decr <key>,如果string值是数字就会对其减1操作


26.decrby <key> <int>,如果string值是数字就会对其减int操作


27.append <key> <value>,名为key的值追加value,会返回字符串长度

28.substr <key> <start> <end>,返回start到end的key子字符串,位置从0开始

29.strlen <key>,字符串长度

对list类型的操作

30.rpush <key> <value>,在名为key的list类型数据尾部加上value,并返回list内元素的条数


31.lpush <key> <value>,在名为key的list类型数据头部加上value,并返回list内元素的条数


32.llen <key>,list内元素的个数


33.lrange <key> <start> <end>,返回list内的元素,从start到end,如果要返回所有可使用lrange <key> 0 -1


34.ltrim <key> <start> <end>,截取并保留start到end间的元素


35.lindex <key> <index>,返回list内第index(从0开始为第一个)个元素


36.lset <key> <index> <value>,覆盖名为key的list第index个元素的值


37.lrem <key> <count> <value>,删除count个名为key的list内的值为value的元素,并返回删除的具体格式。count如果是正数则从头开始删除,如果是-count则逆删,count如果是0则删除所有


38.lpop <key>,返回并删除名为key的list的首个元素


39.rpop <key>,返回并删除名为key的list的尾元素


40.rpoplpush <source_keylist> <destination_keylist>,从source_keylist的尾部取出一个元素并删除,然后添加到destination_keylist的头部


41.blpop <key1> <key2> ... <timeout>,当timeout是0时立即返回,当timeout>0时会等待timeout秒后返回并删除首部元素,每个key依次执行lpop命令

42.brpop <key1> <key2> ... <timeout>,类似上条命令


对set类型的操作

43.sadd <key> <member>,向名为key的set中加入元素member,成功返回1失败返回0

44.srem <key> <member>,删除名为key的set中的元素member,成功返回1失败返回0


45.smembers <key>,列出名为key的set中的所有member

46.spop <key>,随机返回并且删除名为key的set中的一个member


47.smove <srckey> <deskey> <member>,将名为srckey的set中的member元素移至名为deskey的set中去,成功返回1失败返回0


48.scard <key>,返回名为key的set中member元素的个数

49.sismember <key> <member>,检查member元素是否包含在名为key的set中,1存在,0不存在

50.sinter <key1> <key2> ...,求各个set的交集

51.sinterstore <deskey> <key1> <key2> ...,求key1,key2...等各个set的交集并存到deskey的set中


52.sunion <key1> <key2> ...,求并集


53.sunionstore <deskey> <key1> <key2> ...,求并集并且保存到deskey中,返回集合内member数量


54.sdiff <key1> <key2> ...,求差集,差集是以key1-key2去除相同的部分再往下减,以此类推,所以一般情况sdiff key1 key2与sdiff key2 key1不同


55.sdiffstore <deskey> <key1> <key2> ...,以上sunionstore和sinterstore类似


56.srandmember <key>,随机在名为key的set中返回一个member

对zset类型的操作

57.zadd <key> <score> <member>,对一个名为key的zset设置对应的score值和member值

58.zrem <key> <member>,删除名为key的zset中的member元素

59.zincrby <key> <increment> <member>,如果名为key的zset中member已经存在则在此member的score上加increment,不存在则按score为increment存入member

60.zrank <key> <member>,返回名为key的szet中member的从小到大顺序的index(index从0开始)


61.zrevrank <key> <member>,返回名为key的szet中member的从大到小顺序的index(index从0开始)


62.zrange <key> <start> <end> (withscores),返回从小到大排序从start到end内名为key的zset中的member, zrange key 0 -1即为全部数据;withscores 可以连同score一起显示


63.zrevrange <key> <start> <end>,如上类似


64.zrangebyscore <key> <min> <max>,返回名为key的zset其score在min至max之间的member元素


65.zcount <key> <start> <end>,返回名为key的zset其score在min至max之间的member元素的数量


66.zcard <key>,返回名为key的zset内member元素的个数

67.zscore <key> <member>,返回名为key的zset中member元素的score

68.zremrangebyrank <key> <min> <max>,删除名为key的zset中顺序在min到max中的member,其中包含min和max

69.zremrangebyscore <key> <start> <end>,删除名为key的zset中score在start到end中的member,其中包含start和end


70.zunionstore / zinterstore <dstkeyN> <numkeys> <key1> … <keyN>  WEIGHTS <weight1> …<weightN> AGGREGATE SUM|MIN|MAX):对N个zset求并集和交集,并将最后的集合保存在dstkeyN中。


numkeys指定之后要并集或交集的key的个数。

对于集合中每一个元素的score,在进行AGGREGATE运算前,都要乘以对应的WEIGHT参数。

如果没有提供WEIGHT,默认为1。默认的AGGREGATE是SUM,即结果集合中元素的score是所有集合对应元素进行SUM运算的值,而MIN和MAX是指,结果集合中元素的score是所有集合对应元素中最小值和最大值。

对hash的操作

71.hset <key> <field> <value>,向名为key的hash总加入field和value对应

72.hget <key> <field>,取出名为key的hash中field对应的value

73.hmset <key> <field> <value>...,类似hset,此方法可同时设置多个


74.hmget <key> <field>...,类似hget,此方法可以同时取出多个


75.hincrby <key> <field> < increment >,对名为key的hash中field对应的value加上increment,如果value不是int类型就失败


76.hexists <key> <field>,名为key的hash的field是否存在


77.hdel <key> <field>,删除名为key的hash中field对应的value


78.hlen <key>,名为key的hash中元素个数


79.hkeys <key>,返回名为key的hash中的所有field键


80.hvals <key>,返回名为key的hash中的所有value值


81.hgetall <key>,返回名为key的hash中所有field键和value值


持久化

82.save,将数据同步保存在磁盘

83.bgsave,将数据异步保持到磁盘

84.bgrewriteaof,异步重写AOF文件

85.lastsave,返回上一次保存到磁盘的时间戳

86.shutdown,同步保存数据至磁盘,并关闭redis

其他

87.info,提供服务器的信息和统计

88.monitor,实时监控收到的请求
89.slaveof,改变复制策略设置
90.config,在运行时配置Redis服务器,config set 配置名 配置值:表示运行时修改配置文件;config get 配置名:查看配置信息
事务
100.multi,事务开始
101.exec,执行事务内的操作
102.discard,取消事务内的操作,结束事务
103.watch <key1> <key2> ...,监视key,如果key对应的数值被事务外的操作改变,则该事务退出
104.unwatch,取消watch命令所监视的key,如果在执行watch命令之后, exec命令或 discard命令先被执行了的话,那么就不需要再执行此命令了
SLOWLOG



105.slowlog get [number],打印slowlog,如果指定number就表示打印number条,如果未指定则打印一部分(10条),此时长度取决于配置文件中slowlog-max-len的大小。打印的数据格式如下:


1) 1) (integer) 1     唯一标识

   2) (integer) 1393816111 被记录的时间,时间戳形式

   3) (integer) 26     所用时长,微妙

   4) 1) "set"            以下为具体被记录的语句

      2) "e"

      3) "1111"

2) 1) (integer) 0

   2) (integer) 1393816104

   3) (integer) 49

   4) 1) "auth"

       2) "password"

 


106.slowlog len,查看当前的slowlog的数量


107.slowlog reset,清除日志

 

官方文档:http://redis.io/commands

中文文档:http://manual.csser.com/redis/index.html

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-316903-1-1.html 上篇帖子: redis 的两种持久化方式及原理 下篇帖子: Tomcat7集群共享Session 基于redis进行统一管理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表