Redis个人整理学习笔记1

Redis基本知识

开启进入redis

进入redis所在目录

cd /usr/local/bin

执行命令

redis-server lconfig/redis.conf
redis-cli


redis性能测试

redis-benchmark -h localhost -p 6379 -c 100 -n 100000

redis默认有16个数据库,默认使用第一个数据库,可使用select命令更改数据库
在这里插入图片描述
dbsize可查看数据库大小
在这里插入图片描述
flushdb清除当前数据库,flushall清除所有数据库
在这里插入图片描述

redis是单线程的,redis是基于内存操作的,redis的瓶颈不是CPU,而是机器的内存和网络的带宽
Redis是c语言写的,官方提供的是10W+的QPS,完全不比同样使用key-value的MemeCache差

Redis单线程还这么快的原因:

误区1:单线程一定比多线程慢(多线程CPU上下文会切换
误区2:高性能的服务器一定是多线程的
Redis是将所有的数据全部放在内存中,所以单线程效率是最高的

Redis的基本命令

Redis五大数据类型
Redis-Key、

查看所有key

keys *

set key

set key value

判断是否存在key

exists key

移除当前的key

move key

指定key的过期时间

expire key time(单位是秒)

查看当前key的类型

type key

查看当前key的剩余过期时间

ttl key

String
127.0.0.1:6379[1]> set key1 v1//设置值
OK
127.0.0.1:6379[1]> get key1//获取值
"v1"
127.0.0.1:6379[1]> exists key1//查看值是否存在
(integer) 1
127.0.0.1:6379[1]> append key1 hello//字符串后面追加
(integer) 7
127.0.0.1:6379[1]> get key1
"v1hello"
127.0.0.1:6379[1]> strlen key1//获取字符串的长度
(integer) 7
127.0.0.1:6379[1]> append key1 txl
(integer) 10
127.0.0.1:6379[1]> strlen key1
(integer) 10
127.0.0.1:6379[1]> 

127.0.0.1:6379[1]> set views 1
OK
127.0.0.1:6379[1]> incr views
(integer) 2
127.0.0.1:6379[1]> get views
"2"
127.0.0.1:6379[1]> decr views
(integer) 1
127.0.0.1:6379[1]> get views
"1"
127.0.0.1:6379[1]> incrby views 10
(integer) 11
127.0.0.1:6379[1]> decrby views 20 
(integer) -9
127.0.0.1:6379[1]> 

使值加一

incr key

使值减一

decr key

加任意

incrby key n(要加的数量)

减去任意

decrby key n

截取字符串的子串

"hello"
127.0.0.1:6379[1]> getrange k1 0 2
"hel"
127.0.0.1:6379[1]> getrange k1 0 -1
"hello"
127.0.0.1:6379[1]> 

getrange start(从0开始) end

获取整段字符串

getrange 0 -1

替换字符串的子串

127.0.0.1:6379[1]> set k2 abcdef
OK
127.0.0.1:6379[1]> get k2
"abcdef"
127.0.0.1:6379[1]> setrange k2 2 xxx
(integer) 6
127.0.0.1:6379[1]> get k2
"abxxxf"

setrange key start(下标从零开始) str(要替换的字符串)

设置过期时间的键值对

setex key second value

如果存在就不会覆盖(执行失败),不存在会创建

setnx key value


批量创建键值对

127.0.0.1:6379[1]> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379[1]> keys *
1) "k3"
2) "k2"
3) "k1"
127.0.0.1:6379[1]> 

mset k1 v1 k2 v2 k3 v3
批量获取值

127.0.0.1:6379> mget k1 k2 k3
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> 

mget k1 k2 k3

msetnx是一个原子性的操作,要么全部设置成功,要么全部失败

对象

127.0.0.1:6379> mset user:1:name txl user:1:age 21
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "txl"
2) "21"

先获取值,在设置值

127.0.0.1:6379> getset db redis
(nil)
127.0.0.1:6379> get db
"redis"
127.0.0.1:6379> getset db mongodb
"redis"
127.0.0.1:6379> get db
"mongodb"

getset key value

List

所有的list命令都是以l开头的

添加元素,可以添加重复元素

lpush key value

27.0.0.1:6379> lpush list one
(integer) 1
127.0.0.1:6379> lpush list two
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"

lpush放到头部,rpush放到尾部

127.0.0.1:6379> rpush list right
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "right"

lpop移除列表第一个元素,rpop移除列表最后一个元素

127.0.0.1:6379> lpop list
"three"
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
3) "right"
127.0.0.1:6379> rpop list
"right"
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"

根据下标获取值

lindex list index

127.0.0.1:6379> lindex list 1
"one"
127.0.0.1:6379> lindex list 0
"two"

移除指定的值

127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "e1"
3) "two"
4) "one"
127.0.0.1:6379> lrem list 2 one
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "e1"
3) "two"

lrem key count value

去除两边的多余字符

127.0.0.1:6379> rpush list1 "hello"
(integer) 1
127.0.0.1:6379> rpush list1 "hello1"
(integer) 2
127.0.0.1:6379> rpush list1 "hello2"
(integer) 3
127.0.0.1:6379> rpush list1 "hello3"
(integer) 4
127.0.0.1:6379> lrange list1 0 -1
1) "hello"
2) "hello1"
3) "hello2"
4) "hello3"
127.0.0.1:6379> ltrim list1 1 2
OK
127.0.0.1:6379> lrange list1 0 -1
1) "hello1"
2) "hello2"

ltrim key start end

移除一个list的最后一个元素,将它移动到另一个list

127.0.0.1:6379> lrange list1 0 -1
1) "hello"
2) "hello1"
3) "hello2"
127.0.0.1:6379> rpush list1 "hello3"
(integer) 4
127.0.0.1:6379> lrange list1 0 -1
1) "hello"
2) "hello1"
3) "hello2"
4) "hello3"
127.0.0.1:6379> rpoplpush list1 list2
"hello3"
127.0.0.1:6379> lrange list1 0 -1
1) "hello"
2) "hello1"
3) "hello2"
127.0.0.1:6379> lrange list2 0 -1
1) "hello3"

rpoplpush list1 list2

更新当前list里面的值

127.0.0.1:6379> lset list1 0 hhhh
OK
127.0.0.1:6379> lrange list1 0 -1
1) "hhhh"
2) "hello1"
3) "hello2"

前提是键值存在,不然会执行错误

lset key index value

插入元素

127.0.0.1:6379> lrange list1 0 -1
1) "hhhh"
2) "hello1"
3) "hello2"
127.0.0.1:6379> linsert list1 before hhhh hahaha
(integer) 4
127.0.0.1:6379> lrange list1 0 -1
1) "hahaha"
2) "hhhh"
3) "hello1"
4) "hello2"

linsert key before/after value1 value2

Set

添加元素

127.0.0.1:6379> sadd set hello
(integer) 1
127.0.0.1:6379> sadd set txllg
(integer) 1

sadd key value

查看set里面的元素

127.0.0.1:6379> smembers set
1) "txllg"
2) "hello"

smembers key

判断元素是否在set集合中

127.0.0.1:6379> sismember set hello
(integer) 1
127.0.0.1:6379> sismember set hhh
(integer) 0

sismember key value

查看set元素数量及删除元素

127.0.0.1:6379> scard set
(integer) 2
127.0.0.1:6379> srem set hello
(integer) 1
127.0.0.1:6379> smembers set
1) "txllg"

查看数量 scard key
删除元素 srem set hello

随机抽取元素

127.0.0.1:6379> SRANDMEMBER set 1
1) "hhh"
127.0.0.1:6379> SRANDMEMBER set 1
1) "hhh"
127.0.0.1:6379> SRANDMEMBER set 1
1) "txllg"

srandmember key count

随机删除元素

127.0.0.1:6379> spop set
"hhh"

spop key

将一个set的元素移动到另一个set中

127.0.0.1:6379> sadd set2 hl
(integer) 1
127.0.0.1:6379> SMOVE set set2 txllg
(integer) 1
127.0.0.1:6379> smembers set
(empty array)
127.0.0.1:6379> smembers set2
1) "txllg"
2) "hl"

smove source destination value


两个set的差集key1-key2

127.0.0.1:6379> sadd set1 a 
(integer) 1
127.0.0.1:6379> sadd set1 b
(integer) 1
127.0.0.1:6379> sadd set1 c
(integer) 1
127.0.0.1:6379> sadd set2 c
(integer) 1
127.0.0.1:6379> sadd set2 d
(integer) 1
127.0.0.1:6379> sadd set2 e
(integer) 1
127.0.0.1:6379> sdiff set1 set2
1) "a"
2) "b"
127.0.0.1:6379> sdiff set2 set1
1) "d"
2) "e"

sdiff key1 key2

交集和并集

127.0.0.1:6379> sinter set1 set2
1) "c"
127.0.0.1:6379> sunion set1 set2
1) "a"
2) "b"
3) "e"
4) "d"
5) "c"

交集sinter key1 key2
并集union key1 key2

Hash

添加和获取元素

127.0.0.1:6379> hset hash1 field1 value1 field2 value2
(integer) 2
127.0.0.1:6379> hget hash1 field1
"value1"
127.0.0.1:6379> hget hash1 field2
"value2"
127.0.0.1:6379> hgetall hash1
1) "field1"
2) "value1"
3) "field2"
4) "value2"

hset key field value
hget key field
hegtall key

删除元素

127.0.0.1:6379> hgetall hash1
1) "field1"
2) "value1"
3) "field2"
4) "value2"
127.0.0.1:6379> hdel hash1 field1
(integer) 1
127.0.0.1:6379> hgetall hash1
1) "field2"
2) "value2"

hdel key field

查看指定元素是否存在

127.0.0.1:6379> HEXISTS hash1 h
(integer) 0
127.0.0.1:6379> HEXISTS hash1 field2
(integer) 1

hexists key field

获取所有的key

127.0.0.1:6379> hkeys hash1
1) "field2"
2) "field3"
3) "field4"

hkeys key

获取所有的value

127.0.0.1:6379> hvals hash1
1) "value2"
2) "value3"
3) "value4"

hvals hash1

指定自增

127.0.0.1:6379> hset hash1 field1 2 
(integer) 1
127.0.0.1:6379> HINCRBY hash1 field1 10
(integer) 12

hincrby key field n

Zset

添加查看元素

127.0.0.1:6379> zadd zset1 1 one
(integer) 1
127.0.0.1:6379> zadd zset1 2 two 3 three
(integer) 2
127.0.0.1:6379> zrange zset1 0 -1
1) "one"
2) "two"
3) "three"

zadd key number value
zrange key start end

排序输出

127.0.0.1:6379> ZRANGEBYscore zset1 -inf +inf 
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> zrevrange zset1 0 -1
1) "three"
2) "two"
3) "one"


zrangebyscore key -inf +inf (升序)
zrevrange key -inf +inf(降序)

移除元素、查看数量

127.0.0.1:6379> zrem zset1 three
(integer) 1
127.0.0.1:6379> zcard zset1
(integer) 2

zrem key value
zcard key


查看指定区间的元素数量

127.0.0.1:6379> zcount zset1 2 4
(integer) 3

zcount key min max


Redis三大特殊类型
geospatial

添加地点的经纬度

geoadd china:city 116.40 39.90 beijing


获取城市的经纬度

127.0.0.1:6379> geopos china:city beijing
1) 1) "166.40000134706497192"
   2) "39.90000009167092543"

geopos key city,也可以后面写多个城市,都能查询到

获取两城市之间的距离

127.0.0.1:6379> geodist china:city beijing shanghai
"4132638.7228"

geodist key city1 city2

获取两城市之间的直线距离

127.0.0.1:6379> geodist china:city shanghai beijing km
"4132.6387"

geodist key city1 city2 km

查找当前位置半径范围内的元素

127.0.0.1:6379> georadius china:city 110 30 1000 km
1) "hangzhou"

georadius key 经度 纬度 距离 单位(km)

hyperloglog

计数统计,去重复元素

127.0.0.1:6379> pfadd key1 a b c d e f g h
(integer) 1
127.0.0.1:6379> pfcount key1
(integer) 8
127.0.0.1:6379> pfadd key2 1 2 3 4 5 6
(integer) 1
127.0.0.1:6379> pfcount key2
(integer) 6
127.0.0.1:6379> pfmerge key3 key1 key2
OK
127.0.0.1:6379> pfcount key3
(integer) 14

bitmaps

存状态值

127.0.0.1:6379> setbit sign 0 1
(integer) 0
127.0.0.1:6379> setbit sign 1 1
(integer) 0
127.0.0.1:6379> setbit sign 2 0
(integer) 0
127.0.0.1:6379> setbit sign 3 0
(integer) 0
127.0.0.1:6379> setbit sign 4 1
(integer) 0
127.0.0.1:6379> setbit sign 5 1
(integer) 0
127.0.0.1:6379> setbit sign 6 1

setbit key offset value

取值

127.0.0.1:6379> getbit sign 3
(integer) 0

getbit key offfset


统计为1数量

127.0.0.1:6379> bitcount sign 0 6
(integer) 5

bitcount key start end

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值