redis单机版安装及各数据类型常用命令

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

  1. 查看user1的订单数:llen user:1:oder

  2. 查看订单详情:
    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
    在这里插入图片描述

  3. 删除订单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编码

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值