redis的基本概念和命令操作

redis安装

下载地址:https://redis.io/download

本人下载版本:redis-5.0.5

将软件解压到安装目录,本人mac安装目录为:~/software。

解压完成后,redis需要通过make进行编译,并使用make install进行安装

tar -zxvf redis-5.0.5.tar.gz -C ~/software
cd ~/software/redis-5.0.5
make
make install

执行结果如下:

➜  redis-5.0.5 make
cd src && /Library/Developer/CommandLineTools/usr/bin/make all
    CC Makefile.dep
rm -rf redis-server redis-sentinel redis-cli redis-benchmark redis-check-rdb redis-check-aof *.o *.gcda *.gcno *.gcov redis.info lcov-html Makefile.dep dict-benchmark
(cd ../deps && /Library/Developer/CommandLineTools/usr/bin/make distclean)
(cd hiredis && /Library/Developer/CommandLineTools/usr/bin/make clean) > /dev/null || true
(cd linenoise && /Library/Developer/CommandLineTools/usr/bin/make clean) > /dev/null || true
(cd lua && /Library/Developer/CommandLineTools/usr/bin/make clean) > /dev/null || true
(cd jemalloc && [ -f Makefile ] && /Library/Developer/CommandLineTools/usr/bin/make distclean) > /dev/null || true
(rm -f .make-*)
(rm -f .make-*)
echo STD=-std=c99 -pedantic -DREDIS_STATIC='' >> .make-settings
echo WARN=-Wall -W -Wno-missing-field-initializers >> .make-settings
echo OPT=-O2 >> .make-settings
echo MALLOC=libc >> .make-settings
echo CFLAGS= >> .make-settings
echo LDFLAGS= >> .make-settings
echo REDIS_CFLAGS= >> .make-settings
echo REDIS_LDFLAGS= >> .make-settings
echo PREV_FINAL_CFLAGS=-std=c99 -pedantic -DREDIS_STATIC='' -Wall -W -Wno-missing-field-initializers -O2 -g -ggdb   -I../deps/hiredis -I../deps/linenoise -I../deps/lua/src >> .make-settings
echo PREV_FINAL_LDFLAGS=  -g -ggdb >> .make-settings
(cd ../deps && /Library/Developer/CommandLineTools/usr/bin/make hiredis linenoise lua)
(cd hiredis && /Library/Developer/CommandLineTools/usr/bin/make clean) > /dev/null || true
(cd linenoise && /Library/Developer/CommandLineTools/usr/bin/make clean) > /dev/null || true
(cd lua && /Library/Developer/CommandLineTools/usr/bin/make clean) > /dev/null || true
(cd jemalloc && [ -f Makefile ] && /Library/Developer/CommandLineTools/usr/bin/make distclean) > /dev/null || true
(rm -f .make-*)
(echo "" > .make-ldflags)
(echo "" > .make-cflags)
MAKE hiredis
cd hiredis && /Library/Developer/CommandLineTools/usr/bin/make static
cc -std=c99 -pedantic -c -O3 -fPIC  -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb  net.c
cc -std=c99 -pedantic -c -O3 -fPIC  -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb  hiredis.c
cc -std=c99 -pedantic -c -O3 -fPIC  -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb  sds.c
cc -std=c99 -pedantic -c -O3 -fPIC  -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb  async.c
cc -std=c99 -pedantic -c -O3 -fPIC  -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb  read.c
ar rcs libhiredis.a net.o hiredis.o sds.o async.o read.o
MAKE linenoise
cd linenoise && /Library/Developer/CommandLineTools/usr/bin/make
cc  -Wall -Os -g  -c linenoise.c
MAKE lua
cd lua/src && /Library/Developer/CommandLineTools/usr/bin/make all CFLAGS="-O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC='' " MYLDFLAGS="" AR="ar rcu"
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lapi.o lapi.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lcode.o lcode.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o ldebug.o ldebug.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o ldo.o ldo.c
ldo.c:496:7: warning: unused variable 'c' [-Wunused-variable]
  int c = luaZ_lookahead(p->z);
      ^
1 warning generated.
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o ldump.o ldump.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lfunc.o lfunc.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lgc.o lgc.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o llex.o llex.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lmem.o lmem.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lobject.o lobject.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lopcodes.o lopcodes.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lparser.o lparser.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lstate.o lstate.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lstring.o lstring.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o ltable.o ltable.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o ltm.o ltm.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lundump.o lundump.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lvm.o lvm.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lzio.o lzio.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o strbuf.o strbuf.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o fpconv.o fpconv.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lauxlib.o lauxlib.c
lauxlib.c:577:61: warning: while loop has empty body [-Wempty-body]
   while ((c = getc(lf.f)) != EOF && c != LUA_SIGNATURE[0]) ;
                                                            ^
lauxlib.c:577:61: note: put the semicolon on a separate line to silence this
      warning
1 warning generated.
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lbaselib.o lbaselib.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o ldblib.o ldblib.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o liolib.o liolib.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lmathlib.o lmathlib.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o loslib.o loslib.c
loslib.c:60:3: warning: 'tmpnam' is deprecated: This function is provided for
      compatibility reasons only. Due to security concerns inherent in the
      design of tmpnam(3), it is highly recommended that you use mkstemp(3)
      instead. [-Wdeprecated-declarations]
  lua_tmpnam(buff, err);
  ^
./luaconf.h:657:33: note: expanded from macro 'lua_tmpnam'
#define lua_tmpnam(b,e)         { e = (tmpnam(b) == NULL); }
                                       ^
/usr/include/stdio.h:277:7: note: 'tmpnam' has been explicitly marked
      deprecated here
char    *tmpnam(char *);
         ^
1 warning generated.
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o ltablib.o ltablib.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lstrlib.o lstrlib.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o loadlib.o loadlib.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o linit.o linit.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lua_cjson.o lua_cjson.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lua_struct.o lua_struct.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lua_cmsgpack.o lua_cmsgpack.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lua_bit.o lua_bit.c
ar rcu liblua.a lapi.o lcode.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o ltm.o lundump.o lvm.o lzio.o strbuf.o fpconv.o lauxlib.o lbaselib.o ldblib.o liolib.o lmathlib.o loslib.o ltablib.o lstrlib.o loadlib.o linit.o lua_cjson.o lua_struct.o lua_cmsgpack.o lua_bit.o    # DLL needs all object files
ranlib liblua.a
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lua.o lua.c
cc -o lua  lua.o liblua.a -lm
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o luac.o luac.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o print.o print.c
cc -o luac  luac.o print.o liblua.a -lm
    CC adlist.o
    CC quicklist.o
    CC ae.o
    CC anet.o
    CC dict.o
    CC server.o
    CC sds.o
    CC zmalloc.o
    CC lzf_c.o
    CC lzf_d.o
    CC pqsort.o
    CC zipmap.o
    CC sha1.o
    CC ziplist.o
    CC release.o
    CC networking.o
    CC util.o
    CC object.o
    CC db.o
    CC replication.o
    CC rdb.o
    CC t_string.o
    CC t_list.o
    CC t_set.o
    CC t_zset.o
    CC t_hash.o
    CC config.o
    CC aof.o
    CC pubsub.o
    CC multi.o
    CC debug.o
    CC sort.o
    CC intset.o
    CC syncio.o
    CC cluster.o
    CC crc16.o
    CC endianconv.o
    CC slowlog.o
    CC scripting.o
    CC bio.o
    CC rio.o
    CC rand.o
    CC memtest.o
    CC crc64.o
    CC bitops.o
    CC sentinel.o
    CC notify.o
    CC setproctitle.o
    CC blocked.o
    CC hyperloglog.o
    CC latency.o
    CC sparkline.o
    CC redis-check-rdb.o
    CC redis-check-aof.o
    CC geo.o
    CC lazyfree.o
    CC module.o
    CC evict.o
    CC expire.o
    CC geohash.o
    CC geohash_helper.o
    CC childinfo.o
    CC defrag.o
    CC siphash.o
    CC rax.o
    CC t_stream.o
    CC listpack.o
    CC localtime.o
    CC lolwut.o
    CC lolwut5.o
    LINK redis-server
    INSTALL redis-sentinel
    CC redis-cli.o
    LINK redis-cli
    CC redis-benchmark.o
    LINK redis-benchmark
    INSTALL redis-check-rdb
    INSTALL redis-check-aof

Hint: It's a good idea to run 'make test' ;)

➜  redis-5.0.5 make install
cd src && /Library/Developer/CommandLineTools/usr/bin/make install
    CC Makefile.dep

Hint: It's a good idea to run 'make test' ;)

    INSTALL install
    INSTALL install
    INSTALL install
    INSTALL install
    INSTALL install

对redis进行配置

vim redis.conf
  • redis可以配置访问的密码,为了测试学习方便,我们对配置文件中的

protected-mode yes修改为

protected-mode no

  • redis默认配置绑定IP地址为 bind 127.0.0.1,这样的配置只能本地进行访问,同样为了测试学习方便,我们将该配置改为

bind 0.0.0.0

  • redis 默认不能在后台运行,默认配置 daemonize no,我们需要将该配置改为daemonize yes。配置文件中的注释如下:

# By default Redis does not run as a daemon. Use 'yes' if you need it.

# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.

# 默认情况下 redis 不是作为守护进程运行的,如果你想让它在后台运行,你就把它改成 yes。

# 当redis作为守护进程运行的时候,它会写一个 pid 到 /var/run/redis.pid 文件里面。

  • redis的日志默认为空,日志输出配置为:logfile "" ,根据个人需求配置logfile,本人配置:

logfile "/Users/wangyichao/log/redis/redis.log"

启动redis

redis启动端口号 默认为:6379,在daemonize设置为yes时候,直接为后台启动。

cd ~/software/redis-5.0.5
src/redis-server redis.conf

连接本地redis进行命令行测试

src/redis-cli

或者通过指定ip和端口号的方式请求redis,前提是需要对 redis.conf中的bind进行配置

src/redis-cli -h localhost -p 6379

redis基本概念

redis NoSQL

key-value格式基于内存的数据库

key通常情况下为string类型

value有: strings, hashes, lists, sets, sorted sets

 

特性:

1.速度非常快、吞吐量,官方说明 一秒10万次读写

2.持久化 有两种持久化方式 RDB 和 AOF,

RDB是定时的刷新纪录

AOF是将所有操作都记录下来

使用AOF能够完整的恢复日志

3.数据类型

strings, hashes, lists, sets, sorted sets

4.多语言开发

5.其它功能:发布定义 事务 pipeline(一次性可以发布多个请求,即批量处理)

6.单线程

7.可以搭建集群,有主从复制

 

redis多数据库特性

(1)默认有16个数据库,编号从0开始 。默认在0库。命令行:select 0 、select 1。。。

16这个是在redis.conf配置中写入的

# Set the number of databases. The default database is DB 0, you can select
# a different one on a per-connection basis using SELECT <dbid> where
# dbid is a number between 0 and 'databases'-1
databases 16

通常情况下,大部分操作不同库的内容相互隔离。

但是有一个操作:flushall,这个操作不做隔离,所有数据都会清空,因此该操作一定要慎用。

 

redis基础命令

官方文档:https://redis.io/commands

set [name] [value]:设置key-value的值

keys * :查当前数据库的所有内容,keys命令支持匹配,例如keys name* 或者 keys name?或者keys name[0-9]

exists [name] :查找name是否存在,1代表存在,0代表不存在

del [name]:删除指定name

MSET :一次性设置多个key-value,例如:设置两个key-value

 MSET name1 value1 name2 value2

MGET:获取多个key

MGET name1 name2

SETNX [key] [value]:当这个key不存在时,设置这个key的值,换言之,当这个key存在时,使用该命令设置key,该key值也不会发生改变。
 

redis 数据类型

数值类型操作:

incr [key] :将key的value值加1,注意在使用incr命令时,一定要保证key的值为数值类型,否则会报错

incrby [key] [你想要加的值] 要求加的值必须为整型

decrby [key] [你想要减的值] 要求减的值必须为整型 

incrbyfloat [key][你想要加的值],要求减的值必须为浮点型,有一点需要注意,incrbyfloat 没有对应的浮点减法,但是可以通过incrbyfloat [key][负的浮点值] 来实现浮点的减法操作

字符串类型操作

append [key] [value]:对原有的值,进行拼接操作

scrlen [key]:获取key的长度

SETRANGE [key] [offset] [value]:代表从指定位置开始替换

localhost:6379> set message hello
OK
localhost:6379> get message
"hello"
localhost:6379> SETRANGE message 1 world
(integer) 6
localhost:6379> get message
"hworld"

GETRANGE [key] [start] [end]:对指定的key进行截取的操作,第一个位置为0开始,特殊使用:

-1 代表最后一个位置,-5 代表从后往前数 第五个位置

localhost:6379> set message "hello world"
OK
localhost:6379> get message
"hello world"
localhost:6379> GETRANGE message -5 -1
"world"

哈西类型的操作

HSET key field value:设置一个key的某个字段的值,有的字段进行修改,没有的新增

HMSET key field value [field value ...]:设置多个key的字段名称和value值,有的字段进行修改,没有的新增

 HSETNX key field value:仅仅设置不存在的key值,对于已经存在的,不进行任何操作

HGET key field:取出一个key下面某个字段的值

HMGET key field [field ...]:取出多个key下的字段值

HGETALL key:取出一个key下的所有字段的值

  HEXISTS key field:判断key下的某个字段是否存在,存在返回1,不存在返回0

  HINCRBY key field increment:对key下的某个字段进行整型想加的操作
  HINCRBYFLOAT key field increment:对key下的某个字段进行浮点型想加的操作

  HLEN key:查看key下面有多少个字段

HVALS key:查看key下的所有值

localhost:6379> hset user:100 name testname
(integer) 1
localhost:6379> hset user:100 aget 23
(integer) 1
localhost:6379> hset user:100 weight 65.3
(integer) 1
localhost:6379> keys user*
1) "user:100"
localhost:6379> hget user:100 name
"testname"
localhost:6379> hget user:100 aget
"23"
localhost:6379> hget user:100 weight
"65.3"
localhost:6379> HGETALL user:100
1) "name"
2) "testname"
3) "aget"
4) "23"
5) "weight"
6) "65.3"

list类型的操作

list类型为有序的可重复的,和java scala的list相似

lpush

rpush

lpop 从左测弹出,显示结果并删除

rpop从右测弹出,显示结果并删除

lrange 从指定位置取

lrem 从左侧删,特殊使用

set类型的操作

set类型为无序的并且不能重复的

 

SDIFF set1 set2 :返回set1里面有的,set2里没有的

SINTER set1 set2 :交集

SUNION set1 set2:并集

SUNIONSTORE set1 set2 set3 把set1 、set2的元素合并到set3

SCARD key :查看set多少元素

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值