启动我的redis(我的redis是在www下面的server下面的redis下面的src里面去执行下面这串指令,如果你的src在其他地方可以换)
./redis-server &
cd 到src下面
对redis进行压力测试宝塔用不了(因为没有这个对应的文件)
redis-benchmark -h localhost -p 6379 -c 100 -n 100000
常用命令
select n:n这边是选择第几个数据库
dbsize :查询数据库大小
get name 或者set name 可以设置字段
APPEND key1 "hello"可以在某个key中补充字段 (如果不存在就相当于set key)
keys *:查看数据库所有的key
flushdb:清空当前数据库
flushall:清楚所有的数据库
redis 端口号6379
redis是单线程的 why?redis基于内存操作的,cpu不是性能瓶颈,而是机器的内存和网络带宽
redis不区分大小写命令
redis为什么单线程还快?
redis是将所有的的数据放在内存中,所有使用单线程效率最高,多线程会产生上下文切换,反而会耗时。
redis可以作数据库、缓存和消息中间件MQ
它支持多种数据类型 string hash list set sorted set
Rediskey
有一些操作
move(移除当前key) exists(判断是否存在) set xxx这些
expire xxx xx:第一个是字段名,第二个是到期时间
ttl xxx:可以查还剩多少时间 
type xxx(字段):可以查出字段的类型
String
STRLEN key1:查看多长
incr views:可以让views自增1
decr views:可以让views自减1
incrby/decrby views 10:设置步长
GETRANGE key1 1 4:取字符串范围 【1,4】
SETRANGE key2 1 sunzhijun:替换从哪一位开始的字符串
setex:(set with expire):设置过期时间
setnx:(set if not exist):不存在再设置(在分布式锁会常常使用)(存在会创建失败)
mset k1 v1 k2 v2 k3 v3 :批量设置值
mget:批量拿
#对象
set user:1 {name:sunzhijun,age:22}
mget user:1
getset db redis:先获取再set,返回获取到的值(用于更新操作)
使用场景:计数器,统计数量,缓存存储,粉丝数
List
(列表) 可以完成栈和队列
所有list命令都是l开头的
LPUSH :存数据 LPUSH list one,将一个或多个值插入到列表的头部
RPUSH :存数据 RPUSH list one,将一个或多个值插入到列表的尾部
LRANGE:看数据 LRANGE 0 -1
移除列表第一个元素是LPOP RPOP
lindex list 0:获取第一个下标为0的值 
llen list:查列表长度
LREM list 1 one:移除一个one
ltrim:从左边开始修剪 ltrim ltrim list 2 3///
127.0.0.1:6379> LRANGE list 0 -1
1) "five"
2) "four"
3) "three"
4) "two"
5) "one"
127.0.0.1:6379> ltrim list 2 3
OK
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "two"
127.0.0.1:6379>
rpoplpush:(组合命令 )
127.0.0.1:6379> RPUSH list hello1
(integer) 1
127.0.0.1:6379> RPUSH list hello2
(integer) 2
127.0.0.1:6379> RPUSH list hello3
(integer) 3
127.0.0.1:6379> RPUSH list hello4
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1
1) "hello1"
2) "hello2"
3) "hello3"
4) "hello4"
127.0.0.1:6379> RPOPLPUSH list mylist
"hello4"
127.0.0.1:6379> LRANGE list 0 -1
1) "hello1"
2) "hello2"
3) "hello3"
127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello4"
LSET mylist 0 woaini:替换值 (做了更新操作)
插入值:
127.0.0.1:6379> LRANGE mylist 0 -1
1) "woaini"
127.0.0.1:6379> linsert mylist before "woaini" hanyuzhu
(integer) 2
127.0.0.1:6379> LRANGE mylist 0 -1
1) "hanyuzhu"
2) "woaini"
总结:
实际上,它是一个链表,before 或者after left right都可插入
两边改动效率最高,中间改动比较低
Set:无序不重复集合
(在所有操作前面加s)
sadd set “hello”
127.0.0.1:6379> sadd myset "hello"
(integer) 1
127.0.0.1:6379> sadd myset "hello1"
(integer) 1
127.0.0.1:6379> sadd myset "hello2"
(integer) 1
127.0.0.1:6379> keys *
1) "myset"
127.0.0.1:6379> SMEMBERS myset(查询myset的所有值)
1) "hello"
2) "hello1"
3) "hello2"
是否包含:
127.0.0.1:6379> SISMEMBER myset hello1
(integer) 1
127.0.0.1:6379> SISMEMBER myset hoo
(integer) 0
获取元素中元素个数
127.0.0.1:6379> scard myset
(integer) 3
移除元素
127.0.0.1:6379> srem myset hello
(integer) 1
127.0.0.1:6379> scard myset
(integer) 2
随机移除一个元素
127.0.0.1:6379> spop myset
"hello2"
smove xxx xxx "":将一个特定的值,移动到另一个set集合中
求交并补三种集合
127.0.0.1:6379> sadd key1 one
(integer) 1
127.0.0.1:6379> sadd key1 two
(integer) 1
127.0.0.1:6379> sadd key1 three
(integer) 1
127.0.0.1:6379> sadd key2 three
(integer) 1
127.0.0.1:6379> SDIFF key1 key2 差集
1) "one"
2) "two"
127.0.0.1:6379> SINTER key1 key2 交集 共同好友就是这样实现的
1) "three"
127.0.0.1:6379> SUNION key1 key2 并集
1) "one"
2) "two"
3) "three"
Hash(哈希)
Map集合,key-<key,value>,这里寸的是键值对,是map集合
本质和string没有太大区别
127.0.0.1:6379> HSET myhash field1 sunzhijun set一个具体的key-value
(integer) 1
127.0.0.1:6379> hget myhash field1
"sunzhijun"
127.0.0.1:6379> hmset myhash field1 sun field2 zhi field jun
OK
127.0.0.1:6379> HMGET myhash field1 field2
1) "sun"
2) "zhi"
删除字段
127.0.0.1:6379> hdel myhash field1
(integer) 1
127.0.0.1:6379> hget myhash field1
(nil) ------------------------删除成功
获取有多少个键值对(字段数量)
127.0.0.1:6379> hlen myhash
(integer) 2
判断一个hash中这个键值对是否存在
--javascripttypescriptshellbashsqljsonhtmlcssccppjavarubypythongorustmarkdown
127.0.0.1:6379> HEXISTS myhash field1
(integer) 0-----------------不存在
直接拿所有的key或者value
127.0.0.1:6379> hkeys myhash
1) "field2"
2) "field"
127.0.0.1:6379> hvals myhash
1) "zhi"
2) "jun"
hash变更值
127.0.0.1:6379> hset user:1 name sunzhijun
(integer) 1
127.0.0.1:6379> hset user:2 name hanyuzhu
(integer) 1
127.0.0.1:6379> hget user:1 name
"sunzhijun"
之前在string类型的时候也可以设置set user:{name:sunzhijun,age:3}这种形式
hash比较适合用户信息这类的保存,用于经常变动的信息(适合存储对象)
ZSet(有序集合)
本质是在set的基础上增加了一个值
zset k1 score1 v1(v1相当于使用来排序的)
127.0.0.1:6379> zadd myset 1 one
(integer) 1
127.0.0.1:6379> zadd myset 2 two 3 three
(integer) 2
127.0.0.1:6379> ZRANGE myset 0 -1
1) "one"
2) "two"
3) "three"
#########################################################
如果想实现排序呢
127.0.0.1:6379> zadd xinshui 2500 xiaohong 5000 zhangsan 500 sunzhijun
(integer) 3
127.0.0.1:6379> ZRANGE xinshui 0 -1
1) "sunzhijun"
2) "xiaohong"
3) "zhangsan"
127.0.0.1:6379> ZRANGEBYSCORE xinshui -inf +inf
1) "sunzhijun"
2) "xiaohong"
3) "zhangsan"
127.0.0.1:6379> ZRANGEBYSCORE xinshui -inf +inf withscores
1) "sunzhijun"
2) "500"
3) "xiaohong"
4) "2500"
5) "zhangsan"
6) "5000"
只能最小值到最大值哈,不然是错的
薪水小于2500的升序排列
127.0.0.1:6379> ZRANGEBYSCORE xinshui -inf 2500 withscores
1) "sunzhijun"
2) "500"
3) "xiaohong"
4) "2500"
127.0.0.1:6379> ZREVRANGE xinshui 0 -1(这是从大到小排序)
1) "zhangsan"
2) "sunzhijun"
移除有序集合中的指定元素
127.0.0.1:6379> zrange xinshui 0 -1
1) "sunzhijun"
2) "xiaohong"
3) "zhangsan"
127.0.0.1:6379> zrem xinshui xiaohong
(integer) 1
127.0.0.1:6379> zcard xinshui(获取有序集合中的个数)
(integer) 2
获取指定区间的值
127.0.0.1:6379> zadd myset 1 hello
(integer) 1
127.0.0.1:6379> zadd myset 2 world
(integer) 1
127.0.0.1:6379> zadd myset 3 sunzhijun
(integer) 1
127.0.0.1:6379> ZCOUNT myset 1 2
(integer) 2
其余指令可以在官网查
可以对一些重要消息带权重执行
比如:排行榜(取top n)
标签:127.0,入门,0.1,数据类型,myset,Redis,6379,list,integer From: https://blog.csdn.net/weixin_46667127/article/details/142614341