redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库。是完全开源免费的,用C语言编写的,遵守BSD协议,高性能的(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库。
(1)下载安装链接
https://github.com/microsoftarchive/redis/releases
Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。其通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如下:
进入到redis目录中,执行以下命令,redis-server.exe redis.windows.conf
D:\DevSoft\redis\redis>redis-server.exe redis.windows.conf
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 3.0.504 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
| `-._ `._ / _.-' | PID: 19360
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
[19360] 04 Nov 08:36:59.203 # Server started, Redis version 3.0.504
[19360] 04 Nov 08:36:59.205 * DB loaded from disk: 0.000 seconds
[19360] 04 Nov 08:36:59.206 * The server is now ready to accept connections on port 6379
进入到redis目录中,执行以下命令 redis-cli.exe -h 127.0.0.1 - p 6379 ,其中,-h 表示ip地址,-p 表示redis的端口,如果是执行redis-cli.exe 没有后面的参数,则参数默认值ip是127.0.0.1,端口是6379,数据库是第0个
D:\DevSoft\redis\redis>redis-cli.exe -h 127.0.0.1 -p 6379
127.0.0.1:6379>
如果设置了密码,则进入执行指令需要进行密码验证
127.0.0.1:6379> get a
(error) NOAUTH Authentication required.
127.0.0.1:6379>
auth password(设置的密码)为认证密码
127.0.0.1:6379> auth 1
OK
127.0.0.1:6379> config set requirepass 11
OK
在配置redis.windows.conf中修改requirepass参数的值即可,然后重启服务,或者执行以下指令
requirepass 1
数据库的数量是可以配置的,默认情况下是16个。修改redis.window.config下的databases指令,不可以通过命令的方式来扩展库。 在配置文件里面修改databases属性即可
databases 16
一个redis默认启动的时候,有16个库(0-15),这个可以动态的指定的,每个数据库都有属于自己的空间,不必担心之间的key冲突。需要注意的一个问题是,只有单机的情况,才会有多个库,如果集群的情况,只有db 0 了,切换指令如下
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> dbsize
(integer) 2
清空当前数据库的键值对指令:flushdb,完成之后再查询数据库大小为0
127.0.0.1:6379[1]> flushdb
OK
127.0.0.1:6379[1]> dbsize
(integer) 0
127.0.0.1:6379[1]>
127.0.0.1:6379[1]> flushall
OK
不同数据库之间数据是不能互通的,move移动键到指定数据库,指令:move key n (在当前数据库移动key到数据库n)
# 切换数据库第0个
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> set a a
OK
# 切换数据库第1个
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> set b b
OK
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> move a 1
(integer) 1
1、ping
检测连接是否存活
2、echo xxx
在命令行打印内容
3、quit、exit
退出客户端
4、shutdown
退出服务器端
5、info
返回redis相关信息
127.0.0.1:6379> keys *
1) "a"
2) "b"
指令:EXISTS Key ,存在的则返回1,不存在则返回0
# 存在key值a
127.0.0.1:6379> EXISTS a
(integer) 1
# 不存在key值aa
127.0.0.1:6379> EXISTS aa
(integer) 0
TTL Key: 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。
当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以秒为单位,返回 key 的剩余生存时间。
注意:
在 Redis 2.8 以前,当 key 不存在,或者 key 没有设置剩余生存时间时,命令都返回 -1 。
# 不存在的key
127.0.0.1:6379> ttl c
(integer) -2
# 存在的key,但是没有设置剩余生存时间
127.0.0.1:6379> ttl a
(integer) -1
# 有剩余生存时间的 key
127.0.0.1:6379> ttl b
(integer) 97
Redis DEL 命令用于删除已存在的键。不存在的 key 会被忽略 ,当 key 不存在时,返回 0 。 当 key 存在返回 1
del key
3、EXPIRE key seconds
为key设置过期时间(秒)
4、EXPIRE key timestamp
用时间戳的方式给key设置过期时间
5、PEXPIRE key milliseconds
设置key的过期时间以毫秒计
# 仅当newkey不存在时,将key改名为newkey
RENAME key newkey
指令:SET key value
说明:设置key的值为value
# 设置key为a的value值为a
127.0.0.1:6379> set a a
OK
指令:get key
说明:获取key的value值
127.0.0.1:6379> get a
"a"
指令:SETEX key seconds value
说明:将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。
127.0.0.1:6379> get a
"50"
127.0.0.1:6379> setex a 100 88
OK
127.0.0.1:6379> get a
"88"
127.0.0.1:6379> ttl a
(integer) 96
GETSET key value:返回key中字符串值的子字符
127.0.0.1:6379> get a
"abcd"
127.0.0.1:6379> GETRANGE a 1 3
"bcd"
127.0.0.1:6379>
1、GETSET key value
将给定key的值设为value,并返回key的旧值
//示例,设置key为a的新值123,返回旧值abcd
127.0.0.1:6379> getset a 123
"abcd"
2、MGET KEY1 KEY2
获取一个或者多个给定key的值
//示例
127.0.0.1:6379> get a
"123456789"
127.0.0.1:6379> get b
"abc"
127.0.0.1:6379> mget a b
1) "123456789"
2) "abc"
3、SETNX key value
只有在 key 不存在时设置 key 的值。
//示例
127.0.0.1:6379> get aa
(nil)
127.0.0.1:6379> setnx aa a
(integer) 1
127.0.0.1:6379> get aa
"a"
4、STRLEN key
返回 key 所储存的字符串值的长度。
//示例
127.0.0.1:6379> set a 123456789
OK
127.0.0.1:6379> strlen a
(integer) 9
5、MSET key value [key value ...]
同时设置一个或多个 key-value 对。
//示例:同时设置key vlaue键值对,a:1 b:2 c:3
127.0.0.1:6379> mset a 1 b 2 c 3
OK
127.0.0.1:6379> get c
"3"
127.0.0.1:6379> get b
"2"
6、MSETNX key value [key value ...]
同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
//示例
127.0.0.1:6379> msetnx aaa 1 bbb 2
(integer) 1
7、PSETEX key milliseconds value
这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。
8、INCR key
将 key 中储存的数字值增一。
//示例
127.0.0.1:6379> set a 1
OK
127.0.0.1:6379> incr a
(integer) 2
127.0.0.1:6379> get a
"2"
9、INCRBY key increment
将 key 所储存的值加上给定的增量值(increment) 。
//示例
127.0.0.1:6379> set a 1
OK
127.0.0.1:6379> incrby a 123
(integer) 124
10、INCRBYFLOAT key increment
将 key 所储存的值加上给定的浮点增量值(increment) 。
//示例
127.0.0.1:6379> set a 100
OK
127.0.0.1:6379> INCRBYFLOAT a 1.5
"101.5"
11、DECR key
将 key 中储存的数字值减一。
//示例
127.0.0.1:6379> get a
"99"
127.0.0.1:6379> decr a
(integer) 98
12、DECRBY key decrement
key 所储存的值减去给定的减量值(decrement)
//示例
127.0.0.1:6379> get a
"88"
127.0.0.1:6379> decrby a 10
(integer) 78
13、APPEND key value
如果 key 已经存在并且是一个字符串, APPEND 命令将 指定value 追加到改 key 原来的值(value)的末尾
//示例
127.0.0.1:6379> set a abc
OK
127.0.0.1:6379> append a 123
(integer) 6
127.0.0.1:6379> get a
"abc123"
Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象 , Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)
指令:hset key field value
说明:将哈希表 key 中的字段 field 的值设为 value。重复设置同一个field会覆盖,返回0
127.0.0.1:6379> hset a name abcd
(integer) 0
127.0.0.1:6379> hset a name2 1abcd
(integer) 1
指令:hmset key field1 value1 [field2 value2…]
说明:同时将多个 field-value (域-值)对设置到哈希表 key 中
# 设置hashmap的key值为a,field-value新增name:abc age:20
127.0.0.1:6379> hmset a name abc age 20
OK
指令: hsetnx key field value:
说明:只有在字段 field不存在时,设置哈希表字段的值 ,设置成功返回1,不成功返回0
127.0.0.1:6379> hsetnx a name 123
(integer) 0
127.0.0.1:6379> hsetnx a name3 123
(integer) 1
指令:hget key field value
说明:获取存储在哈希表中指定字段的值
127.0.0.1:6379> hget a name
"abcd"
指令:hkeys key
说明:获取所有字段field
127.0.0.1:6379> hkeys a
1) "name"
2) "description"
3) "b"
4) "age"
指令:hvals key
说明:获取所有值value
127.0.0.1:6379> hvals a
1) "abcd"
2) "a"
3) "c"
4) "20"
指令:hmget key field1 [field2…]
说明:获取所有给定字段的值
127.0.0.1:6379> hmget a name name3
1) "abcd"
2) "123"
查看哈希表a中,指定的字段值a是否存在,存在返回1,不存在返回0
127.0.0.1:6379> hexists a a
(integer) 0
指令 :hdel key field1 [field2…]
说明:删除哈希表key中一个/多个field字段
127.0.0.1:6379> hdel a name2 name3
(integer) 2
1、hlen key: 获取哈希表中字段的数量
127.0.0.1:6379> hlen a
(integer) 4
2、hgetall key: 获取在哈希表key 的所有字段和值
127.0.0.1:6379> hgetall a
1) "name"
2) "abcd"
3) "description"
4) "a"
5) "b"
6) "c"
7) "age"
8) "20"
3、hincrby key field n: 为哈希表 key 中的指定字段的整数值加上增量n,并返回增量后结果 一样只适用于整数型字段
127.0.0.1:6379> hget a age
"32"
127.0.0.1:6379> hincrby a age 12
(integer) 44
4、hincrbyfloat key field n: 为哈希表 key 中的指定字段的浮点数值加上增量 n。
127.0.0.1:6379> hget a age
"44"
127.0.0.1:6379> hincrbyfloat a age 3.5
"47.5"
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边),也可以获取指定范围指定下标的元素等。一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
消息队列、栈、文章列表等
(1)指令:lpush/rpush key value1[value2…]
说明:从左边/右边向列表中PUSH值(一个或者多个)
# 在user列表中,添加a b c
127.0.0.1:6379> lpush user a b c
(integer) 3
127.0.0.1:6379> rpush user b
(integer) 4
(2)指令:lpushx/rpushx key value
说明:向已存在的列名中push值(一个或者多个),list不存在 lpushx失败
127.0.0.1:6379> lpushx user e
(integer) 5
# 向use1r中新增值e,不存在则返回0
127.0.0.1:6379> lpushx use1r e
(integer) 0
(3)指令:linsert key before|after pivot value
说明:在指定列表元素的前/后 插入value
返回值:如果命令执行成功,返回插入操作完成之后,列表的长度。 如果没有找到 pivot ,返回 -1 。 如果 key 不存在或为空列表,返回 0 。
# 在c的前面新增值1
127.0.0.1:6379> linsert user before c 1
(integer) 6
# 在c的后面新增值2
127.0.0.1:6379> linsert user after c 2
(integer) 7
(1)指令:lindex key index
说明:通过索引获取列表元素
# 获取user列表index为2的值
127.0.0.1:6379> lindex user 2
"c"
(2)指令:lrange key start end
说明: 获取list 起止元素 (索引从左往右 递增)
# 获取user列表index为1-3的值
127.0.0.1:6379> lrange user 1 3
1) "1"
2) "c"
3) "2"
(3)指令:llen key
说明: 查看列表长度
127.0.0.1:6379> llen user
(integer) 7
指令:lset key index value
说明:通过索引为元素设值
# 设置user列表index为1的值
127.0.0.1:6379> lset user 1 123
OK
(1)指令:lpop/rpop key
说明:从最左边/最右边移除值 并返回。 值在键在,值光键亡
127.0.0.1:6379> lpop user
"c"
(2)指令:ltrim key start end
说明:通过下标截取指定范围内的列表
127.0.0.1:6379> ltrim user 0 1
OK
(1)指令:sadd key member1[member2…]
说明: 向集合中无序增加一个/多个成员
127.0.0.1:6379> sadd stu a b c
(integer) 3
(1)指令:scard key
说明: 获取集合的成员数
127.0.0.1:6379> scard stu
(integer) 3
(2)指令: smembers key
说明: 返回集合中所有的成员
127.0.0.1:6379> smembers stu
1) "a"
2) "b"
3) "c"
(3)指令: sismember key member
说明: 查询member元素是否是集合的成员,若存在返回1,不存在返回0
127.0.0.1:6379> sismember stu a
(integer) 1
指令:srem key member1[member2…]
说明: 移除集合中一个/多个成员
127.0.0.1:6379> srem stu a b
(integer) 2
在有序集合中保留了不能有重复成员的特性,但其中的成员是可以排序的,每一个元素都会关联一个double类型的分数(score)作为排序依据,score相同时按字典顺序排序。redis正是通过分数来为集合中的成员进行从小到大的排序。
排行榜系统,成绩单,工资表
(1)指令: zadd key score member1 [score2 member2]
说明: 向有序集合添加一个或多个成员,或者更新已存在成员的分数
//新增key为info的值num,序号为1,添加成功,返回1
127.0.0.1:6379> zadd info 1 num
(integer) 1
//新增key为info的值num,前面已添加,添加失败,返回0
127.0.0.1:6379> zadd info 1 num
(integer) 0
//新增key为info的值num2,序号为2,添加成功,返回1
127.0.0.1:6379> zadd info 2 num2
(integer) 1
(1)指令: zscore key member
说明: 返回有序集中,成员的分数值
127.0.0.1:6379> zscore info num
"1"
127.0.0.1:6379> zscore info num2
"2"
(2)指令:zcard key
说明: 获取有序集合的成员数
127.0.0.1:6379> zcard info
(integer) 2
(3)指令:zcount key min max
说明: 计算在有序集合中指定区间score的成员数
127.0.0.1:6379> zcount info 1 3
(integer) 3
127.0.0.1:6379> zcount info 1 4
(integer) 4
(4)指令:zrank key member
说明: 返回有序集合中指定成员的索引
127.0.0.1:6379> zrank info num2
(integer) 1
(5)指令:zrevrank key member
说明: 返回有序集合中指定成员的索引,从大到小排序
127.0.0.1:6379> zrevrank info num3
(integer) 1
127.0.0.1:6379> zrevrank info num
(integer) 3
(6)指令:zrange key start end
说明: 通过索引区间返回有序集合成指定区间内的成员
127.0.0.1:6379> zrange info 0 10
1) "num"
2) "num2"
3) "num3"
4) "num4"
(7)指令:zrange key start end withscores
说明: 通过索引区间返回有序集合成指定区间内的成员包括score
127.0.0.1:6379> zrange info 0 10 withscores
1) "num"
2) "1"
3) "num2"
4) "2"
5) "num3"
6) "3"
7) "num4"
8) "4"
(1)指令: zrem key member1 [member2…]
说明: 移除有序集合中一个/多个成员
//删除有序队列info的成员num和num2
127.0.0.1:6379> zrem info num num2
(integer) 2
(2)指令: zremrangebylex key min max
说明: 移除有序集合中给定的字典区间的所有成员
min:字典中排序位置较小的成员,必须以"[“开头,或者以”(“开头,可使用”-“代替
max:字典中排序位置较大的成员,必须以”[“开头,或者以”(“开头,可使用”+"代替
其中:带“[”的值表示包含字典序边界,带“(”表示不包含字典序边界,“+”表示无穷大,“-”表示无穷小
127.0.0.1:6379> zremrangebylex info [a [c
(integer) 2
(3)指令: zremrangebyrank key start stop
说明: 移除有序集合中给定的排名区间的所有成员
//移除key为info有序队列的第0-1的元素
127.0.0.1:6379> zremrangebyrank info 0 1
(integer) 2
(4)指令: zremrangebyscore key min max
说明: 移除有序集合中给定的分数区间的所有成员
移除key为info有序队列的score值在区间1-3的数据
127.0.0.1:6379> zremrangebyscore info 1 3
(integer) 2
在redis目录下的redis.windows-service.conf,新增日志文件配置,同时在redis路径下新增文件夹Logs以及redis_log.txt日志文件
# Redis to log on the standard output.
logfile "Logs/redis_log.txt"
cmd命令到redis的目录下,执行命令
redis-server --service-install redis.windows-service.conf --loglevel verbose

查看服务,Win+R快捷键输入services.msc,查看服务

用管理员打开cmd命令 ,执行命令 sc delete 服务名
C:\Windows\system32>sc delete Redis
[SC] DeleteService 成功
在redis目录下执行命令:
卸载服务
redis-server --service-uninstall
开启服务
redis-server --service-start
停止服务
redis-server --service-stop