redis常用命令、数据类型讲解

前言

环境: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型数据。

启动redis服务,并使用redis.cli客户端工具连接登陆

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常用命令讲解

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的数据备份

默认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)

string字符串

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

list列表

命令 作用 示例
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哈希(很常用的数据结构)

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

set 集合

命令 作用 示例
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 有序集合

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”

redis.conf配置大全详解

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);

你可能感兴趣的:(Redis,redis)