环境:centos7 redis-6.2.6.tar.gz(https://redis.io/download)
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value的,内存高速缓存数据库,并提供多种语言的API。redis是一种nosql(not only sql)数据库,其存储的是key-value型数据。
1、启动redis服务
[root@Redis ~]# cd /usr/local/redis-6.2.6/bin/
[root@Redis bin]# ./redis-server /usr/local/redis-6.2.6/etc/redis.conf #指定配置文件,启动redis-server
2、命令行redis.cli客户端登陆、
[root@Redis bin]# ./redis.cli -h 192.168.1.0 -p 6379 #用redis.cli命令行客户端工具连接,指定IP端口
192.168.1.0:6379> auth aabbcc001 #使用auth命令来输入密码登陆
OK
192.168.1.0:6379>quit #退出客户端
1、redis默认有16个数据库,DB index从0开始,即0-15。默认登陆第一个index为0的数据库;默认数据库个数可通过redis.conf配置文件databases
参数修改;
2、redis的命令不区分大小写,但数据有大小写之分,如:I 和i是不同的数据;
3、redis的密码都是统一的,即全部库都是统一的登陆密码,密码在redis.conf配置文件中requirepass参数配置;
4、redis默认端口6379,可在配置文件中修改默认端口。
redis常用命令官方文档:https://www.redis.net.cn/order/
。
命令都有补全功能,按tab键就能自动补全。
help command: 查看命令的帮助文档,如 help select
select index: 切换数据库,如select 1,即切换到库1,数据库索引从0开始,redis.conf里默认配置了16个数据库,可以自行修改
exists key_name :测试key是否存在,如exists age
dbseize: 查看当前数据库中的key总数量
flushdb:清空当前库中的所有key(危险慎用);
flushall:清空所有库中的所有key(危险慎用);
save :执行备份
默认redis.conf配置文件里开启了rdb备份,备份文件名为dump.rdb。
如果是做redis迁移,其实就是先备份dump.rdb,然后将dump.rdb拷贝到新的redis实例中启动。
登陆redis:./redis.cli -h 192.168.1.0 -p 6379
192.168.1.0:6379> auth aabbcc001 #使用auth命令来输入密码登陆
OK
192.168.1.0:6379>SAVE #做一次手动备份,让还未来及的备份的数据备份到dump.rdb中
192.168.1.0:6379>SHUTDOWN SAVE #关机并保存
#这样,再重新启动redis时,redis就能从dump.rdb重新加载恢复数据了
redis支持的数据类型:string类型、list类型、hash类型、set数据类型、zset数据类型
,每种数据类型的命令语法都有所不同。
redis支持的数据类型:字符串(String), 哈希(hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)
set命令:用于给key设置string类型数据,语法格式如下:
set key value [EX seconds | PX milliseconds] [NX|XX] [KEEPTTL]
172.17.242.171:6363> set age 20 #插入一个名为age的键,其值为字符类型值20
OK
172.17.242.171:6363>
命令 | 作用 | 示例 |
---|---|---|
set key value | 添加一个key并赋值,其值是string类型 | set age 20 |
mset key value [key value …] | 添加多个键值,其值是string类型 | mset name “LiMing” sex ‘man’ |
setrange key index value | 修改指定key的值,从index处开始替换成为value(注:index从0开始) | setrange name 5 “HAUNG SHANG” |
get key | 查看指定key对应的value值 | get age |
mget key1 key2 […] | 批量获取指定key的value(get key 只能获取指定的单个key的值) | mget name sex |
getrange key start end | 获取指定key的value的指定index区间的值 | set k1 “I am k1”,getrange k1 0 3 返回值为:I am |
getset key new_value | 设置指定key的新值,输出返回结果是旧值 | getset sex “WOmu” |
del key [key …] | 删除key,可以同时删除多个key | del age1 age2 |
append key value | 对指定的key的value追加字符串 | append passwd “123456” |
strlen key | 查看指定key的长度 | strlen passwd |
substr key arg arg | 从指定位置进行截取key的value值中的字符串(只截取显示不对value产生任何修改) | substr passwd 0 8 |
type key | 查看指定key的value值的数据类型 | type age,返回string类型 |
keys pattern | 查找所有符合给定模式( pattern)的 key ,pattern是匹配符,可以使用*号进行模块匹配查询 | keys “a*” |
exists key […] | 检测指定key是否存在。返回1表示存在,0表示不存在,当有多个参数时,只要其中一个存在就返回1 | exists age |
move key db | 移动某个key到指定库 | move age 15 |
randomkey | 从当前库随机返回一个key,返回的仅是键名 | randomkey |
rename key newkey | 重命名一个key | rename age age8 |
expire key seconds | 设置key的过期时间(计算基数为:秒),过期后key将被删除,keys age已经查看不到了,这是redis根据过期数据的策略进行处理的 | expire age 10 |
pexpire key milliseconds | 指定某个key的过期时间(计算基数为:毫秒),过期后key将被删除,keys age已经查看不到了,这是redis根据过期数据的策略进行处理的 | pexpire age 100 |
ttl key | 查看指定key剩余过期时间,返回值为3类:数字表述剩余过期时间;-1表示永不过期;-2表示已过期 | ttl age |
incr key | 指定的key的value值递增加1(values要为整数才能加) | incr age 加1 |
decr key | 指定的key的value值递减减1(values要为整数才能减) | decr age 减1 |
incrby key increment | 指定的key的value值递增加1且指定步长increment | incrby age 10 加10 |
decrby key increment: | 指定的key的value值递减减1且指定步长increment | decrby age 12 减12 |
命令 | 作用 | 示例 |
---|---|---|
lpush key element[element…] | 将一个或多个值 value 插入到列表 key 的表头(最左边) | 如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表头: 比如说,对空列表 mylist 执行命令 LPUSH mylist a b c ,列表的值将是 c b a ,这等同于原子性地执行 LPUSH mylist a 、 LPUSH mylist b 和 LPUSH mylist c 三个命令。 |
rpush key element[element…] | 将一个或多个值 value 插入到列表 key 的表尾(最右边) | 如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表尾:比如对一个空列表 mylist 执行 RPUSH mylist a b c ,得出的结果列表为 a b c ,等同于执行命令 RPUSH mylist a 、 RPUSH mylist b 、 RPUSH mylist c |
lrange key start stop | 取出集合的数据,0 -1 表示取出全部数据,如 lrange key 0 -1 | lrange mylist 0 -1 |
lpop key | 移除列表 key 的头元素,即第一个元素,同时返回显示头元素 | lpop mylist |
rpop key | 移除列表 key 的尾元素,即最后一个元素,同时返回显示尾元素 | rpop mylist |
lrem key conut value | count 的值可以是以下几种:count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count;count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值;count = 0 : 移除表中所有与 value 相等的值 | lrem mylist 0 "Good"全部删除、lrem mylist 1 "Good"从表头开始搜索删除1个、lrem mylist -2 "Good"从表尾往前搜索删除2个 |
llen key | 返回列表 key 的长度 | llen mylist 返回4,表示mylist长度是4,有4个元素 |
lindxe key index | 返回列表 key 中,下标为 index 的元素 | LINDEX mylist 2 ,返回第3个元素值 |
lset key index value | 设置集合指定索引的值(索引不能超过集合最大索引) | lset mylist 0 “Good” |
linsert key before after element new_value | 从集合头向后查找匹配的第一个element元素,从其前或其后插入新元素new_value。当无匹配元素时不执行任何操作 | linsert mylist before “laoliu” “I am laoliu”,表示从前往后搜索"laoliu",找到后在其前面插入 “I am laoliu” |
ltrim key start stop | 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除 | ltrim mylist 0 4 |
hash哈希数据类型用于存这样的数据,key field value[field value…], 如:李明 性别:男 年龄:28 地址:深圳市 学校:深圳一中 电话:0755-7788
命令 | 作用 | 示例 |
---|---|---|
hset key field value[field value…] | 设置哈希表key中的域field的值设为value,若果key不存在,将创建新的hash表并新建域插入值,如果域field已存在旧值就被新值覆盖。hset key13 id 001 name liming age 12。注意:低版本的redis中此hset命令可能只能设置单个field | hset “liming” sex “man” age 28 addr “guanddong_shenzhen” shcool “szluohuizhong” |
hsetnx key fiels value | 哈希表中添加field和值,添加成功返回1,若已存在该field则不添加,返回0 | hsetnx “liming” “top” “168cm” |
hmset key field value[field value…] | 同时设置哈希表多个field和值,高版本的redis此命令与hset相同 | hmset “liming” sex “man” age 28 addr “guanddong_shenzhen” shcool “szluohuizhong” |
hget key field | 获取哈希表中单个指定域的值 | hget “liming” age |
hmget key field [field …] | 获取哈希key指定域的值,与hget的区别在于hmget可获取多个域的值 | hmget “liming” sex age addr |
hgetall key | 获取哈希key全部的域和其值 | hgetall “liming” |
hexists key field | 判断哈希表中指定域field是否存在,存在则返回1,不存在返回0 | hexists “liming” age |
hkeys key | 显示指定哈希表的全部filed | hkeys “liming” |
hvals key | 显示指定哈希表的全部values | hvals “liming” |
hlen key | 显示哈希表的长度,其长度为field的个数 | hlen “liming” |
HDEL key field [field …] | 删除哈希表中指定的域 | hdel “liming” “age” “sex” |
hincrby key field increment | 指定域中递增,递增增量为increment,如hincrby k13 age 20,则年龄加12岁 | hincrby “liming” age 20 |
命令 | 作用 | 示例 |
---|---|---|
sadd key member [member…] | 设置指定key的值,member重复时至保留一个。即set数据无须且数据不重复 | sadd name-set “libai” “xiaohei” “xiaohong” |
smembers key | 获取指定的集合key的全部member | smembers name-set |
sinter key [key …] | 返回两个或多个集合的交际,即共同元素 | sinter name-set name-set2 |
sunion key [key …] | 返回两个或多个集合的并集,去掉重复元素 | sunion name-set name-set2 |
sdiff key [key …] | 返回key1在key2中没有的差集 | sdiff name-set name-set2 |
srem key member | 删除指定集合key的某个member | srem name-set “xiaoxiao” |
smove source destination member | 将 member 元素从 source 集合移动到 destination 集合 | smove name-set name-set2 “xiaohei” |
sismember key menber | 判断集合key的某个member是否存在,存在则返回1,不存在返回0 | sismember name-set “xiaoxiao” |
spop key [count] | 从集合key集合中随机移除count个元素 | spop name-set2 1 |
scard key | 统计集合key的元素个数 | scard name-set |
zset数据类型中的每个元素都会关联一个 数值类型的权重参数(score),这使得集合中的元素能够按score进行有序排列。
命令 | 作用 | 示例 |
---|---|---|
zadd key score member [score member …] | 将一个或多个 member 元素及其 score 值加入到有序集 key 当中,如果某个 member 已经是有序集的成员,那么更新这个 member 的 score 值,并通过重新插入这个 member 元素,来保证该 member 在正确的位置上。score 值可以是整数值或双精度浮点数 | zadd hotTop 1 xiaomi 3 huowei 4 pingguo 2 chuizhi |
zrange key min max | 返回有序集合key的member 元素,,按score从小到大排序 | zrange hopTop 0 -1 |
zrevrange key min max | 返回有序集合key的member 元素,,按score从大到小排序 | |
zscore key member | 返回有序集 key 中 member 的 score 值 | zscore hotTop xiaomi |
zincrby key increment member | 加数值,实现sore值增大或减小从而实现member 排序上升或下降 | zincrby hotTop 9 “Good”,good的sore增加了9,zincrby hotTop -21 Good,good的sore减少了21 |
zcard keys | 返回有序集合中member的个数 | zcard hotTop |
zrem key member [member …] | 删除有序集合中的指定成员member | zrem hotTop “Good” |
daemonize no/yes #是否开启redis为守护进程(即后台运行),默认为no,修改为yes后台运行redis进程是最好的
pidfile /var/run/redis.pid #进程的pid文件
port 6379 #redis的监听端口,默认为6379
bind 127.0.0.1 #redis监听绑定本机哪个ip地址,默认是127.0.0.1,应该设置为对外ip地址(0.0.0.0表示允许来之所有的ip链接请求)
timeout 0 #设置超时时间,当客户端闲置多长时间后关闭连接.0表示不启用此功能
logleverl notice #设置日志级别,redis总共支持四个级别:debug verbose notice warning,默认notice
debug:很多信息,便于开发测试;
verbose:许多有用的信息,但没有debug基本的信息多;
notice:适当的信息,合适生产环境使用;
warning:只有非常重要的信息
#日志文件,默认为标准输出,如果redis为守护进程方式运行,而又没有给出具体的输出目录,则Redis默认为标准输出,则日志将会被发送给/dev/null
logfile /usr/log/reids/logs/redis.log
database 16 #设置数据库的数量,默认16个,客户端连接默认进入数据库0,可用select index来切换数据库
save <seconds> <changes> #指定在多长时间内,有多少次更新操作就将数据同步到数据备份文件
redis配置默认提供:
save 900 1 表示900秒(15分钟)内至少有1个数据更改就同步到数据备份文件
save 300 10 表示300秒(5分钟)内至少有10个数据更改就同步到数据备份文件
save 60 1000 表示60秒(1分钟)内至少有1000个数据更改就同步到数据备份文件
#指定数据存储到数据库rdb文件是否压缩数据,默认yes,redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但这会导致数据库文件变得非常的大
rdbcompression yes
dbfilename dump.rdb #指定数据备份文件名(redis的数据库文件后缀默认为.rdb)
dis /usr/logcal/redis/data/ #指定数据备份文件的存放位置,默认为当前配置文件的目录下
#设置redis连接密码,如果配置了该连接密码,客户端在连接redis时需要使用auth 命令提供密码进行认证通过才能连接成功
requirepass manager001
#设置同一时间最大的客户端连接数,默认10000,若不启用该参数,则默认客户端最大连接数为Redis进程可以打开的最大文件描述符数。当达到最大连接数后Redis会关闭新的连接并向客户端发送“max number of clients reached”错误信息。
maxclients 10000
syslog-enabled no #是否开启syslog功能,默认就是no,保持默认即可
syslog-ident redis #syslog的标识符
#设置Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会尝试清除已到期或即将到期的key,采用以下策略能达到最大内存后Redis不能进行写操作,但可以进行读操作。
maxmemory <bytes>
#当达到最大内存限制后,新版的Redis提供5中策略来处理
volatile-lur 利用LRU算法移除设置过期时间的key
allkeys-lur 利用LRU算法移除任何key
volatile-lfu
allkeys-lfu
volatile-random 移除过期时间的随机key
allkeys-random 移除过期的全部key
volatile-ttl 移除即将过期的key
noeviction 不移除任何key,只是返回一个写错误(默认选项)
#客户端查看某个配置命令
config get <port>
#客户端查看所有配置命令
config get *
redis的客户端使用命令行的方式连接的话一般不太可视化,还有更可视化的客户端工具,如:redis-desktop-manager.exe、redisplus.exe(需要更改redis.server中的config文件中的bind参数和protected-mode no才能让第三方客户端工具连接的上)
java中连接redis:
Jedis jedis=new Jedis(“192.168.1.100”,6379);
jedis.auth(“manager001”);
system.out.print(jredis.ping()) //输出PONG
jedis.close();
Java中操作Redis一般都有对于Redis命令的方法,如:
jedis.add方法、jedis.zadd方法、jedis.set方法、jedis.mset方法、jedis.select(0);