1、下载源码
wget http://download.redis.io/releases/redis-4.0.6.tar.gz
解压:
tar xzf redis-4.0.6.tar.gz
cd redis-4.0.6
make
如果执行make命令出错,如:
则执行以下命令:
yum install cpp
yum install binutils
yum install glibc-kernheaders
yum install glibc-common
yum install glibc-devel
yum install gcc
yum install make
如果报:
则执行:
make MALLOC=libc
创建一个目录用以管理各种可执行文件
mkdir /usr/local/redis
cd /usr/local/resource/redis-4.0.6/src
cp redis-server /usr/local/redis
cp redis-benchmark /usr/local/redis
cp redis-check-rdb /usr/local/redis
cp redis-sentinel /usr/local/redis
cp redis-cli /usr/local/redis
cd /usr/local/resource/redis-4.0.6
cp redis.conf /usr/local/redis
cp sentinel.conf /usr/local/redis
各可执行文件介绍:
拷贝一份redis.conf文件,防止改错了后不能复原:
cp ./redis.conf ./redis6382.conf
redis6382.conf 修改 requirepass 12345678 和 修改port 为6382(默认为6379) 把bind 127.0.0.1修改成192.168.126.128(自己的端口)
启动:
./redis-server redis6382.conf &
客户端连接:
./redis-cli -p 6382 -a 12345678
关闭:
./redis-cli -p 6379 -a 12345678 shutdown
清空数据库:
flushdb
清空所有库:
flushall
选择库:
select 0 -- 选择0库
查看库里有多少数据
DBSIZE
keys *
查看所有键
dbsize
如果存在大量键,线上禁止使用此指令
检查键是否存在:exists key
//存在返回1,不存在返回0
删除键:del key
//del hello school, 返回删除键个数,删除不存在键返回0
string操作
增加操作
set name shidebin ex 10
:设置name的值为shidebin,有效期为10s
ttl name
:查看name的剩余的过期时间
type name
:键类型(String,list,hash,set,sort set)
批量设值:mset country china city beijing
删除操作:
del name
修改操作
set name 1234
跟新增操作一样,如果键存在会自动覆盖
数字值的修改:
incr age
//必须为整数自加1,非整数返回错误,无age键从0自增返回1
decr age
//整数age减1
incrby age 2
//整数age+2
decrby age 2
//整数age -2
incrbyfloat score 1.1
//浮点型score+1.1
append追加指令:set name hello; append name world
//追加后成helloworld
字符串长度:set hello “世界”;strlen hello
//结果6,每个中文占3个字节
截取字符串:set name helloworld ; getrange name
2 4//返回 llo
查询操作:
get name
批量获取:mget country city address
**
内部编码:int:8字节长整理//set age 100; object encoding age //返回int
embstr:小于等于39字节串set name bejin; object encodeing name//embstr
raw:大于39字节的字符串set a fsdfwerwerweffffffffffdfs//返回raw
Hash
**
新增操作:
hset user name shidebin :给对象user新增一个属性name值为石德斌,如果user不存在会创建
hset user age 29 :给对象user新增一个属性age 值为29,如果user不存在会创建
`hmset user:1 id 1 name jack age 23 city null` :批量新增属性
查询
hget user name
:获得对象user中属性name的值
hget user age
:获得对象user中属性age 的值
HEXISTS user name
:判断对象user中是否有name属性
HKEYS user
:查询对象user中所有的属性名
HVALS user
:查询对象user中所有属性的值
HGETALL user
:查询对象user中所有属性和属性值
HMGET user:1 name age city
:批量查询属性
删除:
HDEL user:1 city
:删除对象user:1中city属性
del user:1
:删除对象user:1
修改:
HINCRBY user age 1
:修改对象user的age属性值加1
hset user:1 name shidebin :赋值user:1 的属性name为shidebin,若之前存在值,则覆盖。
内部编码:ziplist<压缩列表>和hashtable<哈希表>
当field个数少且没有大的value时,内部编码为ziplist
如:hmset user:3 name james age 24; object encoding user:3 //返回ziplist
当value大于64字节,内部编码由ziplist变成hashtable
如: hset user:3 address “fsgst64宥斯蒂芬拉萨的解放路发送到骷髅法师的开发节”; object encoding user:3 //返回hashtable。要控制ziplist与hashtable两种编码转换,且hashtable会消耗更多内存
list
新增:
LPUSH user:1:order order:1 order:2 order:3
:给list新增order:1 ,order:2 ,order:3三个元素。
修改:
lset user:1:order 0 order:4
:把user:1:order中的第0个元素修改为order:4
查询:
LRANGE user:1:order 0 -1
:查询所有元素
llen user:1:order
:查询user:1:order元素数量
LINDEX user:1:order 1
:查询user:1:order中位置1的元素
删除:
LREM user:1:oder 1 order:1
:删除user:1:oder中order:1元素
LTRIM user:1:order 0 2
:保留user:1:order中0到2的元素,其他删除
del user:1:oder
:删除user:1:oder
应用场景:维护user1的订单列表。
hmset order:1 orderId 1 money 36.6 time 2018-01-01
hmset order:2 orderId 2 money 36.6 time 2018-01-01
hmset order:3 orderId 3 money 36.6 time 2018-01-01
用list维护order
LPUSH user:1:oder order:1 order:2 order:3
再加一个订单
hmset order:4 orderId 4 money 36.6 time 2018-01-01
list中再加入:
LPUSH user:1:oder order:4
-
查看user1的订单数:llen user:1:oder
-
查看订单详情:
List orderKeys = LRANGE user:1:oder 0 -1
for(String order: orderKeys){
hmget order:1
}
**内部编码
1,当元素个数少且没大元素,编码为quicklist,减少内存的使用
rpush list a b c
object encoding list //返回quicklist
-
删除订单1:
删除hash中的记录:del order:1(注意达到千万级别时,不要使用此命令,这会导致redis阻塞10s以上)
删除list中的数据:
List orderKeys = LRANGE user:1:oder 0 -1
for(int I = 0;i<orderKeys.size();i++){
String orderId = orderKeys.get(i);
If(“order:1”.equal(orderId)){
LREM user:1:oder 1 order:1
}
}
LTRIM user:1:order 0 2
Set
新增:
SADD user:1:fav basketball football pingbang yumaoqiu wangqiu
:给user:1:fav增加多个元素
查询:
SMEMBERS user:1:fav
:查询user:1:fav中的所有元素
SCARD user:1:fav
:查询user:1fav的元素个数
SINTER user:1:fav user:2:fav
:查询user:1:fav和user:2:fav的交集
SUNION user:1:fav user:2:fav
:并集
SDIFF user:1:fav user:2:fav
:差集
SINTERSTORE user:1:2:common:fav user:1:fav user:2:fav
:把交集元素放入一个新的set集合中
SUNIONSTORE user:1:2:total:fav user:1:fav user:2:fav
:把并集元素放入一个新的set集合中
SDIFFSTORE user:1:2:diff:fav user:1:fav user:2:fav
:把差集元素放入一个新的set集合中
SISMEMBER user:fav aaa :判断aaa是否是user:fav 的元素
删除:
del user:1:fav
:删除user:1:fav
srem user:1:fav football
:删除user:1:fav中football元素
修改:
没找到相应的方法,但可以间接实现,先删除旧的,然后再新增。
内部编码:
sadd user 1 2 3 4 //当元素个数少(小于512个)且都为整数,redis使用intset减少内存的使用
sadd user 1 2…513 //当超过512个或不为整数(比如a b)时,编码为hashtable
Sort set
新增:
zadd dianzan:20181023 1 shidebin
:给集合dianzan:20181023新增元素shidebin,score为1
删除:
ZREM dianzan:20181023 shidebin
:删除dianzan:20181023中的shidebin元素
ZREMRANGEBYSCORE dianzan:20181023 0 3
:删除dianzan:20181023中score在0到3之间的元素
ZREMRANGEBYRANK dianzan:20181023 5 5
:删除dianzan:20181023中排名第5位的元素
修改:
ZINCRBY dianzan:20191023 2 shidebin
:shidebin 的分数加2
查询:
zrank dianzan:20181023 shidebin
:查询shidebin 的排名
ZRANGE dianzan:20181023 0 -1
:查询dianzan:20181023所有元素
ZRANGEBYSCORE dianzan:20181023 0 10
:查询dianzan:20181023中score在0到10之间的所有元素
ZCARD dianzan:20181023
:查询dianzan:20181023的元素数量
ZCOUNT dianzan:20181023 2 4
:查询dianzan:20181023分数在2和4之间的元素数量
ZSCORE dianzan:20181023 shidebin
:查询dianzan:20181023中元素shidebin的分数
内部编码
1,ziplist: zadd user: init 9 20 james 30 mike 40 lee
object encoding user:init
//当元素个数少(小于128个),元素值小于64字节时,使用ziplist编码,可有效减少内存的使用
2,skiplist: zadd user:10 20 james…
//大于128个元素或元素值大于64字节时为skiplist编码