官网地址
windows
(下面全部使用3.2.100版本测试)
本地测试,先用windows64的笔记本试试水。
下载与安装
官网中应该没有直接提供win64版的下载地址,我是在这篇文章中找到的。本节大部分内容也出于此
https://www.cnblogs.com/jylee/p/9844965.html
下载地址:
https://github.com/MicrosoftArchive/redis/releases
点击 Redis-x64-3.2.100.zip
解压后,在dos中进入到根目录下,执行
安装命令:redis-server.exe --service-install redis.windows.conf --loglevel verbose
启动服务命令:redis-server.exe --service-start
关闭服务命令:redis-server.exe --service-stop
从返回的信息可以看到,redis已成功注册为服务,并且已成功启动。
默认端口 6379
进入redis客户端
在根目录下执行
redis-cli.exe -h 127.0.0.1 -p 6379
其中,127.0.0.1是ip,6379是端口号。
本地测试的话,可以简写为
redis-cli
随便执行以下set、get命令
输入exit退出
各种命令
官方地址:
https://redis.io/commands
基本
clear #cmd下清屏
flushall #清除全部key
keys partten #查询正则表达式匹配的key
type key #返回key的值得类型
del key #删除一个key
exists key [key...] #测试key是否已存在,返回存在的key的数量
dbsize #返回已设置key的数量
select index #选择0~15的库
move key dbindex #将key移动到别的库
通用:
- 在一些范围类的命令中,指定的数值默认为闭区间,开区间需要加圆括号,比如
(1
相当于 > 1
失效时间
expire key seconds #设置key的有效时间 单位为秒
persist key #设置有时效性的key为持久key
ttl key #获取key的剩余有效时间,持久key返回-1,key不存在返回-2,具体时间返回秒数
#https://redis.io/commands/expire 根据文档所述,DEL, SET, GETSET and all the *STORE commands命令会清除失效时间,
#感觉应该特别记一下
String
set key value #最基本的设置键值对操作
get key #取值
incr key #指定key自增,并返回自增后的值,只对数值型有效。(应该能当做数据库序列的替代品。。。)
incrby key increment #指定key加上指定值
decr key #反incr
decrby key decrement #反incrby
incrbyfloat key BY increment #加浮点数
append key value #向末尾增加值,并返回字符串长度
strlen key #返回字符串长度
mset key value [key value...] #同时设置多个key
mget key [key...] #同时获取多个key值
list
这是个链表
rpush key value [value...] #向右侧添加元素
lpush key value [value...] #向左..............................
llen key #获取list的长度
lrange key start end #获取start到end之间的全部值。若取全部list值,可以 lrange key 0 -1
ltrim key start end #截取list,或者说,把start到end之外的删除。
#有意思的是,ltrim并没有“下标越界”这种说法,
#因此可以获得del命令之外的清除list的方法, ltrim list 1 0
#但是在调用`keys *`后发现,ltrim与del的结果一样,还是别整这些花里胡哨的东西,直接del吧。
lindex key index #返回指定下标的值。相当于java.util.List.get()方法
lset key index value #给指定下标赋值(这回又有“下标越界”了)
lrem key count value #左侧开始,删除指定数目的value
lpop key #左侧开始pop
rpop key #右侧开始pop
rpoplpush src des #右侧pop并添加到下一个list的左侧。rpoprpush、lpoplpush以及lpoprpush表示不服(笑)
在编程中,我们经常会事先建立一个空的list,并在之后动态的向其中添加值,不过redis中好像无法显式的创建空list。
但是,即使不显式的声明list,也照样可以对一个从未设置过得key进行list命令的一系列操作,并返回我们所期待的值。
有点不习惯啊。
set
好像与java中的set相似,无序不重复集合
sadd key member [member...] #向集合中添加值
srem key member [member...] #在集合中删除值
spop key [count] #随机pop掉count数量的值,默认1个
smove src desc member #把指定值从src移到des
scard key #就是.size()
sismember key member #验证key中是否存在指定member,返回1有,0没有
smembers key #返回全部值
sinter key [key...] #求交集,若只带一个参数,好像相当于smembers
sinterstore des key [key...] #从单词上看,求交集后又加个存储。就是把求得的交集存到des中。看来可以实现“复制”一类的功能
sunion key [key...] #求并集
sunionstore des key [key...] #求并集后存储到des中
sdiff key [key...] #求差集(前面有后面没有的)
sdiffstore des key [key...] #又是这个套路。。。
srandmember key [count] #随机返回count个值。(注意,返回的值在一次调用中是不重复的,set中的每个值只会返回1次)
zset
有序集合
zadd key [NX|XX] [CH] [INCR] score member [score member...] #添加元素,score代表排序分数。
- XX: Only update elements that already exist. Never add elements.
- NX: Don’t update already existing elements. Always add new elements.
- CH: Modify the return value from the number of new elements added, to the total number of elements changed (CH is an abbreviation of changed). Changed elements are new elements added and elements already existing for which the score was updated. So elements specified in the command line having the same score as they had in the past are not counted. Note: normally the return value of ZADD only counts the number of new elements added.
- INCR: When this option is specified ZADD acts like ZINCRBY. Only one score-element pair can be specified in this mode.
简单测试了一下,nx就是若元素存在,则不会改变排序,xx相反。ch看起来只是会返回个修改数。
zscore key member #返回元素的分数
zrange key start end #按照分数排序后,获取排名在start到end之间的键
zrevrange key start end #rev是倒序的意思
zrangebyscore key min max [WITHSCORES] [LIMIT offset count] #按照分数获取元素
默认闭区间,开区间需要用到圆括号"(1" ,例
zrangebyscore zset (1 (10
limit与mysql中的用法相似。
zincrby key increment member #增加元素的分数
zcard key #返回集合内元素的个数
zcount key min max #返回分数范围内的元素个数
zrem key member [member...] #删除元素
zremrangebyrank key start end #按照排名删除元素
zremrangebyscore key min max #按照分数删除元素
zrank key value #获取值的排名,注意:排名是从零开始的,或许将rank翻译成下标更合适些?
zrevrank key value #rev是“反向”的意思
hash
hset key field value #添加单个值
hmset key field value [field value...] #添加多个值
hget key field #获取多个值
hmget key field [field...] #获取多个值
hgetall key #获取全部值(总觉得前几个数据类型也应该加一个这种方法。。。)
hexists key field #键是否存在 1存在 0不存在
hsetnx key field value #若键不存在,则赋值,否则不做任何操作并返回0
hdel key #删除指定键
hkeys key #返回全部键
hvals key #返回全部值
hlen key #返回键的数量
由于无法显式的指定类型,并且没有“继承”一类的概念(好像),导致这些命令无法使用“重载”的设计方法。要额外多记不少命令啊。
java中redis的基本用法
加载jar包
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.6.2</version>
</dependency>
jedis
建立连接
public static void main(String[] args) {
Jedis jd = new Jedis("localhost", 6379);
System.out.println(jd.dbSize());
}
然后就会发现jd
可以调用全部的redis方法,并且在此基础之上又有一些经过封装的代码。
未完待续。。。