Redis 安装 与 使用命令
一、安装
1、下载 Redis 压缩包;
2、解压到指定安装目录;(解压后结果:)
点击:redis 里的 redis-server.exe 文件启动;
点击:redis 里的 redis-cli.exe 操作
----------------------------------------------------------------------
可以安装、安装即可安装到Windows服务:
打开 cmd.exe 窗口;
安装命令: redis-server.exe --service-install redis.windows.conf --loglevel verbose
----------------------------------------------------------------------
卸载服务,在cmd命令窗口中输入:
卸载命令: redis-server --service-uninstall
===================================================
但是安装好之后,可能Redis并没有启动,启动命令如下:
----------------------------------------------------------------------
启动命令:redis-server --service-start
----------------------------------------------------------------------
停止命令:redis-server --service-stop
----------------------------------------------------------------------
可以安装多个实例:
1、redis-server --service-install –service-name redisService1 –port 10001
redis-server --service-start –service-name redisService1
2、redis-server --service-install –service-name redisService2 –port 10002
redis-server --service-start –service-name redisService2
3、redis-server --service-install –service-name redisService3 –port 10003
redis-server --service-start –service-name redisService3
===配置 与 操作命令:================================================================================
如果遇到没有安装gcc或者tcl8.5的问题,可以参照下面两篇博客:
安装gcc:http://www.cnblogs.com/zhuyp1015/p/3533613.html
安装tcl8.5:http://www.41443.com/HTML/DB2/20150525/373733.html
二、redis结构,配置redis
说明:redis-server默认是在前台启动的,是根据配置文件redis.conf中的配置进行启动的,这是要启动redis-cli就需要再开一个终端进行操作,所以可以修改redis.conf的daemonize为yes
3.redis.conf配置文件
1.redis.conf文件位置
安装redis的目录下
2.redis.conf的主要配置项
- daemonize:是否以后台daemon方式运行
- pidfile:pid文件位置
- port:监听的端口号
- timeout:请求超时时间
- loglevel:log信息级别
- logfile:log文件位置
- databases:开启数据库的数量
- save * *:保存快照的频率,第一个*表示多长时间,第三个*表示执行多少次写操作。在一定时间内执行一定数量的写操作时,自动保存快照。可设置多个条件。
- rdbcompression:是否使用压缩
- dbfilename:数据快照文件名(只是文件名,不包括目录)
- dir:数据快照的保存目录(这个是目录)
- appendonly:是否开启appendonlylog,开启的话每次写操作会记一条log,这会提高数据抗风险能力,但影响效率。
- appendfsync:appendonlylog如何同步到磁盘(三个选项,分别是每次写都强制调用fsync、每秒启用一次fsync、不调用fsync等待系统自己同步)
将daemonize参数改为yes,这样就可以在后台运行server,而不用再开一个终端去执行./redis-cli了
修改配置文件后的server启动命令:./redis-server ../redis.conf
说明:./redis-server(进入src目录,执行当前目录下的redis-server),然后使用上一目录下的redis.confi配置文件启动
也可以设置启动脚本去启动redis,这个可以自行去百度
三、redis.cli命令
启动redis-server后,才可以启动redis-cli
启动命令:redis-cli
针对redis的命令:
(redis可以有多个数据库,每个数据库有索引编号,从0开始)
命令 | 意义 |
keys * | 查看redis下所有的key(*可以是一个正则表达式) |
exists key | redis下是否存在key |
type key | 获得key的value的类型(string等) |
del key | 删除key |
rename oldkey newkey | 将oldkey更名为newkey(如果newkey存在,则先将newkey删除) |
dbsize | 返回redis下key的数量 |
select index | 切换数据库(默认是0,如果切换1等后面会多一个【1】的标识) |
move key index | 将当前数据库下的key移动到索引为index的数据库下 |
flushdb | 删除当前数据库中的所有key |
flushall | 删除所有数据库中的key |
string类型的操作:
如果想删除string类型的,就直接删除key就可以了
操作 | 命令 | 例子 | 例子结果 |
增加或更改key,value | set key value | set key1 value1 | key1的值是value1 |
获得key的值 | get key | get key1 | value1 |
批量返回多个key的value | mget key1 key2 | 同命令 | 获得key1和key2的值 |
批量给多个key复制 | mset key1 value1 key2 value2 | 同命令 | 分别赋给key1、key2的value为value1、value2 |
给为数值的value+1 | incr key | key为1时,使用左侧命令 | 2 |
给为数值的value增加n(n为数字) | incrby key n | key为2时,incry key 2 | 4 |
给为数值的value-1 | decr key | key为2时,使用左侧命令 | 1 |
给为数值的value减去n(n为数字) | decrby key n | key为4时,decrby key 2 | 2 |
在string的value后追加内容 | append key value | key为abc时,append key de | key的value变为abcde |
获得value的子串 | substr key start end | key为1234567,substr key 1 3 | 获得key的子串234(子串索引从0开始计算) |
list类型的操作:
(list的索引是从0开始计算的)list底层用的是链表
操作 | 命令 | 例子 | 例子结果 |
向list型的value尾部增加一个值 | rpush key value1 value2 | rpush key1 abc | key1的尾部增加了一个子项“abc” |
向list型的value头部增加一个值 | lpush key value1 value2 | lpush key1 123 | key1的头部增加了一个子项“123” |
查询list的长度 | llen key | key1有3个子项,llen key1 | 3 |
查询key的值 | lrange key start end | key有3个子项“123”,“abc”,“cde” lrange key 0 -1 |
将全部子项都查询出来了,也可以用0 2的区间等查询部分结果 |
截取key的值,保留部分区间的值(索引) | ltrim key start end | ltrim key 0 1 | 只保留了key的0位和1位的值,截取了 |
获得某个索引位置的值 | lindex key index | lindex key 1 | 获得了索引为1位置的值 |
修改某索引位置的值 | lset key index value | lset key 1 abcdef | 将索引为1位置的值替换成了“abcdef” |
删除key下的某一个value | lrem key count value | lrem key 1 value | 删除count个值为value的数据,如果count为0,则所有为value的数据都删除 |
删除list值中的首元素 | lpop key | 同命令 | 第一个元素被删除 |
删除list值中的尾元素 | rpop key | 同命令 | 最后一个元素被删除 |
删除key1中的尾元素,并插到key2中头部 | rpoplpush key1 key2 | 同命令 | key1的尾元素被删除,并添加到了key2的头元素位置 |
set类型的操作:
是一种集合,是无序的集合,没有先后顺序,可以进行交集、并集、差集等操作,set类型的元素不会出现重复元素,元素唯一。
操作 | 命令 | 例子 | 例子结果 |
增加或更改set的key,value | sadd key value1 value2 | sadd key1 1 2 3 | key1的值是1,2,3(可以写多个值) |
返回set的所有元素 | smembers key | 同命令 | 返回key为key的所有元素 |
查询set下是否存在某一个元素 | sismember key member | sismember key1 5 | 查询key1下是否有5(返回的是1和0,1表示存在) |
删除set中的一个member | srem key member | srem key1 5 | 删除key1下为5的元素 |
随机删除set下的一个元素,并返回这个值 | spop key | 同命令 | 随机删除key下的一个元素 |
返回key下的元素个数 | scard key | 同命令 | 返回key为key的元素个数 |
从一个set下把某一元素移动到另一set下 | smove key2 key3 member | 同命令 | 将key2下的member移动到key3下 |
求多个set的交集 | sinter key1 key2 | 同命令 | 显示key1和key2下的交集 |
将多个set的交集存储到一个set下 | sinterstore key3 key1 key2 | 同命令 | 求key1和key2的交集并存储到key3下 |
求多个set的并集 | sunion key1 key2 | 同命令 | 显示key1和key2的并集 |
将多个set的并集存储到一个set下 | sunionstore key3 key1 key2 | 同命令 | 求key1和key2的并集并存储到key3下 |
求多个set的差集 | sdiff key1 key2 | 同命令 | 显示key1和key2的差集 |
求多个set的差集存储到一个set下 | sdiffstore key3 key1 key2 | 同命令 | 求key1和key2的差集并存储到key3下 |
随机返回set下的一个元素 | srandmember key | 同命令 | 随机返回key下的一个元素 |
zset类型的操作:
有序集合,每个元素都关联一个序号,元素去重。zset的命令都是以z开头的。zset的value由score(序号)和值两部分组成
操作 | 命令 | 例子 | 例子结果 |
增加zset的key和value | zadd key score member | zadd key 1 abc | 增加key下的序号为1的值为abc |
返回zset下某一member的index (元素按score从小到大排序) |
zrank key member | zrank key abc | 返回元素名为abc的索引(索引是从0开始计算的,所以比自己加的score少1) |
返回zset下某一member的index (元素按score从大到小排序) |
zrevrank key member | zrevrank key abc | 返回元素名为abc的索引(索引是从0开始计算的,所以比自己加的score少1) |
返回zset下某一区间的值 (元素按score从小到大排序0 |
zrange key start end | zset key 0 -1 | 返回zset下区间start到end的值(0 -1是全部) 元素从小到大排序 |
返回zset下某一区间的值 (元素按score从小到大排序) |
zrevrange key start end | zset key 0 -1 | 返回zset下区间start到end的值(0 -1是全部) 元素从小到大排序 |
删除zset下的某一个member | zrem key member | 同命令 | 删除key下的member |
返回zset某一元素的score | zscore key member | 同命令 | 返回key下元素member的score |
返回zset某一score区间的元素 | zrangebyscore key start end | zrangebyscore key 1 4 | 返回key下的score为1到4的元素 |
删除zset某一score区间的元素 | zremrangebyscore key start end | zremrangebyscore key 1 2 | 删除key下score区间为1到2的元素 |
zset还支持并集、交集、差集的计算,会根据最后的aggregate来决定score是sum还是min或max
hash类型的操作:
hash就是哈希,可以理解为map,一个key对value的类型。hash类型的数据组成key:{field:value}
hash的命令都是以h开头的,后面跟着redis的key,再后面的参数与string类型的操作类似,可以将hash的field想象成string的key。
操作 | 命令 | 例子 | 例子结果 |
hash插入数据 | hset key field value | hset key1 age 20 | 在key1下增加了一个age:20的hash值 |
获得hash中某一个field对应的value值 | hget key field | hget key age | 获得key下的age的值 |
批量获得hash的多个field对应的值 | hmget key field1 field2 | hmget key name age | 批量获得key下的name和age的值 |
hash批量插入数据 | hmset key field1 value1 field2 value2 | hmset key name tom age 20 | 批量插入key的value,name:tom age:20 |
查看hash的某一个key下是否存在field | hexists key field | hexists key name | 查看key下是否存在field叫做name的项 |
返回hash的元素个数 | hlen key | 同命令 | 返回key的元素个数 |
根据field,删除hash的某一个元素 | hdel key field | 同命令 | 删除key下键为field的元素 |
显示hash中所有的键及对应的值 | hgetall key | 同命令 | 显示key下所有的键及对应的值(但是是分行显示的) |
返回hash的所有元素的键 | hkeys key | 同命令 | 返回key下的所有元素的键(field) |
显示hash中所有键对应的值 | hvals key | 同命令 | 返回key下的所有键对应的值,不包含键 |
将hash下某一键的值增加一定数值 | hincrby key field integer | hincrby key field 10 | 将key的field的值增加10(如果值是数值会直接加10; 如果不是数值,该键的值会直接变为100 |
* redis 还支持持久化的本地存储,和主从的搭建等。