Redis官网
https://redis.io/
Redis中国官方站
http://www.redis.cn/
Redis简介
开源(开发语言ANSI C)的内存中数据结构存储系统,用途:数据库、缓存和消息中间件。
Redis windows安装使用
关于下载:redis.io官网上只提供linux版本,windows需要github上下载,微软fork的一份有提供windows编译的安装包,地址:https://github.com/MicrosoftArchive/redis/tags
下载后解压,运行命令可以一次性启动redis server:redis-server redis.windows.conf
使用redis client连接server:ping 返回pong
redis注册为windows服务(留在以后再补充)
redis支持多种数据结构
Redis Key值是二进制安全的,这意味着可以用任何二进制序列作为key值,从字符串到JPEG图片都可以。空字符串也是有效key值。
开始之前有三条规则,这三条规则适用于所有的数据类型
- 当我们向一个聚合数据类型中添加元素时,如果目标键不存在,就在添加元素前创建空的聚合数据类型。(string不是聚合类型)
- 当我们从聚合数据类型中移除元素时,如果值仍然是空的,键自动被销毁。
- 对一个空的 key 调用一个只读的命令,比如
LLEN
(返回 list 的长度),或者一个删除元素的命令,将总是产生同样的结果。该结果和对一个空的聚合类型做同个操作的结果是一样的。
(1)字符串(strings)
set mykey value
get mykey
set counter 100
incr counter #incr是原子操作,会尝试转换成整形后再加1。
incrby counter 50 #原子操作
decr counter #原子操作
decrby counter 50 #原子操作
getset key value #应该不常用,设置新值,获得旧值,如果key不存在则返回nil。如果类型不匹配则返回错误。
mset a 10 b 20 c 30 #一次存储多个key对应的值
mget a b c #一次获取多个keyi对应的值,返回的值是个数组
(2)列表(lists)
redis的list是有序元素的序列,采用linked-list数据结构存储,因此在list头部或尾部添加一个元素时间复杂度都是0(N),
rpush list a #
lpush list a #
lrange list index1 index2 #用于取出index1和index2之间的值序列,-1表示最后一个元素,-2表示倒数第二个元素,0表示最左边的元素,1表示左边第二个元素
rpop list # 删除右侧最后一个元素,并返回删除的元素值,如果序列长度为0则返回nil
lpop list #删除左侧最后一个元素,并返回删除的元素值,如果序列长度为0则返回nil
ltrim list index1 index2 #从左侧index1位置开始到index2位置结束进行截取,其余删除,无rtrim
brpop list timeout # 阻塞返回,如果超时时间内有值则返回,如果超过超时时间没值则返回nil,如果有很多阻塞pop则排队。
blpop list timeout # 阻塞返回,如果超时时间内有值则返回,如果超过超时时间没值则返回nil,如果有很多阻塞pop则排队。
llen list #返回列表长度
(3)散列(hashes)
hset key field value # field没限制,主要看内存
hget key filed #
hmset key field value [field value ...] #
hmget key field [field ...] #
hgetall key #
hincr key field #不存在,只存在hincrby指令
hincrby key field increment#
hdel key field [field ...] #
hexists key field #
hkeys key # 得到所有域
hlen #得到域的个数
hstrlen key field #返回域值字符串的长度
hvals key #返回所有域对应的值
hscan key cursor [MATCH pattern] [COUNT count] # 跟scan类似
(4)集合(sets)无序
sadd key [member ...] # 添加元素,如果元素存在则加入失败
spop key # 删除元素,并返回
srem key member [member ...] # 删除元素,返回个数
smove source destination member # 把member元素从source移到destination
smembers key # 返回元素,但是顺序不保证
scard key #集合元素个数
sismember key member # 1存在,0不存在
sinter key [key ...] #【交集】取交集
sinterstore destination [key ...] # 【交集】
sunion key [key ...] #【并集】取并集,并把元素以列表显示出来
sunionstore destination key [key ...] #【并集】 把并集复制给destination,如果只有一个集合,那么就是复制功能
sdiff key [key ...] #【差集】
sdiffstore destination [key ...] # 【差集】
srandmember key [count] # (1)只有key参数,则随机返回一个member,仅返回一个随机member并不删除(2)key 和 一个正整数,则随机返回count个不同的member,如果count大于集合元素个数,则返回所有元素(3)key和一个负整数,如果负整数绝对值小于元素个数,则返回不重复的数,如果大于元素个数,则随机返回重复的数。个数保持负整数绝对值
sscan key cursor [MATCH pattern] [COUNT count] #
(5)有序集合(sorted sets)
(6)其他
bitmaps/hyperloglogs/geospatial
(7)一些很重要的命令
keys pattern #pattern可以支持通配符 * ?
exists key #返回1表示key存在,返回0表示不存在
del key #返回1表示key存在且已经被删除,返回0表示key不存在
type key #返回key对应值的存储类型,none表示key不存在
expire key number #设置超时时间number秒,ttl可以看倒计时时间,也可以在set时设置, ex seconds ,px 毫秒
scan cursor [MATCH pattern] [COUNT count] # 通过迭代的方式取得所有的key,以scan 0开始,返回的值分为两部分,第一部分为下次迭代的游标,第二部分为返回的key列表,接下来scan 接返回的游标,如果游标为0则已经返回了所有,如果非0一直持续下去直到得到0为值,此工具是为了应对keys和smembers返回时间较长的场景而准备的。 match参数可以过滤返回值,可以用*和?,count为返回值的数量,一般是大于这个值
redis重要特性
redis事务
redis备份 -save
redis还原 把dump.rdb放到redis目录,启动redis server即可
redis安全 -设置密码 config set requirepass "password"
-auth "password"
windows下如何设置密码
redis.windows-service.conf中添加requirepass password