我的Redis学习笔记(一)

一、安装

1.1 安装

  1.下载获得redis-3.0.4.tar.gz后将它放入我们的Linux目录/opt

  2./opt目录下,解压命令:tar -zxvf redis-3.0.4.tar.gz

  3.解压完成后出现文件夹:redis-3.0.4

  4.进入目录:cd redis-3.0.4

  5.在redis-3.0.4目录下执行make命令

  注:运行make命令时故意出现的错误解析:

解决方案

1、安装gcc套装

yum install cpp
yum install binutils
yum install glibc
yum install glibc-kernheaders
yum install glibc-common
yum install glibc-devel
yum install gcc
yum install make

2、升级gcc

yum -y install centos-release-scl

yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils

scl enable devtoolset-9 bash

3、当上面这几步完成后,再执行make命令即可

jemalloc/jemalloc.h:没有那个文件或目录,运行make distclean之后再make

6.make install

1.2 配置 

       

[jumphua@localhost redis-6.0.5]$ cd /usr/local/bin
[jumphua@localhost bin]$ ls -l
总用量 45936
-rwxr-xr-x. 1 root root  6398792 7月   6 15:01 redis-benchmark
-rwxr-xr-x. 1 root root 11301576 7月   6 15:01 redis-check-aof
-rwxr-xr-x. 1 root root 11301576 7月   6 15:01 redis-check-rdb
-rwxr-xr-x. 1 root root  6721408 7月   6 15:01 redis-cli
lrwxrwxrwx. 1 root root       12 7月   6 15:01 redis-sentinel -> redis-server
-rwxr-xr-x. 1 root root 11301576 7月   6 15:01 redis-server


 再执行 redis-cli -p 6379 , 

 

[jumphua@localhost bin]$ redis-cli -p 6379
127.0.0.1:6379> ping         //查看响应
PONG
127.0.0.1:6379> set k1 hallo
OK
127.0.0.1:6379> get k1
"hallo"

 

再打开新的窗口,执行:

[jumphua@localhost ~]$ ps -ef|grep redis
root 125660 119570 0 14:42 ? 00:00:03 ./redis-server *:6379
jumphua 128215 126346 0 15:39 pts/1 00:00:00 redis-cli -p 6379
jumphua 128305 128230 0 15:40 pts/2 00:00:00 grep --color=auto redis

可以看到服务已经启动成功

   redis的关闭: shutdown        ------>        exit

二、基础知识

  1. 单进程:单进程模型来处理客户端的请求。对读写等事件的响应;是通过对epoll函数的包装来做到的。Redis的实际处理速度完全依靠主进程的执行效率。

       epoll是Linux内核为处理大批量文件描述符而作了改进的epoll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。

  2. 默认16个数据库,类似数组下表从零开始,初始默认使用零号库

  3. select命令切换数据库

 >> keys *
 1) "k1"

  >> keys k?
  1) "k1"
  2) "k2"
  3) "k3"

  
  >> set k22 v22
  OK
  >> keys k?
  1) "k1"
  2) "k2"
  3) "k3"
  >> keys k??
  1) "k22"

 

1. key的操作

  exists k1   //k1是否存在

  move k3 2  //吧k3移动到2号库里去

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

  ttl key   //查看还有多少秒过期,-1表示永不过期,-2表示已过期,已过期的话,生命周期已结束,get和keys都不能再获取

    注:如果已经存在了(k1,v1),用set key k1 ty操作,会覆盖(k1,v1)

  type k1 //查看k1值得数据类型

  

2. list的操作    可重复,可挂多个值

   lpush  /rpush    和栈差不多;   lrange    获取

>> lpush list01 1 2 3 4 5  从左开始push
(integer) 5
>> LRANGE list01 0 -1    //查看元素范围 : [0,最后]
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"

>> RPUSH list02 1 2 3 4 5   从右开始push
(integer) 5
>> LRANGE list02 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"

 lpop/rpop

>> LPOP list01
"5"
>> LPOP list02
"1"
>> RPOP list01
"1"
>> RPOP list02
"5"

 

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

llen  长度

lrem key 2 v1  在键为key的值中从left往right删除2个值等于v1的元素,返回的值为实际删除的数量

LREM list3 0 值,表示删除全部给定的值。零个就是全部值

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

>> LRANGE list03 0 -1
1) "4"
2) "4"
3) "3"
4) "2"
5) "2"
6) "2"
7) "2"
8) "1"
9) "1"
10) "1"
11) "1"
>> LTRIM list03 3 5
OK
>> LRANGE list03 0 -1     //从上到下
1) "2"
2) "2"
3) "2"

 

 rpoplpush 源列表 目的列表     //移除源列表的最后一个元素,并将该元素添加到目的列表并返回

>>LRANGE list01 0 -1

1) "6"

2) "5"

3) "4"

4) "3"

5) "2"

6) "1"

>> LRANGE list02 0 -1

1) "10"

2) "9"

3) "8"

>>> RPOPLPUSH list01 list02

"1"

>> LRANGE list02 0 -1

1) "1"

2) "10"

3) "9"

4) "8"

 

 lset key index value   将key的第index个值设为value

 linsert key before/after 值1 值2   //在key的已有的值1前/后添加值2

 

 

3. String的操作

set/get/del/append(在原来的String后添加)/strlen(长度)

Incr(+1)/decr(-1)/incrby(+x)/decrby(-x),一定要是数字才能进行加减

 

>>set k5 abc0123456
OK
>>GETRANGE k5 2 4   // 获取[2,4]
"c01"

>>SETRANGE k5 1 xxx   //从第1位开始加入“xxx”
(integer) 10
>> GETRANGE k5 0 -1   // 获取[0,最后]
"axxx123456"

 

setnx:只有在 key 不存在时设置 key 的值,否则不会生效

>>setnx k2 666
(integer) 0
>>get k2
"9"

mset:同时设置一个或多个 key-value 对。。

>> mset k1 v1 k2 v2 k3 v3
OK

mget:获取所有(一个或多个)给定 key 的值

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

msetnx:同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。

>> MSETNX k5 v5555 k6 v666
(integer) 0
>> get k5
"v5"

 

4. Set 的操作   Redis的Set是string类型的无序集合。它是通过HashTable实现实现的。

   sadd(创建)/smembers(列出k的v)/sismember(查看是否存在kv)

127.0.0.1:6379> SADD s1 v1
(integer) 1
127.0.0.1:6379> sadd s2 v1
(integer) 1
127.0.0.1:6379> sadd s2 v2
(integer) 1
127.0.0.1:6379> sadd s2 v2
(integer) 0

 srem key value 删除集合中元素

 srandmember key 某个整数(随机出几个数)  : 从set集合里面随机取出2个,如果超过最大数量就全部取出,如果写的值是负数,比如-3 ,表示需要取出3个,但是可能会有重复值。

 spop key 随机出栈

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

 数学集合类:差集:sdiff s1 s2 (s1里有但s2里没有的); 交集:sinter; 并集:sunion

 

5. Redis哈希(Hash)   KV模式不变,但V是一个键值对

    hset创建/hget获取/hmset创建多个/hmget获取多个/hgetall获取所有/hdel kk1 k1 删除kk1键里的k1键值

    hlen 获取长度

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

    hkeys获取所有键/hvals获取所有值

127.0.0.1:6379> hkeys user
1) "id"
2) "name"
3) "age"
127.0.0.1:6379> HVALS user
1) "11"
2) "z3"
3) "04"

 hincrby /hincrbyfloat(增加浮点数)

127.0.0.1:6379> HGET customer age
"27"
127.0.0.1:6379> HINCRBY customer age 1
(integer) 28

 hsetnx  不存在赋值,存在了无效。

 

6. Redis有序集合Zset(sorted set)

   zadd/zrange 添加/获取值 / zrange withscores加上这个获取所有

   zrangebyscore key 开始score 结束score

 

  4. dbsize查看当前数据库的key的数量

  5. flushdb:清空当前库

  6. Flushall;通杀全部库

  7. Redis索引都是从零开始

  8. 统一密码管理,16个库都是同样密码,要么都OK要么一个也连接不上

  

  

posted @ 2020-07-07 15:14  Mistolte  阅读(182)  评论(0)    收藏  举报