Redis学习笔记

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值。

开始之前有三条规则,这三条规则适用于所有的数据类型

  1. 当我们向一个聚合数据类型中添加元素时,如果目标键不存在,就在添加元素前创建空的聚合数据类型。(string不是聚合类型)
  2. 当我们从聚合数据类型中移除元素时,如果值仍然是空的,键自动被销毁。
  3. 对一个空的 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

原文地址:https://www.cnblogs.com/yaochc/p/8546843.html