我的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要么一个也连接不上

浙公网安备 33010602011771号