[Redis入门到精通day02]redis入门、安装及常用类型与常用操作命令

Redis入门到精通day02

一、Redis简介

Redis(remote dictionary server) 远程字典服务器

1.特点

redis和其他KV缓存产品有以下三个特点:

1.持久化,重启后可以再次家在使用

2.数据类型丰富,同时提供list,set,zset,hash等数据结构存储

3.支持数据备份,即master-slave(主从模式)数据备份

2.作用

1.内存存储和持久化,支持异步写入同时不影响服务

2.支持取n个数据的操作

3.模拟类似于HTTPSession这种类型的设定过期时间的功能

4.发布,订阅消息系统

5.定时器,计数器

二、linux安装redis

这里使用docker安装redis

具体步骤见博客

挂载+进入容器运行

默认装载16个数据库

三、操作redis

1.进入redis

docker exec -it redis redis-cli

2.更换数据库编号

编号是0~数据库个数-1

127.0.0.1:6379> select 7 #选择6号数据库
OK
127.0.0.1:6379[7]> 

3.入门指令

127.0.0.1:6379> DBSIZE	#查询当前库的所有kv数量
(integer) 4
127.0.0.1:6379> keys *	#查询当前库所有键
1) "backup3"
2) "backup2"
3) "backup4"
4) "backup1"

127.0.0.1:6379> set k1 v1	#存储k1-v1
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> keys k?	#模糊查询k?
1) "k1"
2) "k2"
127.0.0.1:6379> FLUSHDB	#删除当前库数据
127.0.0.1:6379> FLUSHALL	#删除所有库数据

四、常用五大数据类型

String,Hash,List,Set,Zset

1.String

是最基本的类型,一个K对应一个V

String类型是二进制安全的,可以包含任意数据比如jpg或者序列化对象,V最多可以是512M

2.Hash

hash是一个键值对集合,特别适合存储对象,类型与Map<String,Object>

3.List

列表是简单的字符串列表,可以在头部或者尾部添加,底层实现是链表

4.Set

是String的无序集合,底层使用HashTable实现

5.Zset

Zset是有序集合,也是String类型的集合,不允许存在重复的成员,每个元素都会关联一个double类型的分数,通过这个分数进行从小到大排序。

Zset的成员是唯一的,分数是可以重复的

五、常用命令

1.redis键(key)

keys * 查询所有key

exists key的名字 判断某个key是否存在

move key db 从当前库移动到db库

expire key 秒钟 为给定的key设置过期时间

ttl key 查看还有多少秒过期,-1表示永不过期,-2表示已过期

type key 查看你的key是什么类型

127.0.0.1:6379> keys *
1) "k1"
2) "k2"
3) "k3"
127.0.0.1:6379> EXISTS k1		#是否存在k1,存在1,不存在0
(integer) 1
127.0.0.1:6379> EXISTS k5
(integer) 0
127.0.0.1:6379> MOVE k1 1		#将k1移动到第二个库
(integer) 1
127.0.0.1:6379> keys *
1) "k2"
2) "k3"
127.0.0.1:6379> EXPIRE k2 10	#设置k2过期时间为10秒
(integer) 1
127.0.0.1:6379> TTL k2	#查询过期时间,如果已经过期就是-2,-1表示永不过期
(integer) 7
127.0.0.1:6379> keys *
1) "k3"
127.0.0.1:6379> TYPE k3		#查询k3类型为String
string

2.redis字符串(String)

set/get/del/append/strlen 设置/获取/删除/追加/字符串长度

Incr/decr/incrby/decrby 在value是数字的前提下操作,加1/减1/加上一个值/减去一个值

getrange/setrange 获取范围/设置范围

setex(set with expire)键秒值/setnx(set if not exist) 设置过期时间/如果不存在则设置

mset/mget/msetnx 同时设置多个kv/获取多个kv/同时设置多个kv,并要求所有要设置的kv都不存在

getset(先get再set) 获取旧值设置新值

127.0.0.1:6379> set k1 v1		#设置k1
OK
127.0.0.1:6379> get k1		#获取k1的值
"v1"
127.0.0.1:6379> del k1		#删除k1的值
(integer) 1
127.0.0.1:6379> get k1	
(nil)
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> APPEND k1 123		#v1后面追加123
(integer) 5
127.0.0.1:6379> STRLEN k1				#查询k1的长度
(integer) 5
127.0.0.1:6379> GET k1
"v1123"
127.0.0.1:6379> set k1 1		#v必须是数字
OK
127.0.0.1:6379> INCR k1			#自增1
(integer) 2
127.0.0.1:6379> INCR k1
(integer) 3
127.0.0.1:6379> INCR k1
(integer) 4
127.0.0.1:6379> INCR k1
(integer) 5
127.0.0.1:6379> DECR k1			#自减1
(integer) 4
127.0.0.1:6379> 
127.0.0.1:6379> DECR k1
(integer) 3
127.0.0.1:6379> DECR k1
(integer) 2
127.0.0.1:6379> DECR k1
(integer) 1
127.0.0.1:6379> INCRBY k1 2	#增加2
(integer) 3
127.0.0.1:6379> INCRBY k1 2
(integer) 5
127.0.0.1:6379> INCRBY k1 2
(integer) 7
127.0.0.1:6379> DECRBY k1 2	#减去2
(integer) 5
127.0.0.1:6379> DECRBY k1 2
(integer) 3
127.0.0.1:6379> DECRBY k1 2
(integer) 1

127.0.0.1:6379> set k2 v1234
OK
127.0.0.1:6379> GETRANGE k2 0 -1		#GETRANGE 键 0 -1 查询整个v1
"v1234"
127.0.0.1:6379> GETRANGE k2 0 1			#GETRANGE 键 n m 查询v1的n-m索引值
"v1"
127.0.0.1:6379> SETRANGE k2 0 xxx		#SETRANGE 键 n xxx 修改从n索引后面为xxx
(integer) 5
127.0.0.1:6379> get k2
"xxx34"
127.0.0.1:6379> SETEX k2 5 10		#设置一个值为10的k2,过期时间为5秒
OK
127.0.0.1:6379> SETNX k1 5			#如果存在k1则设置成功否则设置失败
(integer) 0
127.0.0.1:6379> SETNX k2 5
(integer) 1
127.0.0.1:6379> get k2
"5"

127.0.0.1:6379> MSET k1 v1 k2 v2 k3 v3		#保存k1=v1 k2=v2 k3=v3
OK
127.0.0.1:6379> MGET k1 k2 k3							#获取k1,k2,k3的值
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> MSETNX k1 111 k4 112			#具有原子性,如果有一个不能加,其他都不行
(integer) 0
127.0.0.1:6379> MSETNX k5 111 k4 112
(integer) 1
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> getset k1 new							#获取旧值并将新值传入
"v1"
127.0.0.1:6379> get k1
"new"

3.redis列表(list)

lpush/rpush/lrange 从左边压入数据/从右边压入数据/从左边范围

lpop/rpop 从左边出栈/从右边出栈

lindex 按照索引下标获得元素(从上到下)

llen 队列长度

lrem key 删N个value

ltrim key 开始index 结束index,截取指定范围的值后再赋值给key

rpoplpush 右边出栈加载左边

lset key index value

linsert key before/after 值1 值2 在key值前/后插入值

127.0.0.1:6379> LPUSH list1 1 2 3 4 5		#从左边压入数据
(integer) 5
127.0.0.1:6379> LRANGE list1 0 -1				#获取list1全部数据
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"	
127.0.0.1:6379> RPUSH list2 1 2 3 4 5 	#从右边压入数据
(integer) 5
127.0.0.1:6379> LRANGE list2 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> lpop list1							#左边出栈
"5"
127.0.0.1:6379> rpop list1							#右边出栈
"1"
127.0.0.1:6379> lpop list2
"1"
127.0.0.1:6379> rpop list2
"5"
127.0.0.1:6379> LINDEX list1 0					#LINDEX list1 n  获取索引n处的值
"4"
127.0.0.1:6379> LINDEX list2 0
"2"
127.0.0.1:6379> LLEN list1							#获取列表元素数量
(integer) 3
127.0.0.1:6379> RPUSH list1 1 2 3 4 5 5 5 6 7
(integer) 9
127.0.0.1:6379> LREM list1 2 5					#删除List1中从左往右的2个5
(integer) 2
127.0.0.1:6379> LRANGE list1 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
127.0.0.1:6379> LRANGE list2 0 -1
1) "2"
2) "3"
3) "4"
127.0.0.1:6379> RPOPLPUSH list1 list2		#将List1的右边第一个元素出栈压入到List2的左边
"7"
127.0.0.1:6379> LRANGE list2 0 -1
1) "7"
2) "2"
3) "3"
4) "4"


4.redis集合(Set)

sadd/smembers/sismember 添加集合/列出集合数据/看是不是集合的数据

scard 获取集合里面的元素个数

srem key value 删除集合中元素

srandmember key 某个整数(随机出几个数)

spop key 随机出栈

smove key1 key2 在key1里某个值 作用是将key1里的某个值赋给key2

差集:sdiff

交集:sinter

并集:sunion

127.0.0.1:6379> SADD set1 1 2 3 4 5		#创建set1将12345添加进去
(integer) 5	
127.0.0.1:6379> SMEMBERS set1					#set1的所有数据
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> SISMEMBER set1 3
(integer) 1
127.0.0.1:6379> SCARD set1						#显示set1个数
(integer) 5
127.0.0.1:6379> SREM set1 3
(integer) 1
127.0.0.1:6379> SRANDMEMBER set1			#随机出一个数,不删除
"5"
127.0.0.1:6379> SMEMBERS set1					
1) "1"
2) "2"
3) "4"
4) "5"
127.0.0.1:6379> spop set1							#随机出栈一个数
"1"
127.0.0.1:6379> SMEMBERS set1
1) "2"
2) "4"
3) "5"
127.0.0.1:6379> SADD set2 2 3
(integer) 2
127.0.0.1:6379> SMOVE set1 set2 5			#将set1的5移到set2
(integer) 1
127.0.0.1:6379> sadd  set1 1 2 3 4 5
(integer) 5
127.0.0.1:6379> SADD set2 1 2 3 7 8
(integer) 5
127.0.0.1:6379> SDIFF set1 set2				#取set1为主,找出两个集合的差集
1) "4"
2) "5"
127.0.0.1:6379> SINTER set1 set2			#找出两个集合的交集
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> SUNION set1 set2			#找出两个集合的并集
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "7"
7) "8"

5.redis哈希(hash)

以kv形式存储,但是v存储的是kv形式

hset/hget/hmset/hmget/hgetall/hdel

hlen

hexists key 在key里面的某个值的key

hkeys/hvals

hincrby/hincrbyfloat

hsetnx

127.0.0.1:6379> hset hash1 age 10		#添加age=10的hash表
(integer) 1
127.0.0.1:6379> HGET hash1 age			#查找hash1中的age值
"10"
127.0.0.1:6379> HMSET hash2 name zhangsan age 18		#多kv添加
OK
127.0.0.1:6379> hmget hash2 name age		#获取多属性name,age的值
1) "zhangsan"
2) "18"
127.0.0.1:6379> HGETALL hash2		#获取hash2的所有kv对
1) "name"
2) "zhangsan"
3) "age"
4) "18"
127.0.0.1:6379> HDEL hash2 name		#删除hash2的name键值对
(integer) 1
127.0.0.1:6379> HGETALL hash2
1) "age"
2) "18"
127.0.0.1:6379> HLEN hash2		#hash2的长度
(integer) 1
127.0.0.1:6379> HEXISTS hash2 age		#hash2是否存在age属性
(integer) 1
127.0.0.1:6379> HSET hash3 name lisi age 20 sex nan
(integer) 3
127.0.0.1:6379> hgetall hash3
1) "name"
2) "lisi"
3) "age"
4) "20"
5) "sex"
6) "nan"
127.0.0.1:6379> hkeys hash3		#获取hash3的所有keys
1) "name"
2) "age"
3) "sex"
127.0.0.1:6379> HVALS hash3		#获取hash3的所有values
1) "lisi"
2) "20"
3) "nan"
127.0.0.1:6379> HINCRBY hash3 age 2		#hash3的age加2
(integer) 22
127.0.0.1:6379> HINCRBYFLOAT hash3 age 0.5		#hash3的age加0.5
"22.5"
127.0.0.1:6379> hsetnx hash3 age 50		#如果存在则不加,如果不存在则添加
(integer) 0
127.0.0.1:6379> hsetnx hash3 money 50
(integer) 1

6.redis有序集合(Zset)

集合方式是 key score value

zadd/zrange 添加/范围

zrangebyscore key 开始score 结束score

zrem key 某score下对应的value值,作用是删除元素

zcard/zcount key score区间/zrank key values值,作用是获得下标值/zscore key 对应值,获得分数

zrevrank key values值,作用是逆序获得下标值

zrevrange

zrevrangebyscore key 结束score 开始score

127.0.0.1:6379> ZADD zset1 10 v1 20 v2 40 v3 30 v4		#按照key score value添加
(integer) 4
127.0.0.1:6379> ZRANGE zset1 0 -1		#查询所有zset1
1) "v1"
2) "v2"
3) "v4"
4) "v3"
127.0.0.1:6379> ZRANGE zset1 0 1		#查询0-1位置的zset1
1) "v1"
2) "v2"
127.0.0.1:6379> ZRANGEBYSCORE zset1 10 30		#按10-30分数排列zset,加上(表示不含
1) "v1"
2) "v2"
3) "v4"
127.0.0.1:6379> ZREM zset1 v3		#删除v3
(integer) 1
127.0.0.1:6379> ZCARD zset1			#zset1的元素个数
(integer) 3	
127.0.0.1:6379> ZCOUNT zset1 10 20		#获取分数为10-20的zset1集合中个数
(integer) 2
127.0.0.1:6379> ZRANK zset1 v4				#获取value为v4的值的下标
(integer) 2
127.0.0.1:6379> ZSCORE zset1 v4				#获取v4的分数
"30"
127.0.0.1:6379> ZREVRANK zset1 v4			#获取v4的逆序下标
(integer) 0
127.0.0.1:6379> ZREVRANGE zset1 0 -1	#获取zset1所有逆序元素
1) "v4"
2) "v2"
3) "v1"
127.0.0.1:6379> ZREVRANGEBYSCORE zset1 40 10		#分数从大到小获取40-10的逆序元素
1) "v4"
2) "v2"
3) "v1"



版权声明:本文为qq_41522089原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。