1.redis是一个运行在内存的数据库,他有一个缺点:假如有一个正在编辑的wor文档,突然停电那么这个正在编辑的word文档是会丢失的;所以它诞生了save,bgsave这两个命令,save是保存在磁盘中是同步的(等他保
1 127.0.0.1:6379> save 2 OK 3 127.0.0.1:6379> bgsave 4 Background saving started
存完之后才可以输入其他的命令),bgsave是保存在磁盘中在后台保存的异步的
2.redis的运行,进入安装redis的bin目录,先运行服务端,再运行客户端,ping命令是用来测试连接
1 [root@localhost ~]# cd /opt/redis 2 [root@localhost redis]# ./bin/redis-server redis.conf 3 [root@localhost redis]# ./bin/redis-cli 4 127.0.0.1:6379> ping 5 PONG
3.redis有五种类型string(相当于JDK中的String+Integer),list(相当于JDK中的linklist),set(相当于JDK中的hashset,无序,不重复),hash(类似JDK中的hashMap,一个大key对应好多的小key于value),zset(相当于JDK中的treeset,排序,有分值的概念)
4.redis默认使用0数据库,切换到指定数据库:select index,默认有16个库,下标从0-15
1 127.0.0.1:6379> select 3 2 OK 3 127.0.0.1:6379[3]>
quit:请求服务器关闭与当前客户端的连接,客户端关闭,服务端没关 1 127.0.0.1:6379[3]> quit 2 [root@localhost redis]#
client setname 名字:设置客户端连接的名称;client getname:获取客户端名称
1 127.0.0.1:6379> client setname 1710d 2 OK 3 127.0.0.1:6379> client getname 4 "1710d"
client list:返回所有连接到服务器的客户端信息和统计数据
1 127.0.0.1:6379> client list 2 id=4 addr=127.0.0.1:42926 fd=6 name=1710d age=133 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client
1 127.0.0.1:6379> config get bind 2 1) "bind" 3 2) "" 4 (获得绑定ip的参数)
shutdown:关闭客户端与服务端 1 127.0.0.1:6379> shutdown 2 not connected>
dbsize:返回数据库中所有key的数量;flushdb:清空当前数据库中的所有 key;flushall:清空整个 Redis 服务器的数据(删除所有数据库的所有 key );type key:查看key的类型;keys *: 匹配数据库中所有 key;
KEYS h*llo 匹配 hllo 和 heeeeello 等。
KEYS h[ae]llo匹配
hello和
hallo,但不匹配
hillo
1 127.0.0.1:6379> dbsize 2 (integer) 3 3 127.0.0.1:6379> keys * 4 1) "Name" 5 2) "age" 6 3) "name" 7 127.0.0.1:6379> type age 8 string
1 127.0.0.1:6379> get name 2 "test" 3 127.0.0.1:6379> dump name 4 "x00x04testx06x00x17}xc7 x99xa4x8cxd6"
exists key:检查给定的key是否存在;del key[key……]:删除给定的一个或多个key
1 127.0.0.1:6379> exists name 2 (integer) 1 3 127.0.0.1:6379> del age 4 (integer) 1 5 127.0.0.1:6379> del name Name 6 (integer) 2
move key 1:将当前数据库的 key 移动到给定的数据库 db 当中
1 127.0.0.1:6379> set name 1 2 OK 3 127.0.0.1:6379> move name 2 4 (integer) 1 5 127.0.0.1:6379> keys * 6 (empty list or set) 7 127.0.0.1:6379> select 2 8 OK 9 127.0.0.1:6379[2]> keys * 10 1) "name"
randomkey:从当前数据库中随机返回(不删除)一个 key 1 127.0.0.1:6379[2]> randomkey 2 "name"
ttl:以秒为单位,返回给定 key 的剩余生存时间,返回值:当 key 不存在时,返回 -2,当 key 存在但没有设置剩余生存时间时,返回 -1,否则,以秒为单位,返回 key 的剩余生存时间
pttl:
1 127.0.0.1:6379[2]> ttl name 2 (integer) -1 3 127.0.0.1:6379[2]> ttl k 4 (integer) -2 5 127.0.0.1:6379[2]> pttl name 6 (integer) -1
expire key 30:为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除;pexpire key 10000:
1 127.0.0.1:6379[2]> expire name 30 2 (integer) 1 3 127.0.0.1:6379[2]> ttl name 4 (integer) 20 5 127.0.0.1:6379[2]> pttl name 6 (integer) 14152 7 127.0.0.1:6379[2]> pexpire name 10000 8 (integer) 1 9 127.0.0.1:6379[2]> ttl name 10 (integer) 7 11 127.0.0.1:6379[2]> pttl name 12 (integer) 2738
persist key:移除给定 key 的生存时间,将这个 key 从『易失的』(带生存时间 key )转换成『持久的』
1 127.0.0.1:6379[2]> set k1 20 2 OK 3 127.0.0.1:6379[2]> ttl k1 4 (integer) -1 5 127.0.0.1:6379[2]> expire k1 20 6 (integer) 1 7 127.0.0.1:6379[2]> ttl k1 8 (integer) 17 9 127.0.0.1:6379[2]> persist k1 10 (integer) 1 11 127.0.0.1:6379[2]> ttl k1 12 (integer) -1
rename key namekey:将 key 改名为 namekey
1 127.0.0.1:6379[2]> rename k1 namekey 2 OK 3 127.0.0.1:6379[2]> keys * 4 1) "namekey"
5.string类型
set key value[EX 秒][PX 毫秒]:将字符串值 value 关联到 key 。如果 key 已经持有其他值, SET 就覆写旧值,无视类型;EX与PX都是设置生存时间;
get key:返回 key 所关联的字符串值。如果 key 不存在那么返回特殊值 nil
append key value:如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value;
decr key:如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECR 操作;(递减,只针对于数字)
decrby key 2:如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECRBY 操作;(给定要减去的数值,只针对于数字)
incr key:如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作;(递增,只针对于数字)
incrby key 2:如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCRBY 命令;(给定要增加的数值,只针对于数字)
mset key value[key value……]:同时设置一个或多个 key-value 对;
mget key[key……]:返回所有(一个或多个)给定 key 的值;
strlen key:返回 key 所储存的字符串值的长度;
setrange key 1 yyyy:
1 127.0.0.1:6379> set name 20 2 OK 3 127.0.0.1:6379> get name 4 "20" 5 127.0.0.1:6379> append name 2 6 (integer) 3 7 127.0.0.1:6379> get name 8 "202" 9 127.0.0.1:6379> get a 10 (nil) 11 127.0.0.1:6379> append a 2 12 (integer) 1 13 127.0.0.1:6379> get a 14 "2" 15 127.0.0.1:6379> decr a 16 (integer) 1 17 127.0.0.1:6379> get a 18 "1" 19 127.0.0.1:6379> get name 20 "202" 21 127.0.0.1:6379> decrby name 2 22 (integer) 200 23 127.0.0.1:6379> incr name 24 (integer) 201 25 127.0.0.1:6379> get name 26 "201" 27 127.0.0.1:6379> incrby name 2 28 (integer) 203 29 127.0.0.1:6379> mset 1 name 2 age 30 OK 31 127.0.0.1:6379> mget 1 2 32 1) "name" 33 2) "age" 34 127.0.0.1:6379> strlen name 35 (integer) 3 36 127.0.0.1:6379> setrange name 1 yyyy 37 (integer) 5 38 127.0.0.1:6379> get name 39 "2yyyy"
6.list类型
lpush key value[value……]:如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表头: 比如说,对空队列表 mylist 执行命令 LPUSH mylist a b c ,列表的值将是 c b a;rpush从右向左推;
lrange key:下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示,列表的第二个元素,以此类推,你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推
1 127.0.0.1:6379> lpush 1710d a b c 2 (integer) 3 3 127.0.0.1:6379> lrange 1710d 0 -1 4 1) "c" 5 2) "b" 6 3) "a"
lindex key index:下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示
列表的第二个元素,以此类推。你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推
1 127.0.0.1:6379> lrange 1710d 0 -1 2 1) "c" 3 2) "b" 4 3) "a" 5 127.0.0.1:6379> lindex 1710d -1 6 "a" 7 127.0.0.1:6379> lindex 1710d -2 8 "b" 9 127.0.0.1:6379> lindex 1710d 0 10 "c" 11 127.0.0.1:6379> lindex 1710d 2 12 "a"
llen key:如果 key 不存在,则 key 被解释为一个空列表,返回 0 .如果 key 不是列表类型,返回一个错误。
1 127.0.0.1:6379> llen 1710d 2 (integer) 3 3 127.0.0.1:6379> get key 4 (nil) 5 127.0.0.1:6379> llen key 6 (integer) 0 7 127.0.0.1:6379> type name 8 string 9 127.0.0.1:6379> llen name 10 (error) WRONGTYPE Operation against a key holding the wrong kind of value
lrem key count value:count 的值可以是以下几种:count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count ;count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值;count = 0 : 移除表中所有与 value 相等的值;从表头删除 count >0;从表尾 删除 count <0;全部删除 count =0
1 127.0.0.1:6379> lpush 1710d c c f b c a b c d f d b c a 2 (integer) 14 3 127.0.0.1:6379> lrange 1710d 0 -1 4 1) "a" 5 2) "c" 6 3) "b" 7 4) "d" 8 5) "f" 9 6) "d" 10 7) "c" 11 8) "b" 12 9) "a" 13 10) "c" 14 11) "b" 15 12) "f" 16 13) "c" 17 14) "c" 18 127.0.0.1:6379> lrem 1710d 0 a 19 (integer) 2 20 127.0.0.1:6379> lrange 1710d 0 -1 21 1) "c" 22 2) "b" 23 3) "d" 24 4) "f" 25 5) "d" 26 6) "c" 27 7) "b" 28 8) "c" 29 9) "b" 30 10) "f" 31 11) "c" 32 12) "c" 33 127.0.0.1:6379> lrem 1710d 2 d 34 (integer) 2 35 127.0.0.1:6379> lrange 1710d 0 -1 36 1) "c" 37 2) "b" 38 3) "f" 39 4) "c" 40 5) "b" 41 6) "c" 42 7) "b" 43 8) "f" 44 9) "c" 45 10) "c" 46 127.0.0.1:6379> lrem 1710d -2 b 47 (integer) 2 48 127.0.0.1:6379> lrange 1710d 0 -1 49 1) "c" 50 2) "b" 51 3) "f" 52 4) "c" 53 5) "c" 54 6) "f" 55 7) "c" 56 8) "c"
lpop key:移除并返回列表 key 的头元素
1 127.0.0.1:6379> lrange 1710d 0 -1 2 1) "c" 3 2) "b" 4 3) "f" 5 4) "c" 6 5) "c" 7 6) "f" 8 7) "c" 9 8) "c" 10 127.0.0.1:6379> lpop 1710d 11 "c" 12 127.0.0.1:6379> lrange 1710d 0 -1 13 1) "b" 14 2) "f" 15 3) "c" 16 4) "c" 17 5) "f" 18 6) "c" 19 7) "c"
7.set类型
sadd key member[member……]:合 key 当中,已经存在于集合的 member 元素将被忽略。假如 key 不存在,则创建一个只包含 member 元素作成员的集合
1 127.0.0.1:6379> sadd myset chjx chjx test 2 (integer) 2 3 127.0.0.1:6379> sadd myset chjx a 4 (integer) 1
smembers key:返回集合 key 中的所有成员
1 127.0.0.1:6379> smembers myset 2 1) "test" 3 2) "a" 4 3) "chjx"
sdiff key key2:不存在的 key 被视为空集。(差集,前面集合中有,后面集合中没有的元素);
sinter key key2:不存在的 key 被视为空集。当给定集合当中有一个空集时,结果也为空集(根据集合运算定律).(交集,两个集合共同拥有的元素);
sunion key key2:不存在的 key 被视为空集。(两个集合中的所有元素,并且去掉重复的);
1 127.0.0.1:6379> sadd myset1 chjx lisi test zhangsan 2 (integer) 4 3 127.0.0.1:6379> sadd myset2 chjx qianqi wangwu zhaoliu 4 (integer) 4 5 127.0.0.1:6379> sdiff myset1 myset2 6 1) "lisi" 7 2) "test" 8 3) "zhangsan" 9 127.0.0.1:6379> sinter myset1 myset2 10 1) "chjx" 11 127.0.0.1:6379> sunion myset1 myset2 12 1) "qianqi" 13 2) "zhangsan" 14 3) "wangwu" 15 4) "test" 16 5) "lisi" 17 6) "chjx" 18 7) "zhaoliu"
8.hash类型
hset key field value:如果 key 不存在,一个新的哈希表被创建并进行 HSET 操作。如果域 field 已经存在于哈希表中,旧值将被覆盖(hmset:是设置多个键值对)
hget key field:取值(hmget:获取多个)
1 127.0.0.1:6379> hset myhash name lisi 2 (integer) 1 3 127.0.0.1:6379> hget myhash name 4 "lisi"
hkeys key:返回哈希表 key 中的所有域
1 127.0.0.1:6379> hset myhash name lisi 2 (integer) 1 3 127.0.0.1:6379> hset myhash age 18 4 (integer) 1 5 127.0.0.1:6379> hkeys myhash 6 1) "name" 7 2) "age"
hvals key:返回哈希表 key 中所有域的值
1 127.0.0.1:6379> hvals myhash 2 1) "lisi" 3 2) "18"
hgetall key:返回哈希表 key 中,所有的域和值
1 127.0.0.1:6379> hgetall myhash 2 1) "name" 3 2) "lisi" 4 3) "age" 5 4) "18"
hincrby key field increment :为哈希表 key 中的域 field 的值加上增量 increment
1 127.0.0.1:6379> hgetall myhash 2 1) "name" 3 2) "lisi" 4 3) "age" 5 4) "18" 6 127.0.0.1:6379> hincrby myhash age 2 7 (integer) 20 8 127.0.0.1:6379> hgetall myhash 9 1) "name" 10 2) "lisi" 11 3) "age" 12 4) "20"
hlen key:返回哈希表 key 中域的数量 1 127.0.0.1:6379> hlen myhash 2 (integer) 2
hexists key field :查看哈希表 key 中,给定域 field 是否存在;
hdel key field[field……]:查看哈希表 key 中,给定域 field 是否存在;
1 127.0.0.1:6379> hexists myhash age 2 (integer) 1 3 127.0.0.1:6379> hdel myhash age 4 (integer) 1 5 127.0.0.1:6379> hexists myhash age 6 (integer) 0
9.zset类型(zset中有一个分数score的概念,可以通过这个score来对分数对应的元素排序)
zadd key score member[score member……]:如果某个 member 已经是有序集的成员,那么更新这个 member 的 score 值,并通过重新插入这个member 元素,来保证该 member 在正确的位置上。score 值可以是整数值或双精度浮点数。如果 key 不存在,则创建一个空的有序集并执行 ZADD 操作。当 key 存在但不是有序集类型时,返回一个错误;
zrange key start stop withscores:其中成员的位置按 score 值递增(从小到大)来排序(withscores连分一起查看);
1 127.0.0.1:6379> zadd myzset 70 lisi 80 zhangsan 90 wangwu 2 (integer) 3 3 127.0.0.1:6379> zrange myzset 0 -1 4 1) "lisi" 5 2) "zhangsan" 6 3) "wangwu" 7 127.0.0.1:6379> zrange myzset 0 -1 withscores 8 1) "lisi" 9 2) "70" 10 3) "zhangsan" 11 4) "80" 12 5) "wangwu" 13 6) "90"
zcard key:返回有序集 key 的基数(有几条数据) 1 127.0.0.1:6379> zcard myzset 2 (integer) 3
zcount key min max:返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的。(在区间内的元素个数) 1 127.0.0.1:6379> zcount myzset 70 80 2 (integer) 2
zincrby key increment member :为有序集 key 的成员 member 的 score 值加上增量 increment 1 127.0.0.1:6379> zincrby myzset 2 lisi 2 "72"
zrangebyscore key min max [withscores]:成员按 score 值递增(从小到大)次序排列(在区间内的元素)
1 127.0.0.1:6379> zrangebyscore myzset 70 80 2 1) "lisi" 3 2) "zhangsan" 4 127.0.0.1:6379> zrangebyscore myzset 70 80 withscores 5 1) "lisi" 6 2) "72" 7 3) "zhangsan" 8 4) "80
zrank key member:排名以 0 为底,也就是说, score 值最小的成员排名为 0 1 127.0.0.1:6379> zrank myzset lisi 2 (integer) 0
zrem key member[member……]:移除有序集 key 中的一个或多个成员,不存在的成员将被忽略(可以移除多个)
1 127.0.0.1:6379> zrem myzset lisi 2 (integer) 1 3 127.0.0.1:6379> zrem myzset wangwu zhangsan 4 (integer) 2
zremrangebyrank key start stop:移除有序集 key 中,指定排名(rank)区间内的所有成员
1 127.0.0.1:6379> zadd myzset 70 lisi 80 zhangsan 90 wangwu 2 (integer) 3 3 127.0.0.1:6379> zremrangebyrank myzset 0 1 4 (integer) 2 5 127.0.0.1:6379> zrange myzset 0 -1 6 1) "wangwu"
zremrangebyscore key min max:移除有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员
1 127.0.0.1:6379> zadd myzset 70 lisi 80 zhangsan 90 wangwu 2 (integer) 2 3 127.0.0.1:6379> zremrangebyscore myzset 70 80 4 (integer) 2
zrevrange key start stop [withscores]:其中成员的位置按 score 值递减(从大到小)来排列(从大到小排名输出;rev:reverse反转的缩写)
1 127.0.0.1:6379> zrevrange myzset 0 -1 2 1) "wangwu" 3 2) "zhangsan" 4 3) "lisi" 5 127.0.0.1:6379> zrevrange myzset 0 -1 withscores 6 1) "wangwu" 7 2) "90" 8 3) "zhangsan" 9 4) "80" 10 5) "lisi" 11 6) "70"
zrevrangebyscore key max min [withscores]:有序集成员按 score 值递减(从大到小)的次序排列
1 127.0.0.1:6379> zrevrangebyscore myzset 90 70 2 1) "wangwu" 3 2) "zhangsan" 4 3) "lisi" 5 127.0.0.1:6379> zrevrangebyscore myzset 90 70 withscores 6 1) "wangwu" 7 2) "90" 8 3) "zhangsan" 9 4) "80" 10 5) "lisi" 11 6) "70"
zrevrank key member:返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递减(从大到小)排序.(从大到小排序的排名)
1 127.0.0.1:6379> zrevrangebyscore myzset 90 70 withscores 2 1) "wangwu" 3 2) "90" 4 3) "zhangsan" 5 4) "80" 6 5) "lisi" 7 6) "70" 8 127.0.0.1:6379> zrevrank myzset lisi 9 (integer) 2
zscore key member:返回有序集 key 中,成员 member 的 score 值 1 127.0.0.1:6379> zscore myzset lisi 2 "70"