redis安装(windows)
该书中介绍的是使用cygwin软件进行安装,这里可以直接到github上面去下载,传送门,点击下图即可,可能网络会有点慢,毕竟外网。下载完成后解压得到的文件结构应该是下面这样的
在每次使用redis前需要启动redis服务,进入下载的redis目录的命令行,输入命令redis-server.exe redis.windows.conf
即可运行redis服务器
再启动了redis服务器之后,就可以创建redis客户端使用了,创建redis客户端:打开一个新的命令行窗口,输入命令redis-cli -h host -p port -a password
,host、port、password分别表示服务器地址、端口号和密码。创建成功之后,就可以开始redis的使用了
redis默认是没有密码的,如果想要设置密码,可以打开目录下的redis.windows.conf和redis.windows-server.conf文件,同时找到里面的requirepass并修改后面的值为你想要设置的密码并设置可用(删除前面的#号即可)
redis入门
热身–键值常用命令
KEYS pattern:获得符合指定通配符规则pattern的键名列表,通配符规则包括如下:
符号 | 含义 |
---|---|
? | 匹配一个字符 |
* | 匹配多个字符 |
[] | 匹配括号里面的任一个字符,可以使用-表示一个范围, |
/x | 匹配字符x,其中的/用于转义符号 |
EXISTS key:判断指定键是否存在
DEL key:删除指定键
TYPE key:获得指定键的值的数据类型
redis数据类型–字符串类型
字符串是redis中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据,比如json化的对象或者是一张图片。一个字符串类型键允许存储的数据的最大容量是512MB
字符串类型数据的赋值和取值命令:
//赋值
redis> SET key value
//取值 其中当键不存在时返回空结果(nil)
redis> GET key
也可以使用下面的命令来一次性获得/设置多个键值
//一次性设置多个键值
redis> MSET key1 value1 key2 value2...
//一次性获得多个键值
redis> MGET key1 key2 key3...
字符串类型可以存储任何形式的字符串,当存储的字符串是整数形式时,可以使用自增命令让其键值进行自增,有三种命令形式:
//让整数形式的键进行自增1
//如果进行自增的键存储的不是整数形式,就会报错(浮点数形式都不行)
redis> INCR key
//让整数形式的键自增指定值
redis> INCRBY key increment
//让浮点数形式的键自增指定值
redis> INCRBYFLOAT key increment
同样,想让整数形式的值进行自减也可以使用命令,有两种命令形式:
//让整数形式的值自减1
redis> DECR key
//让整数形式的值自减指定值
redis> DECRBY key decrement
不管是自增还是自减,其命令执行成功后的返回值都是自增或者自减后的key键值
通过命令redis> APPEND key value
可以向key键值尾部追加内容values组成新的字符串
通过命令redis> STRLEN key
可以获得key键值字符串的长度
redis数据类型–散列类型
redis中的散列类型的键值是一种字典结构,它存储了字段和字段值的映射,但是字段值只能是字符串类型,一个散列类型键最多可以包含2^32-1个字段
散列类型的键值的设置和获取的命令格式如下:
//设置散列类型键值
redis> HSET obj key value
//获取散列类型指定键值的字段值
redis> HGET obj key
//想要一次性赋值多个字段
redis> HMSET obj key1 value1 key2 value2...
//想要一次性获取多个字段值
redis> HMGET obj key1 key2 ....
//想要一次性获得指定键值的所有字段和字段值
//将会以字段、字段值的顺序依次逐行打印
redis> HGETALL obj
//只想要一次性获取指定键值的所有字段
redis> HKEYS obj
//只想要一次性获取指定键值的所有字段值
redis> HVALS obj
个人看法:可以将redis中的散列类型键值看成是一个对象,其中的字段和字段值可以看成是对象的属性和属性值。形如命令redis> HSET obj key value
可以看成是java中的对象:obj.key=value;
散列类型主要的几个工具命令如下:
//判断字段是否存在
redis> HEXISTS obj key
//当字段不存在时赋值,如果字段以存在则不进行任何操作
redis> HSETNX obj key value
//让整数类型的字段自增指定值
redis> HINCRBY obj key increment
//删除指定键值对应的字段,可以删除多个字段
redis> HDEL obj key1 key2...
//获取指定键值对应的字段数量
redis> HLEN obj
redis数据类型–列表类型
redis中的列表类型可以存储一个有序的字符串列表,redis中的列表类型数据可以看成是一个双端队列,可以向队列的两端添加元素。在redis内部的列表类型是使用双向链表实现的,所以向两端添加元素的时间复杂度为O(1),获取越接近两端的元素速度越快。与散列类型一样,一个列表类型的键最多能容纳2^32-1个元素
使用列表类型保存值好处在于:可以快速的获取最新或者最久远的数据,通常可用于获取最近更新的数据等。不过它的缺点在于:毕竟是使用链表来实现的,所以想要获取精确位置的元素速度还是比较慢的
向列表类型中添加/获取元素的命令主要有如下几个:
//向列表左端添加元素
//可以一次性添加多个元素
redis> LPUSH key val1 val2
//向列表右端添加元素
redis> RPUSH key val1 val2
//从列表左端弹出一个元素
redis> LPOP key
//从列表右端弹出一个元素
redis> RPOP key
//只获取指定位置的值而不弹出该元素
//可以使用该命令将列表当成数组来使用
//如果index为负数,则从右端-1开始计算
redis> LINDEX key index
列表类型的几个常用的工具命令如下:
//获取列表中元素的个数
redis> LLEN key
//获取列表的元素片段[start,stop]
//如果为正数,则从左端以0开始
//如果为负数,则从右端以-1开始
redis> LRANGE key start stop
//删除key列表中指定的值value的元素个数count
//如果count大于0,则表示从左端开始删除count个值为value的元素
//如果count小于0,则表示从右端开始删除-count个值为value的元素
//如果count等于0,则表示删除所有值为value的元素
redis> LREM key count value
//删除指定片段[start,stop]以外的所有列表值
//该命令可以用来实现:保留最新的十条新闻,每次进行LTRIM 0,10
redis> LTRIM key start stop
//想列表中的指定元素value1插入指定值value2
//通过before、after指定插入之前还是之后
redis> LINSERT key after/before value1 value2
//将列表source右端的元素弹出并转到列表dest的左端
redis> RPOPLPUSH source dest
redis数据类型–集合类型
redis中的集合类型主要是java中Set集合,里面的元素的值是无序的并且不能重复。redis集合类型内部主要是通过值为空的散列类型实现的,一个集合类型键可以存储最多2^32-1个字符串
无序集合类型主要的设置元素的命令如下:
//向集合中添加一个或者多个元素
redis> SADD key val1 val2...
//删除集合中的一个或者多个元素值(返回删除的元素个数)
redis> SREM key val1 val2...
//获取集合中的所有元素
//元素值是无序随机排列的
redis> SMEMBERS key
//判断元素是否在指定集合中
redis> SISMEMBER key value
//获取集合中的元素个数
redis> SCARD key
//从集合中随机弹出一个元素
redis> SPOP key
//随机获得集合中的count个值
//如果count大于0,则会随机获取不重复的count个元素,如果大于集合元素个数,则会返回全部元素
//如果count小于0,则会随机获取可能重复的count个元素
redis> SRANDMENBER key count
redis集合类型还提供了一系列集合间的操作方法,比如交集、并集、差集等。主要命令如下:
//执行多个集合间的差集运算,形如:key1-key2-...
//表示只存在与key1集合中的元素列表
redis> SDIFF key1 key2...
//执行交集运算,表示多个集合共有的元素列表
redis> SINSERT key1 key2...
//执行并集运算
redis> SUNION key1 key2...
上面的三个集合间的运算结果都会直接输出返回,如果想要保存可以使用如下三个对应的命令:
//将结果存储于dest集合中
//差集
redis> SDIFFSTORE dest key1 key2...
//交集
redis> SINSERTSTORE dest key1 key2...
//并集
redis> SUNIONSTORE dest key1 key2...
redis数据类型–有序集合类型
有序集合类型相对于前面的集合类型来说的区别就在于它是有顺序的,类似于java中的普通Set和SortSet的区别
有序集合类型相对于前面的列表类型来说的区别就类似于数组和链表的区别
redis中的有序集合类型是使用散列表和跳表实现的,所以访问元素的速度为O(n)
有序集合类型的元素的值的顺序是通过分数来确定的,所以设置元素的值需要额外设置它的分数。有序集合类型设置元素的常用命令如下:
//想集合key增加元素并设置他的分数和值,如果value已存在则替换分数
redis> ZADD key score value
//获得元素的分数
redis> ZSCORE key member
//按照分数从小到大的顺序返回[start,stop]的所有元素值
//其中添加withscores可以指定显示对应的分数
redis> ZRANGE key start stop [WITHSCORES]
//按照分数从大到小的顺序返回[start,stop]的所有元素值
redis> ZREVRANGE key start stop [WITHSCORES]
//获取指定分数范围内的元素,可以指定分页显示多少数据
//如果想要不包含开头元素或结尾元素值,可以使用(start或者(stop
//即添加一个(
redis> ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
//增加某个元素value的分数,增值为increment,也可以为负数,表示减值
redis> ZINCRBY key increment value
//获得集合中的元素数量
redis> ZCARD key
//获得指定分数范围内的元素数量
redis> ZCOUNT key min max
//删除一个或者多个元素
redis> ZREM key val1 val2...
//删除按照分数从小到大排序后的[start,stop]范围的元素
redis> ZREMRANGEBYRANK key start stop
//删除指定分数范围内的元素
redis> ZREMRANGBYSCORE key min max
//获得指定元素value在key集合中的排名(按照分数从小到大的顺序)
redis> ZRANK key value
//获得指定元素value在key集合中的排名(按照分数从大到小的顺序)
redis> ZREVRANK key value