文章目录
- 介绍
- 定义
- Redis特点
- Redis优点
- Redis windows 版本操作
- Redis linux操作
- 服务器相关命令
- 类型对应的命令行
- 1、字符串类型(string)
- 1.1 set、get、mset、mget
- 1.2 incr、incrby、decr、decrby、incrbyFloat、append、strlen
- 2、散列类型(hash)
- 3、列表类型(list)
- 4、集合类型(set)
- 5、有序集合类型(ZSET)
- 常见问题:
- java对redis的基本操作
介绍
定义
- redis是一个key-value存储系统。和Memcached类似
- 数据结构: redis提供五种数据类型:string,hash,list,set及zset(sorted set)。
- 在实际项目中的使用,插入数据或查询数据缓存起来,并且设置过期时间;也可以以文本的形式持久化到磁盘,或保存到数据库
Redis特点
redis 与其他 key - value 缓存产品有以下三个特点:
- redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
- redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- redis支持数据的备份,即master-slave模式的数据备份。
Redis优点
应用Redis实现数据的读写,同时利用队列处理器定时将数据写入mysql。
同时要注意避免冲突,在redis启动时去mysql读取所有表键值存入redis中,往redis写数据时,对redis主键自增并进行读取,若mysql更新失败,则需要及时清除缓存及同步redis主键。
这样处理,主要是实时读写redis,而mysql数据则通过队列异步处理,缓解mysql压力,不过这种方法应用场景主要基于高并发,而且redis的高可用集群架构相对更复杂,一般不是很推荐。
Redis windows 版本操作
- 下载地址:
https://www.baidu.com/link?url=SkE5LsvHwYwH7ygjTKMOtR_YzE_A_0Lc9tmhv23I4Ek6_P5oOiyuTVWy_pp68b_VgwefASFbIWR6fPRsy-9CPi0MHHGEOLlwttu1P25Xdce&wd=&eqid=efb3b3c40003070a00000006589c365c - Windows 64位下安装Redis详细教程–>
http://jingyan.baidu.com/article/f25ef2546119fd482c1b8214.html - 操作步骤:
1、在D盘新建文件夹【redis】,右键解压Redis ZIP包,把所有文件解压到redis文件夹中。(其他盘符也可以)
文件介绍:
redis-benchmark.exe #基准测试
redis-check-aof.exe # aof
redischeck-dump.exe # dump
redis-cli.exe # 客户端
redis-server.exe # 服务器
redis.windows.conf # 配置文件
2、windows 运行,进入DOC操作系统窗口。
使用命令【redis-server.exe redis.windows.conf】启动redis 服务
3、服务启动成功状态
4、服务器不用关闭,另外从新启动一个dos窗口,进入redis目录
使用命令【redis-cli.exe】,就可以set或者get对应的key/value了
Redis linux操作
下载地址: http://download.redis.io/redis-stable.tar.gz
注意:在安装过程当中,可能你的linux系统没有安装gcc,需要自己安装gcc
打开redis客户端: redis-cli
服务器相关命令
ping PONG返回响应是否连接成功
echo 在命令行打印一些内容
select 0~15 编号的数据库
quit /exit 退出客户端
dbsize 返回当前数据库中所有key的数量
info 返回redis的相关信息
config get dir/* 实时传储收到的请求
flushdb 删除当前选择数据库中的所有key
flushall 删除所有数据库中的数据库
切换数据库>:Select 1 [切换到1数据库(字典),默认16个数据库]
多行字符串回复>: Keys * //就是返回所有的key
获取符合规则的键名列表>: keys pattern //pattern有如下取值
符号 | 含义 |
? | 匹配一个字符 |
* | 匹配任意个字符 |
[ ] | 匹配括号间的任意字符,可以使用“-”符号表示一个范围,如a[b-d]可以匹配“ab”,”ac”和ad |
? | 匹配字符x,用于转义符号。如要匹配“?”就需要使用? |
其他命令行
命令 | 语法 | 例子 | 说明 |
exists | Exists key | Exists name | 判断name键是否存在,存在返回1,反之0 |
del | Del key | Del name | 删除key为name的键 |
type | type key | type name | 返回结果为string,表示name的值为string类型 |
ping | ping | ping | 测试客户端与redis的连接是否正常,正常返回PONG |
类型对应的命令行
1、字符串类型(string)
1.1 set、get、mset、mget
设置值语法>: set key value
例: set name liping
获取值语法>: get key
例: get name 返回结果:liping
同时获取/设置多个键值
Mget key key 同时获取多个键值
Mset key value key value 同时设置多个键值
1.2 incr、incrby、decr、decrby、incrbyFloat、append、strlen
incr 命令 (递增)
说明>: 每次递增1,可以用来生成自增ID
例子>: incr num 返回结果为1
incrby 命令
说明>: 增加指定的数值
例子>: incrby num 3 (原来num=1,现在num=4了)
Decr 命令 【递减】
例子>: decr num
Decrby 命令 【删除指定的数值】
例子>: decrby num 3 【num-3】
incrbyFloat 命令 【跟incrby类似,递增一个双精度浮点数】
例子>: incrbyfloat num 2.6 【num原来=1,现在为3.6】
向尾部追加值: append
例子>: append name “ nihao” 【原name=liping,结果为 liping nihao】
获取字符串长度: strlen
例子>: strlen name 【那么=liping,那么结果返结果为6,汉字占两个字节】
2、散列类型(hash)
- 介绍:散列类型即hash类型
如下图:car:1 为键,键下面的字段对应值 - 作用:可解决关系数据库中字段冗余的问题
命令 | 语法 | 例子 | 说明 |
hset | hset key field value | Hset car:1 color red | 设置 car:1对象color字段的值为red |
hget | hget key field | Hget car:1 color | 获取car:1对象color字段对应的值 |
hmset | hmset key field value [field value] | hmset car:1 color red name 奥迪 | 设置car:1对象color=red,name=奥迪 |
hmget | hmget key field[field] | Hmget car:1 color name | 获取car:1对象的color和name字段对应的值 |
HGETALL | hgetall key | Hgetall car:1 | 获取car:1对象所有的字段和值 |
Hexists | Hexists key field | Hexists car:1 name | 判断对象字段是否存在 |
Hsetnx | Hsetnx key field value | Hsetnx car:1 name 宝马 | 当字段不存在赋值,如果字段已存在不进行任何操作 |
Hincrby | Hincrby key filed increment | Hincrby car:1 price 50 | 和字符串类型incrby类似。将car:1对象的价格新增50,如果不存在则新增对象 |
Hdel | Hdel key field [field] | Hdel car:1 name color | 删除car:1对象的name和color字段 |
Hkeys | Hkeys key | Hkeys car:1 | 获取car:1对象所有的字段 |
Hvals | Hvals key | Hvals car:1 | 获取car:1对象所有的值 |
Hlen | Hlen key | Hlen car:1 | 获取字段的数量 |
3、列表类型(list)
- 介绍:
列表类型(list)可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获取的列表的摸一个片段。
列表类型内部是使用双向链表(double linked list)实现的
命令 | 语法 | 例子 | 说明 |
LPUSH | Lpush key value [value] | Lpush arr aa bb | 向列表左边添加元素 |
RPUSH | rpush key value [value] | rpush arr cc dd | 向列表右边添加元素 |
LPOP | LPOP key | LPOP arr | 从列表左边移除第一个元素,返回结果为移除的元素 |
RPOP | RPOP key | RPOP arr | 从列表右边移除第一个元素,返回结果为移除的元素 |
LLEN | LLEN key | LEN arr | 获取列表中元素的个数 |
LRANGE | LRANGE key start stop | LRANGE arr 0 2 | 从左边开始获取列表1-3两个元素,下标从0开始 |
LRANGE | LRANGE key start stop | LRANGE arr -2 -1 | 从右边开始获取列表1-2两个,为负数从-1开始 |
LRANGE | LRANGE key start stop | LRANGE arr 0 2 | 获取arr列表中所有的元素 |
LREM | LREM key count value | lrem arr 2 aa | 当count>0时,从左边开始删除前count个值为value的元素 |
LREM | LREM key count value | lrem arr -1 aa | 当count<0时,从右边开始删除前count个值为value的元素 |
LREM | LREM key count value | lrem arr 0 aa | 当count=0时,删除列表所有值为value的元素 |
LINDEX | LINDEX key index | Lindex arr 2 | 获取arr列表中下标为2的元素【index可为负数】 |
LSET | LSET key index value | lset arr 2 aa | 将下标为2的元素替换成aa 【index可为负数】 |
LTRIM | LTRIM key start stop | ltrim arr 1 2 | 只保留列表指定下标范围,其他的删除 |
LINSERT | LINSERT key BEFORE 或AFTER pivot value | LINSERT arr BEFORE b a | 在arr列表中的b元素之前插入a元素 |
Rpoplpush | RPOPLPUSH source destination | 如下图,从arr列表中移除最右边元素,添加到arr1左边 |
4、集合类型(set)
- 介绍:集合类型是无序的,切不包含重复数据
- 和列表类型进行对比如下图:
解析:member【成员的意思、多个】
命令/语法 | 例子 | 说明 |
SADD key member [member] | sadd sets a b c | 向集合sets添加a b c三个元素(如果在添加一个c,sets也是a b c三个元素) |
SREM key member [member] | srem set b c | 移除sets集合中b c两个元素 |
SMEMBERS key | smember sets | 获取sets集合中所有的元素 |
SISMEMBER key member | sismember sets a | 判断a元素是否存在sets集合中 |
SDIFF key [key…] | sdiff sets set1 | 取差集,取sets[abc]和sets1[bce]的差集为a |
SINTER key [key…] | Sinter sets set1 | 取交集,sets[abc]和sets1[bcd]的交集为b c |
SUNION key [key…] | Sunion sets set1 | 取并集,sets[abc]和sets1[bcd]的交集为a b c d |
SCARD key | Scard sets | 获取集合中元素的个数 |
SRANDMEMBER [count] | Srandmember sets | 随机获取sets集合中一个元素,【count表示随机获取count个,count>0,值不重复,count>集合长度,获取全部,count<0,可重复】 |
SPOP key | spop sets | 从集合中随机弹出一个元素 |
5、有序集合类型(ZSET)
命令/语法 | 例子 | 说明 |
SADD key member [member] | sadd sets a b c | 向集合sets添加a b c三个元素(如果在添加一个c,sets也是a b c三个元素) |
ZADD key score member [score member…] | zadd yuwen 12 a 13 b | 语文 a的12,b为13分,如果发现a的分数不对,还可修改:ZADD yuwen 60 a [可为浮点型] |
ZADD yuwen +inf c -inf d | 支持正无穷,负无穷 | |
ZSCORE key member | ZSCORE yuwen a | 获取元素的分数 |
ZRANGE key start stop [withscores] | Zrange yuwen 0 -1 | 获取yuwen对象所有的元素key 排名,0到-1是所有,0到2前三个[分数从小到大排名] |
ZREVSCORE key member Start stop [withscores] | Zrevrange yuwen 0 -1 | 获取yuwen对象所有的元素key 排名,0到-1是所有,0到2前三个[分数从大到小排名] |
Zrange yuwen 0 -1 withscores | 获取yuwen对象所有的元素key和value 排名 | |
ZRANGEBYSCORE key min max [withscores] limit offset count | Zrangebyscore yuwen 10 50 | 获取指定分数的范围,获取yuwen 10到50的元素 |
Zrangebyscore yuwen 10 50 withscores | 获取yuwen 10到50的元素以及分数 | |
Zrangebyscore yuwen 10 50 withscores limit 0 10 | 获取yuwen 10到50的元素以及分数,从低一个开始取10个 | |
Zrangebyscore yuwen 10 (50 | 获取yuwen 10到50的元素,不包含50分 | |
Zrangebyscore yuwen (50 +inf | 获取yuwen 50到正无穷的元素,不包含50分 | |
ZINCRBY key increment member | ZINCRBY yuwen 40 b | 将某个元素增加指定的分数,分数可以为负数(为减分) |
ZCARD key | ZCARD yuwen | 获取集合中元素的数量 |
ZCOUNT key min max | ZCOUNT yuwen 10 50 | 获取集合中指定分数范围内元素的个数 |
ZREM key member[member] | ZREM yuwen d | 删除集合中的某个元素 |
ZREMBYRANK key start stop | ZREMBYRANK yuwen 0 1 | 按照排名范围删除元素[从小到大删除] |
ZREMRANGEBYSCORE by key min max | ZREMRANGEBYSCORE yuwen 40 50 | 按照分数范围删除元素 |
计算有序集合的交集【ZINTERSTORE】
ZINTERSTORE destination numkeys key [keys …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX]
常见问题:
1、错误>: (error) NOAUTH Authentication required.
解决办法:输入redis设置过的密码 auth password
java对redis的基本操作